@siemens/maps-ng 51.0.0-rc.9 → 51.0.1
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.
|
@@ -106,11 +106,11 @@ class SiMapTooltipComponent {
|
|
|
106
106
|
return label;
|
|
107
107
|
}
|
|
108
108
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiMapTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
109
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiMapTooltipComponent, isStandalone: true, selector: "si-map-tooltip", inputs: { moreText: { classPropertyName: "moreText", publicName: "moreText", isSignal: true, isRequired: false, transformFunction: null }, maxLabelLength: { classPropertyName: "maxLabelLength", publicName: "maxLabelLength", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"si-map-tooltip\">\n @for (label of tooltipLabels(); track $index) {\n <div>{{ label }}</div>\n }\n @if (hiddenEntries()) {\n <div>{{ moreText() | translate: { length: hiddenEntries() } }}</div>\n }\n</div>\n", styles: [".si-map-tooltip{text-align:start;margin-block-start:var(--si-sys-sizing-spacing-y-20);position:relative;max-inline-size:max-content;padding-block:var(--si-sys-sizing-spacing-y-20);padding-inline:var(--si-sys-sizing-spacing-x-40);color:var(--si-sys-text-inverse);background-color:var(--si-sys-background-inverse);border-radius:var(--element-radius-1)}.si-map-tooltip:before{content:\"\";position:absolute;inset-block-start:calc(var(--si-sys-sizing-spacing-y-20) * -1);left:50%;transform:translate(-50%) rotate(45deg);block-size:var(--si-sys-sizing-spacing-y-40);inline-size:var(--si-sys-sizing-spacing-x-40);background-color:inherit}\n"], dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
109
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiMapTooltipComponent, isStandalone: true, selector: "si-map-tooltip", inputs: { moreText: { classPropertyName: "moreText", publicName: "moreText", isSignal: true, isRequired: false, transformFunction: null }, maxLabelLength: { classPropertyName: "maxLabelLength", publicName: "maxLabelLength", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"si-map-tooltip\">\n @for (label of tooltipLabels(); track $index) {\n <div>{{ label }}</div>\n }\n @if (hiddenEntries()) {\n <div>{{ moreText() | translate: { length: hiddenEntries() } }}</div>\n }\n</div>\n", styles: [".si-map-tooltip{text-align:start;margin-block-start:var(--si-sys-sizing-spacing-y-20);position:relative;max-inline-size:max-content;padding-block:var(--si-sys-sizing-spacing-y-20);padding-inline:var(--si-sys-sizing-spacing-x-40);color:var(--si-sys-color-text-inverse);background-color:var(--si-sys-color-background-inverse);border-radius:var(--element-radius-1)}.si-map-tooltip:before{content:\"\";position:absolute;inset-block-start:calc(var(--si-sys-sizing-spacing-y-20) * -1);left:50%;transform:translate(-50%) rotate(45deg);block-size:var(--si-sys-sizing-spacing-y-40);inline-size:var(--si-sys-sizing-spacing-x-40);background-color:inherit}\n"], dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
110
110
|
}
|
|
111
111
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiMapTooltipComponent, decorators: [{
|
|
112
112
|
type: Component,
|
|
113
|
-
args: [{ selector: 'si-map-tooltip', imports: [SiTranslatePipe], changeDetection: ChangeDetectionStrategy.Eager, template: "<div class=\"si-map-tooltip\">\n @for (label of tooltipLabels(); track $index) {\n <div>{{ label }}</div>\n }\n @if (hiddenEntries()) {\n <div>{{ moreText() | translate: { length: hiddenEntries() } }}</div>\n }\n</div>\n", styles: [".si-map-tooltip{text-align:start;margin-block-start:var(--si-sys-sizing-spacing-y-20);position:relative;max-inline-size:max-content;padding-block:var(--si-sys-sizing-spacing-y-20);padding-inline:var(--si-sys-sizing-spacing-x-40);color:var(--si-sys-text-inverse);background-color:var(--si-sys-background-inverse);border-radius:var(--element-radius-1)}.si-map-tooltip:before{content:\"\";position:absolute;inset-block-start:calc(var(--si-sys-sizing-spacing-y-20) * -1);left:50%;transform:translate(-50%) rotate(45deg);block-size:var(--si-sys-sizing-spacing-y-40);inline-size:var(--si-sys-sizing-spacing-x-40);background-color:inherit}\n"] }]
|
|
113
|
+
args: [{ selector: 'si-map-tooltip', imports: [SiTranslatePipe], changeDetection: ChangeDetectionStrategy.Eager, template: "<div class=\"si-map-tooltip\">\n @for (label of tooltipLabels(); track $index) {\n <div>{{ label }}</div>\n }\n @if (hiddenEntries()) {\n <div>{{ moreText() | translate: { length: hiddenEntries() } }}</div>\n }\n</div>\n", styles: [".si-map-tooltip{text-align:start;margin-block-start:var(--si-sys-sizing-spacing-y-20);position:relative;max-inline-size:max-content;padding-block:var(--si-sys-sizing-spacing-y-20);padding-inline:var(--si-sys-sizing-spacing-x-40);color:var(--si-sys-color-text-inverse);background-color:var(--si-sys-color-background-inverse);border-radius:var(--element-radius-1)}.si-map-tooltip:before{content:\"\";position:absolute;inset-block-start:calc(var(--si-sys-sizing-spacing-y-20) * -1);left:50%;transform:translate(-50%) rotate(45deg);block-size:var(--si-sys-sizing-spacing-y-40);inline-size:var(--si-sys-sizing-spacing-x-40);background-color:inherit}\n"] }]
|
|
114
114
|
}], propDecorators: { moreText: [{ type: i0.Input, args: [{ isSignal: true, alias: "moreText", required: false }] }], maxLabelLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLabelLength", required: false }] }] } });
|
|
115
115
|
|
|
116
116
|
/**
|
|
@@ -189,11 +189,11 @@ class SiMapPopoverComponent {
|
|
|
189
189
|
this.contentContainer().createEmbeddedView(template, context).detectChanges();
|
|
190
190
|
}
|
|
191
191
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiMapPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
192
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiMapPopoverComponent, isStandalone: true, selector: "si-map-popover", viewQueries: [{ propertyName: "elementRef", first: true, predicate: ["popover"], descendants: true, isSignal: true }, { propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "defaultContent", first: true, predicate: ["defaultContent"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "defaultCluster", first: true, predicate: ["defaultCluster"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<div #popover class=\"si-map-popover\">\n <div class=\"si-map-popover-arrow\"></div>\n\n <div class=\"si-map-popover-content\">\n <div class=\"overflow-auto px-5\">\n <div #contentContainer></div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultContent let-mapPoint=\"mapPoint\" siMapPopoverTemplate>\n <div>{{ mapPoint?.name }}</div>\n <div [innerHTML]=\"mapPoint?.description\"></div>\n</ng-template>\n<ng-template #defaultCluster let-mapPoints=\"mapPoints\" siMapPopoverClusterTemplate>\n <div [style.max-block-size.px]=\"maxHeight()\">\n <div class=\"si-map-popover-list\">\n @for (point of mapPoints; track $index) {\n <div class=\"si-map-popover-item\">\n <div class=\"si-map-popover-item-title\">{{ point.name }}</div>\n <div class=\"si-map-popover-item-description\" [innerHTML]=\"point.description\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n", styles: [".si-map-popover{position:absolute;z-index:1070;display:block;min-inline-size:280px;word-wrap:break-word;background-color:var(--si-sys-background-3);background-clip:padding-box;border:1px solid var(--si-sys-border-4);border-radius:var(--element-radius-2);box-shadow:var(--si-sys-effects-shadow-3);margin-block-start:4px;inset-inline-start:calc(var(--si-sys-sizing-spacing-x-70) * -1)}.si-map-popover-arrow{position:absolute;display:block;inline-size:12px;block-size:6px;margin-block:0;margin-inline:calc(var(--si-sys-sizing-spacing-x-50) + 1px);inset-block-start:-7px}.si-map-popover-arrow:before,.si-map-popover-arrow:after{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid;border-inline-width:6px;border-block-width:0 6px}.si-map-popover-arrow:before{inset-block-start:0;border-block-end-color:var(--si-sys-border-4)}.si-map-popover-arrow:after{inset-block-start:1px;border-block-end-color:var(--si-sys-background-3)}.si-map-popover-content{padding-block:var(--si-sys-sizing-spacing-y-50);color:var(--si-sys-text-primary)}.si-map-popover .si-map-popover-item{display:flex;margin-block-end:var(--si-sys-sizing-spacing-y-50);flex-direction:column;gap:var(--si-sys-sizing-spacing-y-20) var(--si-sys-sizing-spacing-x-20)}.si-map-popover .si-map-popover-item-title{font-weight:bolder}\n"], dependencies: [{ kind: "directive", type: SiMapPopoverTemplateDirective, selector: "[siMapPopoverTemplate]" }, { kind: "directive", type: SiMapPopoverClusterTemplateDirective, selector: "[siMapPopoverClusterTemplate]" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
192
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiMapPopoverComponent, isStandalone: true, selector: "si-map-popover", viewQueries: [{ propertyName: "elementRef", first: true, predicate: ["popover"], descendants: true, isSignal: true }, { propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "defaultContent", first: true, predicate: ["defaultContent"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "defaultCluster", first: true, predicate: ["defaultCluster"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<div #popover class=\"si-map-popover\">\n <div class=\"si-map-popover-arrow\"></div>\n\n <div class=\"si-map-popover-content\">\n <div class=\"overflow-auto px-5\">\n <div #contentContainer></div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultContent let-mapPoint=\"mapPoint\" siMapPopoverTemplate>\n <div>{{ mapPoint?.name }}</div>\n <div [innerHTML]=\"mapPoint?.description\"></div>\n</ng-template>\n<ng-template #defaultCluster let-mapPoints=\"mapPoints\" siMapPopoverClusterTemplate>\n <div [style.max-block-size.px]=\"maxHeight()\">\n <div class=\"si-map-popover-list\">\n @for (point of mapPoints; track $index) {\n <div class=\"si-map-popover-item\">\n <div class=\"si-map-popover-item-title\">{{ point.name }}</div>\n <div class=\"si-map-popover-item-description\" [innerHTML]=\"point.description\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n", styles: [".si-map-popover{position:absolute;z-index:1070;display:block;min-inline-size:280px;word-wrap:break-word;background-color:var(--si-sys-color-background-3);background-clip:padding-box;border:1px solid var(--si-sys-color-border-4);border-radius:var(--element-radius-2);box-shadow:var(--si-sys-color-effects-shadow-3);margin-block-start:4px;inset-inline-start:calc(var(--si-sys-sizing-spacing-x-70) * -1)}.si-map-popover-arrow{position:absolute;display:block;inline-size:12px;block-size:6px;margin-block:0;margin-inline:calc(var(--si-sys-sizing-spacing-x-50) + 1px);inset-block-start:-7px}.si-map-popover-arrow:before,.si-map-popover-arrow:after{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid;border-inline-width:6px;border-block-width:0 6px}.si-map-popover-arrow:before{inset-block-start:0;border-block-end-color:var(--si-sys-color-border-4)}.si-map-popover-arrow:after{inset-block-start:1px;border-block-end-color:var(--si-sys-color-background-3)}.si-map-popover-content{padding-block:var(--si-sys-sizing-spacing-y-50);color:var(--si-sys-color-text-primary)}.si-map-popover .si-map-popover-item{display:flex;margin-block-end:var(--si-sys-sizing-spacing-y-50);flex-direction:column;gap:var(--si-sys-sizing-spacing-y-20) var(--si-sys-sizing-spacing-x-20)}.si-map-popover .si-map-popover-item-title{font-weight:bolder}\n"], dependencies: [{ kind: "directive", type: SiMapPopoverTemplateDirective, selector: "[siMapPopoverTemplate]" }, { kind: "directive", type: SiMapPopoverClusterTemplateDirective, selector: "[siMapPopoverClusterTemplate]" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
193
193
|
}
|
|
194
194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiMapPopoverComponent, decorators: [{
|
|
195
195
|
type: Component,
|
|
196
|
-
args: [{ selector: 'si-map-popover', imports: [SiMapPopoverTemplateDirective, SiMapPopoverClusterTemplateDirective], changeDetection: ChangeDetectionStrategy.Eager, template: "<div #popover class=\"si-map-popover\">\n <div class=\"si-map-popover-arrow\"></div>\n\n <div class=\"si-map-popover-content\">\n <div class=\"overflow-auto px-5\">\n <div #contentContainer></div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultContent let-mapPoint=\"mapPoint\" siMapPopoverTemplate>\n <div>{{ mapPoint?.name }}</div>\n <div [innerHTML]=\"mapPoint?.description\"></div>\n</ng-template>\n<ng-template #defaultCluster let-mapPoints=\"mapPoints\" siMapPopoverClusterTemplate>\n <div [style.max-block-size.px]=\"maxHeight()\">\n <div class=\"si-map-popover-list\">\n @for (point of mapPoints; track $index) {\n <div class=\"si-map-popover-item\">\n <div class=\"si-map-popover-item-title\">{{ point.name }}</div>\n <div class=\"si-map-popover-item-description\" [innerHTML]=\"point.description\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n", styles: [".si-map-popover{position:absolute;z-index:1070;display:block;min-inline-size:280px;word-wrap:break-word;background-color:var(--si-sys-background-3);background-clip:padding-box;border:1px solid var(--si-sys-border-4);border-radius:var(--element-radius-2);box-shadow:var(--si-sys-effects-shadow-3);margin-block-start:4px;inset-inline-start:calc(var(--si-sys-sizing-spacing-x-70) * -1)}.si-map-popover-arrow{position:absolute;display:block;inline-size:12px;block-size:6px;margin-block:0;margin-inline:calc(var(--si-sys-sizing-spacing-x-50) + 1px);inset-block-start:-7px}.si-map-popover-arrow:before,.si-map-popover-arrow:after{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid;border-inline-width:6px;border-block-width:0 6px}.si-map-popover-arrow:before{inset-block-start:0;border-block-end-color:var(--si-sys-border-4)}.si-map-popover-arrow:after{inset-block-start:1px;border-block-end-color:var(--si-sys-background-3)}.si-map-popover-content{padding-block:var(--si-sys-sizing-spacing-y-50);color:var(--si-sys-text-primary)}.si-map-popover .si-map-popover-item{display:flex;margin-block-end:var(--si-sys-sizing-spacing-y-50);flex-direction:column;gap:var(--si-sys-sizing-spacing-y-20) var(--si-sys-sizing-spacing-x-20)}.si-map-popover .si-map-popover-item-title{font-weight:bolder}\n"] }]
|
|
196
|
+
args: [{ selector: 'si-map-popover', imports: [SiMapPopoverTemplateDirective, SiMapPopoverClusterTemplateDirective], changeDetection: ChangeDetectionStrategy.Eager, template: "<div #popover class=\"si-map-popover\">\n <div class=\"si-map-popover-arrow\"></div>\n\n <div class=\"si-map-popover-content\">\n <div class=\"overflow-auto px-5\">\n <div #contentContainer></div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultContent let-mapPoint=\"mapPoint\" siMapPopoverTemplate>\n <div>{{ mapPoint?.name }}</div>\n <div [innerHTML]=\"mapPoint?.description\"></div>\n</ng-template>\n<ng-template #defaultCluster let-mapPoints=\"mapPoints\" siMapPopoverClusterTemplate>\n <div [style.max-block-size.px]=\"maxHeight()\">\n <div class=\"si-map-popover-list\">\n @for (point of mapPoints; track $index) {\n <div class=\"si-map-popover-item\">\n <div class=\"si-map-popover-item-title\">{{ point.name }}</div>\n <div class=\"si-map-popover-item-description\" [innerHTML]=\"point.description\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n", styles: [".si-map-popover{position:absolute;z-index:1070;display:block;min-inline-size:280px;word-wrap:break-word;background-color:var(--si-sys-color-background-3);background-clip:padding-box;border:1px solid var(--si-sys-color-border-4);border-radius:var(--element-radius-2);box-shadow:var(--si-sys-color-effects-shadow-3);margin-block-start:4px;inset-inline-start:calc(var(--si-sys-sizing-spacing-x-70) * -1)}.si-map-popover-arrow{position:absolute;display:block;inline-size:12px;block-size:6px;margin-block:0;margin-inline:calc(var(--si-sys-sizing-spacing-x-50) + 1px);inset-block-start:-7px}.si-map-popover-arrow:before,.si-map-popover-arrow:after{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid;border-inline-width:6px;border-block-width:0 6px}.si-map-popover-arrow:before{inset-block-start:0;border-block-end-color:var(--si-sys-color-border-4)}.si-map-popover-arrow:after{inset-block-start:1px;border-block-end-color:var(--si-sys-color-background-3)}.si-map-popover-content{padding-block:var(--si-sys-sizing-spacing-y-50);color:var(--si-sys-color-text-primary)}.si-map-popover .si-map-popover-item{display:flex;margin-block-end:var(--si-sys-sizing-spacing-y-50);flex-direction:column;gap:var(--si-sys-sizing-spacing-y-20) var(--si-sys-sizing-spacing-x-20)}.si-map-popover .si-map-popover-item-title{font-weight:bolder}\n"] }]
|
|
197
197
|
}], propDecorators: { elementRef: [{ type: i0.ViewChild, args: ['popover', { isSignal: true }] }], contentContainer: [{ type: i0.ViewChild, args: ['contentContainer', { ...{
|
|
198
198
|
read: ViewContainerRef
|
|
199
199
|
}, isSignal: true }] }], defaultContent: [{ type: i0.ViewChild, args: ['defaultContent', { ...{
|
|
@@ -215,31 +215,31 @@ const themeElement = {
|
|
|
215
215
|
style: () => {
|
|
216
216
|
const style = window.getComputedStyle(document.documentElement);
|
|
217
217
|
const status = {
|
|
218
|
-
info: getProp(style, '--si-sys-background-information'),
|
|
219
|
-
success: getProp(style, '--si-sys-background-success'),
|
|
220
|
-
warning: getProp(style, '--si-sys-background-warning'),
|
|
221
|
-
danger: getProp(style, '--si-sys-background-danger'),
|
|
222
|
-
caution: getProp(style, '--si-sys-background-caution'),
|
|
223
|
-
critical: getProp(style, '--si-sys-background-critical'),
|
|
224
|
-
default: getProp(style, '--si-sys-background-accent'),
|
|
225
|
-
unknown: getProp(style, '--si-sys-background-neutral')
|
|
218
|
+
info: getProp(style, '--si-sys-color-background-information'),
|
|
219
|
+
success: getProp(style, '--si-sys-color-background-success'),
|
|
220
|
+
warning: getProp(style, '--si-sys-color-background-warning'),
|
|
221
|
+
danger: getProp(style, '--si-sys-color-background-danger'),
|
|
222
|
+
caution: getProp(style, '--si-sys-color-background-caution'),
|
|
223
|
+
critical: getProp(style, '--si-sys-color-background-critical'),
|
|
224
|
+
default: getProp(style, '--si-sys-color-background-accent'),
|
|
225
|
+
unknown: getProp(style, '--si-sys-color-background-neutral')
|
|
226
226
|
};
|
|
227
227
|
return {
|
|
228
|
-
fillColor: getProp(style, '--si-sys-background-1'),
|
|
229
|
-
strokeColor: getProp(style, '--si-sys-background-1'),
|
|
230
|
-
textColor: getProp(style, '--si-sys-text-primary'),
|
|
231
|
-
defaultMarkerColor: getProp(style, '--si-sys-text-primary'),
|
|
228
|
+
fillColor: getProp(style, '--si-sys-color-background-1'),
|
|
229
|
+
strokeColor: getProp(style, '--si-sys-color-background-1'),
|
|
230
|
+
textColor: getProp(style, '--si-sys-color-text-primary'),
|
|
231
|
+
defaultMarkerColor: getProp(style, '--si-sys-color-text-primary'),
|
|
232
232
|
status,
|
|
233
233
|
colorPalette: {
|
|
234
234
|
status: [status.info, status.success, status.warning, status.danger],
|
|
235
235
|
element: [
|
|
236
|
-
getProp(style, '--si-sys-data-sequential-red-2'),
|
|
237
|
-
getProp(style, '--si-sys-data-sequential-orange-4'),
|
|
238
|
-
getProp(style, '--si-sys-background-caution'),
|
|
239
|
-
getProp(style, '--si-sys-data-sequential-green-2'),
|
|
240
|
-
getProp(style, '--si-sys-background-information'),
|
|
241
|
-
getProp(style, '--si-sys-data-categorical-1'),
|
|
242
|
-
getProp(style, '--si-sys-data-categorical-17')
|
|
236
|
+
getProp(style, '--si-sys-color-data-sequential-red-2'),
|
|
237
|
+
getProp(style, '--si-sys-color-data-sequential-orange-4'),
|
|
238
|
+
getProp(style, '--si-sys-color-background-caution'),
|
|
239
|
+
getProp(style, '--si-sys-color-data-sequential-green-2'),
|
|
240
|
+
getProp(style, '--si-sys-color-background-information'),
|
|
241
|
+
getProp(style, '--si-sys-color-data-categorical-1'),
|
|
242
|
+
getProp(style, '--si-sys-color-data-categorical-17')
|
|
243
243
|
]
|
|
244
244
|
}
|
|
245
245
|
};
|
|
@@ -1946,11 +1946,11 @@ class SiMapComponent {
|
|
|
1946
1946
|
this.selectedCluster = cluster;
|
|
1947
1947
|
}
|
|
1948
1948
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1949
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.8", type: SiMapComponent, isStandalone: true, selector: "si-map", inputs: { points: { classPropertyName: "points", publicName: "points", isSignal: true, isRequired: false, transformFunction: null }, geoJson: { classPropertyName: "geoJson", publicName: "geoJson", isSignal: true, isRequired: false, transformFunction: null }, styleFunction: { classPropertyName: "styleFunction", publicName: "styleFunction", isSignal: true, isRequired: false, transformFunction: null }, geoJsonProjection: { classPropertyName: "geoJsonProjection", publicName: "geoJsonProjection", isSignal: true, isRequired: false, transformFunction: null }, markerAnimation: { classPropertyName: "markerAnimation", publicName: "markerAnimation", isSignal: true, isRequired: false, transformFunction: null }, cluster: { classPropertyName: "cluster", publicName: "cluster", isSignal: true, isRequired: false, transformFunction: null }, groupColors: { classPropertyName: "groupColors", publicName: "groupColors", isSignal: true, isRequired: false, transformFunction: null }, nativeProperties: { classPropertyName: "nativeProperties", publicName: "nativeProperties", isSignal: true, isRequired: false, transformFunction: null }, styleJson: { classPropertyName: "styleJson", publicName: "styleJson", isSignal: true, isRequired: false, transformFunction: null }, displayTooltipOnHover: { classPropertyName: "displayTooltipOnHover", publicName: "displayTooltipOnHover", isSignal: true, isRequired: false, transformFunction: null }, displayPopoverOnClick: { classPropertyName: "displayPopoverOnClick", publicName: "displayPopoverOnClick", isSignal: true, isRequired: false, transformFunction: null }, displayPopoverOnHover: { classPropertyName: "displayPopoverOnHover", publicName: "displayPopoverOnHover", isSignal: true, isRequired: false, transformFunction: null }, maptilerKey: { classPropertyName: "maptilerKey", publicName: "maptilerKey", isSignal: true, isRequired: false, transformFunction: null }, displayTooltipOnClusterHover: { classPropertyName: "displayTooltipOnClusterHover", publicName: "displayTooltipOnClusterHover", isSignal: true, isRequired: false, transformFunction: null }, clusterDistance: { classPropertyName: "clusterDistance", publicName: "clusterDistance", isSignal: true, isRequired: false, transformFunction: null }, featureSelectZoom: { classPropertyName: "featureSelectZoom", publicName: "featureSelectZoom", isSignal: true, isRequired: false, transformFunction: null }, featureClickZoom: { classPropertyName: "featureClickZoom", publicName: "featureClickZoom", isSignal: true, isRequired: false, transformFunction: null }, clusterClickZoom: { classPropertyName: "clusterClickZoom", publicName: "clusterClickZoom", isSignal: true, isRequired: false, transformFunction: null }, globalZoom: { classPropertyName: "globalZoom", publicName: "globalZoom", isSignal: true, isRequired: false, transformFunction: null }, autoZoomFeatureClick: { classPropertyName: "autoZoomFeatureClick", publicName: "autoZoomFeatureClick", isSignal: true, isRequired: false, transformFunction: null }, autoZoomClusterClick: { classPropertyName: "autoZoomClusterClick", publicName: "autoZoomClusterClick", isSignal: true, isRequired: false, transformFunction: null }, popoverComponent: { classPropertyName: "popoverComponent", publicName: "popoverComponent", isSignal: true, isRequired: false, transformFunction: null }, clusterPopoverComponent: { classPropertyName: "clusterPopoverComponent", publicName: "clusterPopoverComponent", isSignal: true, isRequired: false, transformFunction: null }, popoverComponentProps: { classPropertyName: "popoverComponentProps", publicName: "popoverComponentProps", isSignal: true, isRequired: false, transformFunction: null }, popoverCloseOnClick: { classPropertyName: "popoverCloseOnClick", publicName: "popoverCloseOnClick", isSignal: true, isRequired: false, transformFunction: null }, fitClusterPadding: { classPropertyName: "fitClusterPadding", publicName: "fitClusterPadding", isSignal: true, isRequired: false, transformFunction: null }, fitPointPadding: { classPropertyName: "fitPointPadding", publicName: "fitPointPadding", isSignal: true, isRequired: false, transformFunction: null }, fitGeoJsonPadding: { classPropertyName: "fitGeoJsonPadding", publicName: "fitGeoJsonPadding", isSignal: true, isRequired: false, transformFunction: null }, multiWorld: { classPropertyName: "multiWorld", publicName: "multiWorld", isSignal: true, isRequired: false, transformFunction: null }, alwaysShowLabels: { classPropertyName: "alwaysShowLabels", publicName: "alwaysShowLabels", isSignal: true, isRequired: false, transformFunction: null }, maxLabelLineLength: { classPropertyName: "maxLabelLineLength", publicName: "maxLabelLineLength", isSignal: true, isRequired: false, transformFunction: null }, maxLabelLines: { classPropertyName: "maxLabelLines", publicName: "maxLabelLines", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { points: "pointsChange", pointsSelected: "pointsSelected", pointsRefreshed: "pointsRefreshed" }, host: { listeners: { "window:theme-switch": "onThemeSwitchInternal($event)" } }, providers: [MapService], queries: [{ propertyName: "projectedTooltip", first: true, predicate: SiMapTooltipComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "popover", first: true, predicate: SiMapPopoverComponent, descendants: true, isSignal: true }, { propertyName: "popoverElement", first: true, predicate: ["popover"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "defaultTooltip", first: true, predicate: SiMapTooltipComponent, descendants: true, isSignal: true }, { propertyName: "mapReference", first: true, predicate: ["map"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div #map class=\"map\"></div>\n<ng-content select=\"si-map-tooltip\">\n <si-map-tooltip />\n</ng-content>\n<si-map-popover #popover />\n", styles: [":host{display:block;inline-size:auto}.map{inline-size:100%;block-size:100%;z-index:-1}:host::ng-deep .ol-control{background-color:unset}:host::ng-deep .ol-control button{display:flex;align-items:center;justify-content:center;position:relative;background:var(--si-sys-background-3);color:var(--si-sys-text-accent);margin:0;line-height:1;border-radius:0;inline-size:calc(1rem + 2 * var(--si-sys-sizing-spacing-y-40));block-size:calc(1rem + 2 * var(--si-sys-sizing-spacing-y-40));font-size:var(--si-sys-sizing-icon-md);outline:none}:host::ng-deep .ol-control button:hover{color:var(--si-sys-text-accent-hover);background:var(--si-sys-background-accent-secondary-hover)}:host::ng-deep .ol-control button:focus-visible{outline:var(--element-button-focus-width) solid var(--si-sys-effects-focus);outline-offset:calc(-1 * var(--element-button-focus-width))}:host::ng-deep .ol-control button+button{margin-block-start:1px}:host::ng-deep .ol-attribution,:host::ng-deep .ol-full-screen,:host::ng-deep .ol-zoom,:host::ng-deep .ol-zoom-extent{left:unset;right:unset;top:unset;bottom:unset}:host::ng-deep .ol-zoom,:host::ng-deep .ol-zoom-extent{inset-inline-end:0;inset-block-end:0;padding-inline-end:var(--si-sys-sizing-spacing-x-40);padding-block-end:var(--si-sys-sizing-spacing-y-40)}:host::ng-deep .ol-zoom{padding-block-end:calc(var(--si-sys-sizing-spacing-y-40) + 1px + 1rem + 2 * var(--si-sys-sizing-spacing-y-40))}:host::ng-deep .ol-attribution{inset-inline-start:0;inset-block-end:0;padding:var(--si-sys-sizing-spacing-y-40) var(--si-sys-sizing-spacing-x-40)}:host::ng-deep .ol-attribution button{inline-size:1.5rem;block-size:1.5rem;font-size:1.5rem;border-radius:50%}:host::ng-deep .ol-full-screen{inset-block-end:calc(var(--si-sys-sizing-spacing-y-40) + 3px + 3 * (1rem + 2 * var(--si-sys-sizing-spacing-y-40)));inset-inline-end:var(--si-sys-sizing-spacing-x-40)}:host::ng-deep .ol-overlay-container{left:0}\n"], dependencies: [{ kind: "component", type: SiMapTooltipComponent, selector: "si-map-tooltip", inputs: ["moreText", "maxLabelLength"] }, { kind: "component", type: SiMapPopoverComponent, selector: "si-map-popover" }] });
|
|
1949
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.8", type: SiMapComponent, isStandalone: true, selector: "si-map", inputs: { points: { classPropertyName: "points", publicName: "points", isSignal: true, isRequired: false, transformFunction: null }, geoJson: { classPropertyName: "geoJson", publicName: "geoJson", isSignal: true, isRequired: false, transformFunction: null }, styleFunction: { classPropertyName: "styleFunction", publicName: "styleFunction", isSignal: true, isRequired: false, transformFunction: null }, geoJsonProjection: { classPropertyName: "geoJsonProjection", publicName: "geoJsonProjection", isSignal: true, isRequired: false, transformFunction: null }, markerAnimation: { classPropertyName: "markerAnimation", publicName: "markerAnimation", isSignal: true, isRequired: false, transformFunction: null }, cluster: { classPropertyName: "cluster", publicName: "cluster", isSignal: true, isRequired: false, transformFunction: null }, groupColors: { classPropertyName: "groupColors", publicName: "groupColors", isSignal: true, isRequired: false, transformFunction: null }, nativeProperties: { classPropertyName: "nativeProperties", publicName: "nativeProperties", isSignal: true, isRequired: false, transformFunction: null }, styleJson: { classPropertyName: "styleJson", publicName: "styleJson", isSignal: true, isRequired: false, transformFunction: null }, displayTooltipOnHover: { classPropertyName: "displayTooltipOnHover", publicName: "displayTooltipOnHover", isSignal: true, isRequired: false, transformFunction: null }, displayPopoverOnClick: { classPropertyName: "displayPopoverOnClick", publicName: "displayPopoverOnClick", isSignal: true, isRequired: false, transformFunction: null }, displayPopoverOnHover: { classPropertyName: "displayPopoverOnHover", publicName: "displayPopoverOnHover", isSignal: true, isRequired: false, transformFunction: null }, maptilerKey: { classPropertyName: "maptilerKey", publicName: "maptilerKey", isSignal: true, isRequired: false, transformFunction: null }, displayTooltipOnClusterHover: { classPropertyName: "displayTooltipOnClusterHover", publicName: "displayTooltipOnClusterHover", isSignal: true, isRequired: false, transformFunction: null }, clusterDistance: { classPropertyName: "clusterDistance", publicName: "clusterDistance", isSignal: true, isRequired: false, transformFunction: null }, featureSelectZoom: { classPropertyName: "featureSelectZoom", publicName: "featureSelectZoom", isSignal: true, isRequired: false, transformFunction: null }, featureClickZoom: { classPropertyName: "featureClickZoom", publicName: "featureClickZoom", isSignal: true, isRequired: false, transformFunction: null }, clusterClickZoom: { classPropertyName: "clusterClickZoom", publicName: "clusterClickZoom", isSignal: true, isRequired: false, transformFunction: null }, globalZoom: { classPropertyName: "globalZoom", publicName: "globalZoom", isSignal: true, isRequired: false, transformFunction: null }, autoZoomFeatureClick: { classPropertyName: "autoZoomFeatureClick", publicName: "autoZoomFeatureClick", isSignal: true, isRequired: false, transformFunction: null }, autoZoomClusterClick: { classPropertyName: "autoZoomClusterClick", publicName: "autoZoomClusterClick", isSignal: true, isRequired: false, transformFunction: null }, popoverComponent: { classPropertyName: "popoverComponent", publicName: "popoverComponent", isSignal: true, isRequired: false, transformFunction: null }, clusterPopoverComponent: { classPropertyName: "clusterPopoverComponent", publicName: "clusterPopoverComponent", isSignal: true, isRequired: false, transformFunction: null }, popoverComponentProps: { classPropertyName: "popoverComponentProps", publicName: "popoverComponentProps", isSignal: true, isRequired: false, transformFunction: null }, popoverCloseOnClick: { classPropertyName: "popoverCloseOnClick", publicName: "popoverCloseOnClick", isSignal: true, isRequired: false, transformFunction: null }, fitClusterPadding: { classPropertyName: "fitClusterPadding", publicName: "fitClusterPadding", isSignal: true, isRequired: false, transformFunction: null }, fitPointPadding: { classPropertyName: "fitPointPadding", publicName: "fitPointPadding", isSignal: true, isRequired: false, transformFunction: null }, fitGeoJsonPadding: { classPropertyName: "fitGeoJsonPadding", publicName: "fitGeoJsonPadding", isSignal: true, isRequired: false, transformFunction: null }, multiWorld: { classPropertyName: "multiWorld", publicName: "multiWorld", isSignal: true, isRequired: false, transformFunction: null }, alwaysShowLabels: { classPropertyName: "alwaysShowLabels", publicName: "alwaysShowLabels", isSignal: true, isRequired: false, transformFunction: null }, maxLabelLineLength: { classPropertyName: "maxLabelLineLength", publicName: "maxLabelLineLength", isSignal: true, isRequired: false, transformFunction: null }, maxLabelLines: { classPropertyName: "maxLabelLines", publicName: "maxLabelLines", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { points: "pointsChange", pointsSelected: "pointsSelected", pointsRefreshed: "pointsRefreshed" }, host: { listeners: { "window:theme-switch": "onThemeSwitchInternal($event)" } }, providers: [MapService], queries: [{ propertyName: "projectedTooltip", first: true, predicate: SiMapTooltipComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "popover", first: true, predicate: SiMapPopoverComponent, descendants: true, isSignal: true }, { propertyName: "popoverElement", first: true, predicate: ["popover"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "defaultTooltip", first: true, predicate: SiMapTooltipComponent, descendants: true, isSignal: true }, { propertyName: "mapReference", first: true, predicate: ["map"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div #map class=\"map\"></div>\n<ng-content select=\"si-map-tooltip\">\n <si-map-tooltip />\n</ng-content>\n<si-map-popover #popover />\n", styles: [":host{display:block;inline-size:auto}.map{inline-size:100%;block-size:100%;z-index:-1}:host::ng-deep .ol-control{background-color:unset}:host::ng-deep .ol-control button{display:flex;align-items:center;justify-content:center;position:relative;background:var(--si-sys-color-background-3);color:var(--si-sys-color-text-accent);margin:0;line-height:1;border-radius:0;inline-size:calc(1rem + 2 * var(--si-sys-sizing-spacing-y-40));block-size:calc(1rem + 2 * var(--si-sys-sizing-spacing-y-40));font-size:var(--si-sys-sizing-icon-md);outline:none}:host::ng-deep .ol-control button:hover{color:var(--si-sys-color-text-accent-hover);background:var(--si-sys-color-background-accent-secondary-hover)}:host::ng-deep .ol-control button:focus-visible{outline:var(--element-button-focus-width) solid var(--si-sys-color-effects-focus);outline-offset:calc(-1 * var(--element-button-focus-width))}:host::ng-deep .ol-control button+button{margin-block-start:1px}:host::ng-deep .ol-attribution,:host::ng-deep .ol-full-screen,:host::ng-deep .ol-zoom,:host::ng-deep .ol-zoom-extent{left:unset;right:unset;top:unset;bottom:unset}:host::ng-deep .ol-zoom,:host::ng-deep .ol-zoom-extent{inset-inline-end:0;inset-block-end:0;padding-inline-end:var(--si-sys-sizing-spacing-x-40);padding-block-end:var(--si-sys-sizing-spacing-y-40)}:host::ng-deep .ol-zoom{padding-block-end:calc(var(--si-sys-sizing-spacing-y-40) + 1px + 1rem + 2 * var(--si-sys-sizing-spacing-y-40))}:host::ng-deep .ol-attribution{inset-inline-start:0;inset-block-end:0;padding:var(--si-sys-sizing-spacing-y-40) var(--si-sys-sizing-spacing-x-40)}:host::ng-deep .ol-attribution button{inline-size:1.5rem;block-size:1.5rem;font-size:1.5rem;border-radius:50%}:host::ng-deep .ol-full-screen{inset-block-end:calc(var(--si-sys-sizing-spacing-y-40) + 3px + 3 * (1rem + 2 * var(--si-sys-sizing-spacing-y-40)));inset-inline-end:var(--si-sys-sizing-spacing-x-40)}:host::ng-deep .ol-overlay-container{left:0}\n"], dependencies: [{ kind: "component", type: SiMapTooltipComponent, selector: "si-map-tooltip", inputs: ["moreText", "maxLabelLength"] }, { kind: "component", type: SiMapPopoverComponent, selector: "si-map-popover" }] });
|
|
1950
1950
|
}
|
|
1951
1951
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiMapComponent, decorators: [{
|
|
1952
1952
|
type: Component,
|
|
1953
|
-
args: [{ selector: 'si-map', imports: [SiMapTooltipComponent, SiMapPopoverComponent], providers: [MapService], template: "<div #map class=\"map\"></div>\n<ng-content select=\"si-map-tooltip\">\n <si-map-tooltip />\n</ng-content>\n<si-map-popover #popover />\n", styles: [":host{display:block;inline-size:auto}.map{inline-size:100%;block-size:100%;z-index:-1}:host::ng-deep .ol-control{background-color:unset}:host::ng-deep .ol-control button{display:flex;align-items:center;justify-content:center;position:relative;background:var(--si-sys-background-3);color:var(--si-sys-text-accent);margin:0;line-height:1;border-radius:0;inline-size:calc(1rem + 2 * var(--si-sys-sizing-spacing-y-40));block-size:calc(1rem + 2 * var(--si-sys-sizing-spacing-y-40));font-size:var(--si-sys-sizing-icon-md);outline:none}:host::ng-deep .ol-control button:hover{color:var(--si-sys-text-accent-hover);background:var(--si-sys-background-accent-secondary-hover)}:host::ng-deep .ol-control button:focus-visible{outline:var(--element-button-focus-width) solid var(--si-sys-effects-focus);outline-offset:calc(-1 * var(--element-button-focus-width))}:host::ng-deep .ol-control button+button{margin-block-start:1px}:host::ng-deep .ol-attribution,:host::ng-deep .ol-full-screen,:host::ng-deep .ol-zoom,:host::ng-deep .ol-zoom-extent{left:unset;right:unset;top:unset;bottom:unset}:host::ng-deep .ol-zoom,:host::ng-deep .ol-zoom-extent{inset-inline-end:0;inset-block-end:0;padding-inline-end:var(--si-sys-sizing-spacing-x-40);padding-block-end:var(--si-sys-sizing-spacing-y-40)}:host::ng-deep .ol-zoom{padding-block-end:calc(var(--si-sys-sizing-spacing-y-40) + 1px + 1rem + 2 * var(--si-sys-sizing-spacing-y-40))}:host::ng-deep .ol-attribution{inset-inline-start:0;inset-block-end:0;padding:var(--si-sys-sizing-spacing-y-40) var(--si-sys-sizing-spacing-x-40)}:host::ng-deep .ol-attribution button{inline-size:1.5rem;block-size:1.5rem;font-size:1.5rem;border-radius:50%}:host::ng-deep .ol-full-screen{inset-block-end:calc(var(--si-sys-sizing-spacing-y-40) + 3px + 3 * (1rem + 2 * var(--si-sys-sizing-spacing-y-40)));inset-inline-end:var(--si-sys-sizing-spacing-x-40)}:host::ng-deep .ol-overlay-container{left:0}\n"] }]
|
|
1953
|
+
args: [{ selector: 'si-map', imports: [SiMapTooltipComponent, SiMapPopoverComponent], providers: [MapService], template: "<div #map class=\"map\"></div>\n<ng-content select=\"si-map-tooltip\">\n <si-map-tooltip />\n</ng-content>\n<si-map-popover #popover />\n", styles: [":host{display:block;inline-size:auto}.map{inline-size:100%;block-size:100%;z-index:-1}:host::ng-deep .ol-control{background-color:unset}:host::ng-deep .ol-control button{display:flex;align-items:center;justify-content:center;position:relative;background:var(--si-sys-color-background-3);color:var(--si-sys-color-text-accent);margin:0;line-height:1;border-radius:0;inline-size:calc(1rem + 2 * var(--si-sys-sizing-spacing-y-40));block-size:calc(1rem + 2 * var(--si-sys-sizing-spacing-y-40));font-size:var(--si-sys-sizing-icon-md);outline:none}:host::ng-deep .ol-control button:hover{color:var(--si-sys-color-text-accent-hover);background:var(--si-sys-color-background-accent-secondary-hover)}:host::ng-deep .ol-control button:focus-visible{outline:var(--element-button-focus-width) solid var(--si-sys-color-effects-focus);outline-offset:calc(-1 * var(--element-button-focus-width))}:host::ng-deep .ol-control button+button{margin-block-start:1px}:host::ng-deep .ol-attribution,:host::ng-deep .ol-full-screen,:host::ng-deep .ol-zoom,:host::ng-deep .ol-zoom-extent{left:unset;right:unset;top:unset;bottom:unset}:host::ng-deep .ol-zoom,:host::ng-deep .ol-zoom-extent{inset-inline-end:0;inset-block-end:0;padding-inline-end:var(--si-sys-sizing-spacing-x-40);padding-block-end:var(--si-sys-sizing-spacing-y-40)}:host::ng-deep .ol-zoom{padding-block-end:calc(var(--si-sys-sizing-spacing-y-40) + 1px + 1rem + 2 * var(--si-sys-sizing-spacing-y-40))}:host::ng-deep .ol-attribution{inset-inline-start:0;inset-block-end:0;padding:var(--si-sys-sizing-spacing-y-40) var(--si-sys-sizing-spacing-x-40)}:host::ng-deep .ol-attribution button{inline-size:1.5rem;block-size:1.5rem;font-size:1.5rem;border-radius:50%}:host::ng-deep .ol-full-screen{inset-block-end:calc(var(--si-sys-sizing-spacing-y-40) + 3px + 3 * (1rem + 2 * var(--si-sys-sizing-spacing-y-40)));inset-inline-end:var(--si-sys-sizing-spacing-x-40)}:host::ng-deep .ol-overlay-container{left:0}\n"] }]
|
|
1954
1954
|
}], ctorParameters: () => [], propDecorators: { points: [{ type: i0.Input, args: [{ isSignal: true, alias: "points", required: false }] }, { type: i0.Output, args: ["pointsChange"] }], geoJson: [{ type: i0.Input, args: [{ isSignal: true, alias: "geoJson", required: false }] }], styleFunction: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleFunction", required: false }] }], geoJsonProjection: [{ type: i0.Input, args: [{ isSignal: true, alias: "geoJsonProjection", required: false }] }], markerAnimation: [{ type: i0.Input, args: [{ isSignal: true, alias: "markerAnimation", required: false }] }], cluster: [{ type: i0.Input, args: [{ isSignal: true, alias: "cluster", required: false }] }], groupColors: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupColors", required: false }] }], nativeProperties: [{ type: i0.Input, args: [{ isSignal: true, alias: "nativeProperties", required: false }] }], styleJson: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleJson", required: false }] }], displayTooltipOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayTooltipOnHover", required: false }] }], displayPopoverOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayPopoverOnClick", required: false }] }], displayPopoverOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayPopoverOnHover", required: false }] }], maptilerKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "maptilerKey", required: false }] }], displayTooltipOnClusterHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayTooltipOnClusterHover", required: false }] }], clusterDistance: [{ type: i0.Input, args: [{ isSignal: true, alias: "clusterDistance", required: false }] }], featureSelectZoom: [{ type: i0.Input, args: [{ isSignal: true, alias: "featureSelectZoom", required: false }] }], featureClickZoom: [{ type: i0.Input, args: [{ isSignal: true, alias: "featureClickZoom", required: false }] }], clusterClickZoom: [{ type: i0.Input, args: [{ isSignal: true, alias: "clusterClickZoom", required: false }] }], globalZoom: [{ type: i0.Input, args: [{ isSignal: true, alias: "globalZoom", required: false }] }], autoZoomFeatureClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoZoomFeatureClick", required: false }] }], autoZoomClusterClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoZoomClusterClick", required: false }] }], popoverComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverComponent", required: false }] }], clusterPopoverComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "clusterPopoverComponent", required: false }] }], popoverComponentProps: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverComponentProps", required: false }] }], popoverCloseOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverCloseOnClick", required: false }] }], fitClusterPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitClusterPadding", required: false }] }], fitPointPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitPointPadding", required: false }] }], fitGeoJsonPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitGeoJsonPadding", required: false }] }], multiWorld: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiWorld", required: false }] }], alwaysShowLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "alwaysShowLabels", required: false }] }], maxLabelLineLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLabelLineLength", required: false }] }], maxLabelLines: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLabelLines", required: false }] }], pointsSelected: [{ type: i0.Output, args: ["pointsSelected"] }], pointsRefreshed: [{ type: i0.Output, args: ["pointsRefreshed"] }], popover: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SiMapPopoverComponent), { isSignal: true }] }], popoverElement: [{ type: i0.ViewChild, args: ['popover', { ...{
|
|
1955
1955
|
read: ElementRef
|
|
1956
1956
|
}, isSignal: true }] }], defaultTooltip: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SiMapTooltipComponent), { isSignal: true }] }], projectedTooltip: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SiMapTooltipComponent), { isSignal: true }] }], mapReference: [{ type: i0.ViewChild, args: ['map', { isSignal: true }] }], onThemeSwitchInternal: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-maps-ng.mjs","sources":["../../../../projects/maps-ng/src/components/si-map/models/constants.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-tooltip/si-map-tooltip.component.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-tooltip/si-map-tooltip.component.html","../../../../projects/maps-ng/src/components/si-map/components/si-map-popover/si-map-popover-cluster-template.directive.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-popover/si-map-popover-template.directive.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-popover/si-map-popover.component.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-popover/si-map-popover.component.html","../../../../projects/maps-ng/src/components/si-map/components/index.ts","../../../../projects/maps-ng/src/components/si-map/shared/themes/element.ts","../../../../projects/maps-ng/src/components/si-map/models/grouping.model.ts","../../../../projects/maps-ng/src/components/si-map/models/index.ts","../../../../projects/maps-ng/src/components/si-map/shared/themes/marker.ts","../../../../projects/maps-ng/src/components/si-map/services/map.service.ts","../../../../projects/maps-ng/src/components/si-map/services/SelectCluster.ts","../../../../projects/maps-ng/src/components/si-map/si-map.component.ts","../../../../projects/maps-ng/src/components/si-map/si-map.component.html","../../../../projects/maps-ng/src/components/si-map/si-map.module.ts","../../../../projects/maps-ng/src/components/si-map/index.ts","../../../../projects/maps-ng/src/public-api.module.ts","../../../../projects/maps-ng/src/public-api.ts","../../../../projects/maps-ng/src/siemens-maps-ng.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n/** */\nexport const DEFAULT_STROKE_WEIGHT = 2;\nexport const DEFAULT_CLUSTER_TYPE = 'donut';\nexport const DEFAULT_DONUT_RATIO = 0.6;\nexport const ANIMATION_DURATION = 500;\nexport const DEFAULT_ICON = 'assets/default-marker-icon.svg';\nexport const DEFAULT_ICON_SCALE = 1;\nexport const SIEMENS_FONT = 'bold 13px \"SiemensSans Pro\", sans-serif';\nexport const SIEMENS_FONT_LABELS = '600 14px \"SiemensSans Pro\", sans-serif';\nexport const DEFAULT_OFFSET = 14;\nexport const DEFAULT_FEATURE_SELECT_ZOOM = 10;\nexport const DEFAULT_FEATURE_CLICK_ZOOM = 15;\nexport const DEFAULT_CLUSTER_CLICK_ZOOM = 15;\nexport const DEFAULT_GLOBAL_ZOOM = 5;\nexport const DEFAULT_CLUSTER_DISTANCE = 40;\n\n/** Updates the amount of buildings to be shown in a cluster tooltip after hovering over it */\nexport const TOOLTIP_FEATURES_TO_DISPLAY = 4;\n/** Specifies the maximum amount of buildings allowed to be displayed as a number in a cluster */\nexport const MAX_CLUSTER_BUILDINGS = 99;\n/** Defines the cluster radius size, so all the clusters are of the same size */\nexport const CLUSTER_RADIUS_SIZE = 20;\n/** Chart inside the cluster is internally divided into 20 fragments */\nexport const CLUSTER_CHARTS_FRAGMENTS = 20;\nexport const GEOJSON_LAYER = 'geojson-layer';\nexport const POINTS_LAYER = 'points-layer';\nexport const LAYER_NAME = 'layerName';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { TOOLTIP_FEATURES_TO_DISPLAY } from '../../models/constants';\n\n@Component({\n selector: 'si-map-tooltip',\n imports: [SiTranslatePipe],\n templateUrl: './si-map-tooltip.component.html',\n styleUrl: './si-map-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class SiMapTooltipComponent {\n /**\n * Cutoff text for tooltips, when cluster combines more than 4 features\n *\n * @defaultValue\n * ```\n * t(() =>$localize`:@@SI_MAPS.TOOLTIP_MORE_TEXT:+ {{length}} locations`)\n * ```\n */\n readonly moreText = input(\n t(() => $localize`:@@SI_MAPS.TOOLTIP_MORE_TEXT:+ {{length}} locations`)\n );\n\n /**\n * Adds the maximum length of a string thats allowed in a tooltip and if its longer it cuts off the rest and adds 3 dots at the end.\n * If set to -1, it will not cut off the string.\n * @defaultValue 50\n */\n readonly maxLabelLength = input(50);\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n protected readonly hiddenEntries = signal(0);\n protected readonly tooltipLabels = signal<string[]>([]);\n private readonly elementRef = inject(ElementRef);\n\n /**\n * Method sets tooltip content. If parameter is of type\n * string, it will directly set it as tooltip content.\n * If it is array of string, it will render it as list of those strings.\n *\n * @param labels - array of strings or string itself\n */\n setTooltip(labels: string[] | string): void {\n const labelList = typeof labels === 'string' ? [labels] : labels.length > 1 ? labels : [];\n this.tooltipLabels.set(\n labelList.slice(0, TOOLTIP_FEATURES_TO_DISPLAY).map(label => this.getLabelText(label))\n );\n this.hiddenEntries.set(Math.max(labelList.length - TOOLTIP_FEATURES_TO_DISPLAY, 0));\n }\n\n private getLabelText(label: string): string {\n if (this.maxLabelLength() != -1 && label.length > this.maxLabelLength()) {\n return `${label.substring(0, this.maxLabelLength())}…`;\n }\n\n return label;\n }\n}\n","<div class=\"si-map-tooltip\">\n @for (label of tooltipLabels(); track $index) {\n <div>{{ label }}</div>\n }\n @if (hiddenEntries()) {\n <div>{{ moreText() | translate: { length: hiddenEntries() } }}</div>\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { MapPointMetaData } from '../../models';\n\n@Directive({\n selector: `[siMapPopoverClusterTemplate]`\n})\nexport class SiMapPopoverClusterTemplateDirective {\n static ngTemplateContextGuard(\n directive: SiMapPopoverClusterTemplateDirective,\n context: unknown\n ): context is { mapPoints: MapPointMetaData[] } {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { MapPointMetaData } from '../../models';\n\n@Directive({\n selector: `[siMapPopoverTemplate]`\n})\nexport class SiMapPopoverTemplateDirective {\n static ngTemplateContextGuard(\n directive: SiMapPopoverTemplateDirective,\n context: unknown\n ): context is { mapPoint: MapPointMetaData } {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n signal,\n TemplateRef,\n Type,\n viewChild,\n ViewContainerRef\n} from '@angular/core';\nimport Map from 'ol/Map';\n\nimport { MapPointMetaData } from '../../models/map-point.interface';\nimport { SiMapPopoverClusterTemplateDirective } from './si-map-popover-cluster-template.directive';\nimport { SiMapPopoverTemplateDirective } from './si-map-popover-template.directive';\nexport interface RenderOptions {\n component?: Type<any>;\n mapPoints: MapPointMetaData | MapPointMetaData[];\n map?: Map;\n}\n\n@Component({\n selector: 'si-map-popover',\n imports: [SiMapPopoverTemplateDirective, SiMapPopoverClusterTemplateDirective],\n templateUrl: './si-map-popover.component.html',\n styleUrl: './si-map-popover.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class SiMapPopoverComponent {\n private readonly elementRef = viewChild.required<ElementRef>('popover');\n protected readonly maxHeight = signal<number | null>(null);\n\n protected readonly contentContainer = viewChild.required<ElementRef, ViewContainerRef>(\n 'contentContainer',\n {\n read: ViewContainerRef\n }\n );\n\n protected readonly defaultContent = viewChild.required<ElementRef, TemplateRef<any>>(\n 'defaultContent',\n {\n read: TemplateRef\n }\n );\n\n protected readonly defaultCluster = viewChild.required<ElementRef, TemplateRef<any>>(\n 'defaultCluster',\n {\n read: TemplateRef\n }\n );\n\n public render({ component, mapPoints, map }: RenderOptions): void {\n this.contentContainer().clear();\n\n if (component) {\n this.renderCustomComponent(component, mapPoints);\n } else {\n this.renderDefault(mapPoints);\n }\n\n if (map) {\n const mapHeight = map.getTargetElement().getBoundingClientRect().height;\n const contentY = this.elementRef().nativeElement.getBoundingClientRect().top;\n const maxheight = mapHeight - contentY - 20;\n this.maxHeight.set(maxheight);\n }\n }\n\n private renderCustomComponent(\n component: Type<any>,\n mapPoints: MapPointMetaData | MapPointMetaData[]\n ): void {\n const componentRef = this.contentContainer().createComponent(component);\n\n // Assign map point meta data to component instance input\n componentRef.setInput(Array.isArray(mapPoints) ? 'mapPoints' : 'mapPoint', mapPoints);\n componentRef.changeDetectorRef.detectChanges();\n }\n\n private renderDefault(mapPoints: MapPointMetaData | MapPointMetaData[]): void {\n // Create an embedded view with the default content template\n const context = Array.isArray(mapPoints) ? { mapPoints } : { mapPoint: mapPoints };\n const template = Array.isArray(mapPoints) ? this.defaultCluster() : this.defaultContent();\n this.contentContainer().createEmbeddedView(template, context).detectChanges();\n }\n}\n","<div #popover class=\"si-map-popover\">\n <div class=\"si-map-popover-arrow\"></div>\n\n <div class=\"si-map-popover-content\">\n <div class=\"overflow-auto px-5\">\n <div #contentContainer></div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultContent let-mapPoint=\"mapPoint\" siMapPopoverTemplate>\n <div>{{ mapPoint?.name }}</div>\n <div [innerHTML]=\"mapPoint?.description\"></div>\n</ng-template>\n<ng-template #defaultCluster let-mapPoints=\"mapPoints\" siMapPopoverClusterTemplate>\n <div [style.max-block-size.px]=\"maxHeight()\">\n <div class=\"si-map-popover-list\">\n @for (point of mapPoints; track $index) {\n <div class=\"si-map-popover-item\">\n <div class=\"si-map-popover-item-title\">{{ point.name }}</div>\n <div class=\"si-map-popover-item-description\" [innerHTML]=\"point.description\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-map-tooltip/si-map-tooltip.component';\nexport * from './si-map-popover/si-map-popover.component';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ColorPalettes } from '../../models/color-palette.type';\nimport { MarkerStatusType } from '../../models/map-point.interface';\n\nconst getProp = (style: CSSStyleDeclaration, prop: string): string => {\n const val = style.getPropertyValue(prop).replace(/\\s/g, ''); // trim all whitespaces\n return val ? val : '';\n};\n\nexport const themeElement = {\n style: () => {\n const style = window.getComputedStyle(document.documentElement);\n const status: Record<MarkerStatusType, string> = {\n info: getProp(style, '--si-sys-background-information'),\n success: getProp(style, '--si-sys-background-success'),\n warning: getProp(style, '--si-sys-background-warning'),\n danger: getProp(style, '--si-sys-background-danger'),\n caution: getProp(style, '--si-sys-background-caution'),\n critical: getProp(style, '--si-sys-background-critical'),\n default: getProp(style, '--si-sys-background-accent'),\n unknown: getProp(style, '--si-sys-background-neutral')\n };\n\n return {\n fillColor: getProp(style, '--si-sys-background-1'),\n strokeColor: getProp(style, '--si-sys-background-1'),\n textColor: getProp(style, '--si-sys-text-primary'),\n defaultMarkerColor: getProp(style, '--si-sys-text-primary'),\n status,\n colorPalette: {\n status: [status.info, status.success, status.warning, status.danger],\n element: [\n getProp(style, '--si-sys-data-sequential-red-2'),\n getProp(style, '--si-sys-data-sequential-orange-4'),\n getProp(style, '--si-sys-background-caution'),\n getProp(style, '--si-sys-data-sequential-green-2'),\n getProp(style, '--si-sys-background-information'),\n getProp(style, '--si-sys-data-categorical-1'),\n getProp(style, '--si-sys-data-categorical-17')\n ]\n } as ColorPalettes\n };\n }\n};\n\nexport type ThemeType = ReturnType<typeof themeElement.style>;\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { themeElement } from '../shared/themes/element';\nimport { ColorPalette } from './color-palette.type';\n\n/**\n * Class for grouping functionality\n */\nexport class Grouping {\n private readonly _colors: string[];\n private readonly _palette?: ColorPalette;\n\n constructor(groupColors: Record<number, string> | ColorPalette = 'status') {\n this._colors = [];\n\n if (typeof groupColors === 'string') {\n const colorPalette = groupColors;\n this._colors = [colorPalette];\n\n if (colorPalette === 'element') {\n this._palette = colorPalette as ColorPalette;\n this._colors = themeElement.style().colorPalette.element;\n } else {\n this._palette = 'status';\n this._colors = themeElement.style().colorPalette.status;\n }\n } else {\n Object.keys(groupColors).forEach((key: string) => {\n const numKey = Number(key);\n if (numKey <= 0) {\n throw new Error('Key is out of range: keys should start from 1 and do not repeat');\n }\n this._colors[Number(key) - 1] = groupColors[numKey];\n });\n }\n }\n\n get colors(): string[] {\n return Object.values(this._colors);\n }\n\n get palette(): string | undefined {\n return this._palette;\n }\n\n get length(): number {\n return this._colors.length;\n }\n\n getColor(groupId: number): string {\n // Group has higher index than available colors,\n // cycle trough them.\n if (groupId > this._colors.length) {\n const index = groupId % this._colors.length;\n return this._colors[index];\n } else {\n return this._colors[groupId - 1];\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './constants';\nexport * from './color-palette.type';\nexport * from './grouping.model';\nexport * from './overlay-native-properties.interface';\nexport * from './map-point.interface';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { MarkerStatusType } from '../../models/map-point.interface';\nimport { ThemeType } from './element';\n\nconst markers: Record<MarkerStatusType, string> = {\n default: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <path class=\"middle\"\n d=\"m255.99,277.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n`,\n success: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Zm0,213.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"middle\"\n d=\"m255.99,277.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"symbol\"\n d=\"m241.55,225.45c-2.47,0-4.93-.94-6.82-2.82l-24.09-24.09c-3.77-3.77-3.77-9.86,0-13.63,3.77-3.77,9.87-3.77,13.63,0l17.28,17.28,46.19-46.19c3.77-3.77,9.87-3.77,13.63,0,3.77,3.77,3.77,9.86,0,13.63l-53.01,53.01c-1.88,1.88-4.35,2.82-6.82,2.82h.02Z\" />\n `,\n info: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <rect class=\"middle\"\n x=\"177.74\" y=\"110.96\" width=\"156.52\" height=\"156.52\" rx=\"11.74\" ry=\"11.74\" />\n <path class=\"symbol\"\n d=\"m255.91,134.43h.18c7.02,0,12.72,5.73,12.72,12.81s-5.69,12.81-12.72,12.81h-.18c-7.02,0-12.72-5.73-12.72-12.81s5.69-12.81,12.72-12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,179.94c5.31,0,9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61s-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61Z\" />\n `,\n warning: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <path class=\"middle\"\n d=\"m243.78,104.22l-76.92,134.35c-5.38,9.39,1.4,21.09,12.22,21.09h153.85c10.82,0,17.6-11.7,12.22-21.09l-76.92-134.35c-5.41-9.45-19.04-9.45-24.45,0Z\" />\n <path class=\"symbol\"\n d=\"m256.09,244.09h-.18c-7.02,0-12.72-5.73-12.72-12.81s5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81s-5.69,12.81-12.72,12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,198.59c-5.31,0-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61s9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61Z\" />\n `,\n danger: `\n <path class=\"icon\"\n d=\"m256,64c-69.05,0-125.21,56.17-125.21,125.21,0,1.43.04,2.94.12,4.6.46,12.81,2.85,25.34,7.07,37.27,24.64,80.64,105.26,184.13,108.68,188.43,2.27,2.85,5.7,4.5,9.35,4.5s7.08-1.66,9.35-4.5c3.42-4.3,84.05-107.77,108.69-188.43,4.23-11.93,6.61-24.46,7.07-37.24.08-1.5.12-3.06.12-4.62,0-69.05-56.18-125.21-125.22-125.21h0Z\" />\n <path class=\"middle\"\n d=\"m255.99,277.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"symbol\"\n d=\"m256.09,244.09h-.18c-7.02,0-12.72-5.73-12.72-12.81s5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81s-5.69,12.81-12.72,12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,198.59c-5.31,0-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61s9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61Z\" />\n `,\n caution: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <rect class=\"middle\"\n x=\"190.26\" y=\"123.48\" width=\"131.47\" height=\"131.47\" rx=\"11.74\" ry=\"11.74\"\n transform=\"translate(208.78 -125.6) rotate(45)\" />\n <path class=\"symbol\"\n d=\"m256.09,244h-.18c-7.02,0-12.72-5.73-12.72-12.81,0-7.08,5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81,0,7.08-5.69,12.81-12.72,12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,198.5c-5.31,0-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61,5.31,0,9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61Z\" />\n `,\n critical: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <path class=\"middle\"\n d=\"m285.78,105.57h-59.57c-3.11,0-6.1,1.24-8.3,3.44l-42.12,42.12c-2.2,2.2-3.44,5.19-3.44,8.3v59.57c0,3.11,1.24,6.1,3.44,8.3l42.12,42.12c2.2,2.2,5.19,3.44,8.3,3.44h59.57c3.11,0,6.1-1.24,8.3-3.44l42.12-42.12c2.2-2.2,3.44-5.19,3.44-8.3v-59.57c0-3.11-1.24-6.1-3.44-8.3l-42.12-42.12c-2.2-2.2-5.19-3.44-8.3-3.44Z\" />\n <path class=\"symbol\"\n d=\"m256.09,244h-.18c-7.02,0-12.72-5.73-12.72-12.81,0-7.08,5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81,0,7.08-5.69,12.81-12.72,12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,198.5c-5.31,0-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61,5.31,0,9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61Z\" />\n `,\n unknown: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Zm0,213.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"middle\"\n d=\"m255.99,277.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"symbol\"\n d=\"m256.04,207.64h0c-5.25,0-9.5-4.25-9.5-9.5v-9.95c0-3.59,1.8-7,4.87-8.86.59-.36,1.07-.56,1.58-.73,5.75-1.99,17.59-8.4,17.59-15.59,0-6.46-4.07-12.24-10.16-14.38-7.91-2.78-16.6,1.39-19.38,9.29-1.74,4.95-7.16,7.55-12.11,5.81-4.95-1.74-7.55-7.17-5.81-12.11,6.26-17.79,25.82-27.17,43.61-20.91,13.69,4.82,22.87,17.8,22.85,32.31,0,16.73-14.98,26.5-24.04,30.88v4.23c0,5.25-4.25,9.5-9.5,9.5h0Z\" />\n <path class=\"symbol\"\n d=\"m256.09,247h-.18c-7.02,0-12.72-5.73-12.72-12.81,0-7.08,5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81,0,7.08-5.69,12.81-12.72,12.81Z\" />\n `\n};\n\nexport const getMarker = (status: MarkerStatusType, theme: ThemeType): string => {\n return `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" width=\"64\" height=\"64\">\n <defs>\n <style>\n .middle{fill:${theme.fillColor};}\n .symbol{fill:${theme.textColor};}\n .icon{fill:${theme.status[status]};}\n </style>\n </defs>\n ${markers[status]}\n</svg>\n`;\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n/// <reference types=\"./ol-ext.d.ts\" />\nimport { Injectable } from '@angular/core';\nimport AnimatedCluster from 'ol-ext/layer/AnimatedCluster';\nimport Chart from 'ol-ext/style/Chart';\nimport Feature from 'ol/Feature';\nimport Point from 'ol/geom/Point';\nimport Layer from 'ol/layer/Layer';\nimport VectorLayer from 'ol/layer/Vector';\nimport { fromLonLat } from 'ol/proj';\nimport Cluster from 'ol/source/Cluster';\nimport VectorSource from 'ol/source/Vector';\nimport { Circle, Fill, Icon, Stroke, Style, Text } from 'ol/style';\nimport { Options as IconOptions } from 'ol/style/Icon';\nimport ImageStyle from 'ol/style/Image';\n\nimport { ColorPalette } from '../models/color-palette.type';\nimport {\n ANIMATION_DURATION,\n CLUSTER_CHARTS_FRAGMENTS,\n CLUSTER_RADIUS_SIZE,\n DEFAULT_CLUSTER_TYPE,\n DEFAULT_DONUT_RATIO,\n DEFAULT_ICON,\n DEFAULT_ICON_SCALE,\n DEFAULT_OFFSET,\n DEFAULT_STROKE_WEIGHT,\n MAX_CLUSTER_BUILDINGS,\n SIEMENS_FONT,\n SIEMENS_FONT_LABELS\n} from '../models/constants';\nimport { Grouping } from '../models/grouping.model';\nimport {\n IconMarkerOptions,\n LabelOptions,\n MapPoint,\n MarkerOptions\n} from '../models/map-point.interface';\nimport { themeElement, ThemeType } from '../shared/themes/element';\nimport { getMarker } from '../shared/themes/marker';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MapService {\n private styleCache: Record<string, Style[]> = {};\n private clusterStyleCache: Record<string, Style[]> = {};\n private labelStyleCache: Record<string, Style[]> = {};\n private grouping?: Grouping;\n\n private _theme?: ThemeType;\n\n private wrappedTextCache: Record<string, string> = {};\n private labelTextStyleCache: Record<string, Text[]> = {};\n\n resetCaches(): void {\n this.styleCache = {};\n this.clusterStyleCache = {};\n this.labelStyleCache = {};\n this.wrappedTextCache = {};\n this.labelTextStyleCache = {};\n }\n\n private wrapLabelText(labelText: string, maxLength: number, maxLines: number): string {\n const cacheKey = `${labelText}_${maxLength}_${maxLines}`;\n if (this.wrappedTextCache[cacheKey]) {\n return this.wrappedTextCache[cacheKey];\n }\n\n let wrappedText = '';\n let currentLine = '';\n let lineCount = 0;\n const words = labelText.split(/[ \\n]/g);\n if (maxLength > 0) {\n for (const word of words) {\n const strippedWord =\n word.length > maxLength ? word.substring(0, maxLength - 3) + '...' : word;\n if ((currentLine.length || -1) + 1 + strippedWord.length > maxLength) {\n if (lineCount + 1 >= maxLines) {\n const wrappedLine = currentLine.endsWith('...')\n ? currentLine\n : (currentLine.length > maxLength\n ? currentLine.substring(0, maxLength - 3)\n : currentLine) + '...';\n wrappedText += (wrappedText ? '\\n' : '') + wrappedLine;\n return (this.wrappedTextCache[cacheKey] = wrappedText);\n } else {\n wrappedText += (wrappedText ? '\\n' : '') + currentLine;\n }\n currentLine = '';\n lineCount++;\n }\n currentLine += (currentLine ? ' ' : '') + strippedWord;\n }\n if (currentLine) {\n wrappedText += (wrappedText ? '\\n' : '') + currentLine;\n }\n } else {\n wrappedText = labelText;\n }\n\n return (this.wrappedTextCache[cacheKey] = wrappedText);\n }\n\n private getLabelTextStyle(\n text: string = '',\n maxLength: number,\n maxLines: number,\n markerSizes: [number, number],\n markerOffset: [number, number]\n ): Text[] {\n const cacheKey = `${text}_${maxLength}_${SIEMENS_FONT_LABELS}_${markerSizes[0]}_${markerSizes[1]}_${markerOffset[0]}_${markerOffset[1]}`;\n if (this.labelTextStyleCache[cacheKey]) {\n return this.labelTextStyleCache[cacheKey];\n }\n\n const wrappedText = this.wrapLabelText(text, maxLength, maxLines);\n const margin = 6;\n const extraPadding = 1;\n const halfWidth = markerSizes[0] / 2;\n const halfHeight = markerSizes[1] / 2;\n const placementOffsets = [\n {\n offsetX: markerOffset[0],\n offsetY: margin + markerOffset[1],\n align: { h: 'center', v: 'top' }\n },\n {\n offsetX: markerOffset[0],\n offsetY: -margin - markerSizes[1] + markerOffset[1],\n align: { h: 'center', v: 'bottom' }\n },\n {\n offsetX: -margin - halfWidth + markerOffset[0],\n offsetY: markerOffset[1] - halfHeight,\n align: { h: 'right', v: 'middle' }\n },\n {\n offsetX: margin + halfWidth - markerOffset[0],\n offsetY: markerOffset[1] - halfHeight,\n align: { h: 'left', v: 'middle' }\n }\n ] as const;\n\n return (this.labelTextStyleCache[cacheKey] = placementOffsets.map(\n offset =>\n new Text({\n text: wrappedText,\n font: SIEMENS_FONT_LABELS,\n fill: new Fill({ color: this.theme.textColor }),\n stroke: new Stroke({ color: this.theme.strokeColor, width: 4 }),\n offsetX: offset.offsetX,\n offsetY: offset.offsetY,\n padding: [\n offset.offsetY >= 0 ? offset.offsetY + extraPadding : 0,\n offset.offsetX < 0 ? -offset.offsetX - extraPadding : 0,\n offset.offsetY < 0 ? -offset.offsetY - extraPadding : 0,\n offset.offsetX >= 0 ? offset.offsetX + extraPadding : 0\n ],\n textAlign: offset.align.h,\n textBaseline: offset.align.v,\n overflow: true\n })\n ));\n }\n\n private zoomCallback: () => number | undefined = () => undefined;\n\n private getZoom(): number {\n return this.zoomCallback?.() ?? 3;\n }\n\n setZoomCallback(callback?: () => number | undefined): void {\n this.zoomCallback = callback ?? (() => undefined);\n }\n\n setTheme(groupColors: Record<number, string> | ColorPalette | undefined): void {\n this.resetCaches();\n this.grouping = new Grouping(groupColors);\n this._theme = undefined;\n }\n\n get theme(): ThemeType {\n this._theme ??= themeElement.style();\n return this._theme;\n }\n\n /**\n * Create feature with parameters\n * @param points - the list of points\n */\n createFeatures(points: MapPoint[], alwaysShowLabels = false): Feature[] {\n return points.map(\n point =>\n new Feature({\n geometry: new Point(fromLonLat([point.lon, point.lat])),\n // Append MapPointMetaData that will be available in getProperties()\n meta: point,\n name: point.name,\n description: point.description,\n marker: point.marker,\n label: alwaysShowLabels ? ({ text: point.name } as LabelOptions) : undefined,\n group: point.group,\n extraProperties: point.extraProperties,\n click: point.click\n })\n );\n }\n\n /**\n * Initialize animated cluster layer for points if clustering is enabled\n * @param features - for the source\n * @param markerAnimation - animation value for markers\n * @param clusterDistance - number distance between clusters\n * @param multiWorld - boolean if points should be repeated on multiple world maps\n */\n clusterLayer(\n features: Feature[],\n markerAnimation: boolean,\n clusterDistance: number,\n multiWorld: boolean\n ): Layer {\n return new AnimatedCluster({\n className: 'animated-cluster',\n zIndex: 1000,\n source: new Cluster({\n wrapX: multiWorld,\n distance: this.calculateClusteringDistance(clusterDistance, CLUSTER_RADIUS_SIZE),\n minDistance: CLUSTER_RADIUS_SIZE * 2,\n source: new VectorSource({\n features\n })\n }),\n animationDuration: markerAnimation ? ANIMATION_DURATION : 0,\n style: (feature: Feature) => this.getClusterStyle(feature)\n });\n }\n\n /**\n * Create vector layer when clustering is disabled\n * @param features - list of Features\n * @param multiWorld - boolean if points should be repeated on multiple world maps\n */\n vectorLayer(\n features: Feature[],\n multiWorld: boolean,\n defaultStyle: boolean = false\n ): VectorLayer<VectorSource> {\n return new VectorLayer({\n className: 'vector-layer',\n zIndex: 1000,\n source: new VectorSource({\n features,\n wrapX: multiWorld\n }),\n style: !defaultStyle\n ? feature => this.getFeatureStyle(feature as Feature, false, features)\n : undefined\n });\n }\n\n labelLayer(\n features: Feature[],\n multiWorld: boolean,\n maxLabelLength: number,\n maxLines: number,\n clusterLayer?: Layer\n ): VectorLayer<VectorSource> {\n const clusterSource = clusterLayer?.getSource() as Cluster<Feature<Point>>;\n return new VectorLayer({\n className: 'vector-layer',\n zIndex: 1200,\n source: new VectorSource({\n features,\n wrapX: multiWorld\n }),\n declutter: true,\n style: feature =>\n this.getLabelStyle(\n feature as Feature<Point>,\n features as Feature<Point>[],\n maxLabelLength,\n maxLines,\n clusterSource,\n false\n )\n });\n }\n\n /**\n * Cluster styling\n *\n * @param feature - Feature\n */\n getClusterStyle(feature: Feature): Style[] {\n const features = feature.getProperties().features;\n if (!features) {\n return this.getFeatureStyle(feature, true, features);\n }\n const uid = feature.getProperties().geometry.ol_uid;\n const size = features.length;\n\n if (size === 1) {\n return this.getFeatureStyle(feature, true, features);\n }\n\n let style: Style[] = this.clusterStyleCache[uid];\n\n if (!style) {\n style = [\n new Style({\n image: new Circle({\n radius: CLUSTER_RADIUS_SIZE,\n fill: new Fill({\n color: this.theme.fillColor\n }),\n stroke: new Stroke({\n color: this.theme.strokeColor,\n width: 6\n })\n })\n }),\n new Style({\n image: this.getClusterChart(features, this.grouping!),\n text: new Text({\n text: size > MAX_CLUSTER_BUILDINGS ? `${MAX_CLUSTER_BUILDINGS}+` : size.toString(),\n placement: 'point',\n textAlign: 'center',\n textBaseline: 'middle',\n fill: new Fill({ color: this.theme.textColor }),\n font: SIEMENS_FONT\n })\n })\n ];\n\n this.clusterStyleCache[uid] = style;\n }\n\n return style;\n }\n\n /**\n * Separate feature styling with icon\n * @param feature - to style\n * @param cluster - indication\n * @param features - list of features\n */\n getFeatureStyle(feature: Feature, cluster: boolean, features: Feature[], dummy = false): Style[] {\n const subFeatures = feature.getProperties()?.features;\n const feat = cluster && features ? subFeatures[0] : feature;\n const marker: MarkerOptions = feat.getProperties().marker;\n\n if (feat) {\n const uid = feat.getProperties().geometry.ol_uid + (dummy ? '~' : '');\n let style = this.styleCache[uid];\n\n if (!style) {\n style = [\n new Style(\n dummy\n ? {}\n : {\n image: this.getMarkerStyle(feat, this.grouping!, marker)\n }\n )\n ];\n\n this.styleCache[uid] = style;\n }\n\n return style;\n }\n\n return [\n new Style({\n stroke: new Stroke({\n color: this.theme.strokeColor,\n width: DEFAULT_STROKE_WEIGHT\n })\n })\n ];\n }\n\n getLabelStyle(\n feature: Feature<Point>,\n features: Feature<Point>[],\n maxLabelLength: number,\n maxLines: number,\n clusterSource?: Cluster<Feature<Point>>,\n dummy = false\n ): Style[] {\n const featureStyle = this.getFeatureStyle(feature, false, features, true);\n\n // const marker: MarkerOptions = feature.getProperties().marker;\n const label: LabelOptions = feature.getProperties().label;\n\n if (dummy || !label?.text) {\n return featureStyle;\n }\n\n // Determine if the feature is clustered\n let isClustered = !!clusterSource;\n\n if (clusterSource) {\n let clusterFeatures = [];\n\n // Here we iterate over all clusters and check if the feature is among them\n clusterSource.getFeatures().forEach(cluster => {\n clusterFeatures = cluster.get('features');\n if (clusterFeatures?.length === 1 && clusterFeatures[0] === feature) {\n isClustered = false;\n }\n });\n }\n\n // Only show labels for features that are not clustered\n if (!isClustered) {\n const uid = feature.getProperties().geometry.ol_uid + '~' + this.getZoom();\n let style = this.labelStyleCache[uid];\n\n if (!style) {\n const labelStyles = this.getLabelTextStyle(\n label?.text,\n maxLabelLength,\n maxLines,\n this.getMarkerSize(feature),\n this.getMarkerOffset(feature)\n );\n style = labelStyles.map(\n labelStyle =>\n new Style({\n text: labelStyle\n })\n );\n\n this.labelStyleCache[uid] = style;\n }\n\n return [...featureStyle, ...style];\n }\n\n return featureStyle;\n }\n\n getMarkerOffset(feature: Feature): [number, number] {\n const marker = feature.getProperties()?.marker;\n const markerType = marker?.type;\n const [, height] = this.getMarkerSize(feature);\n const offsetVertical = !markerType || markerType === 'status' ? 0 : height / 2;\n return [0, offsetVertical];\n }\n\n getMarkerSize(feature: Feature): [number, number] {\n const marker = feature.getProperties()?.marker;\n const markerType = marker?.type;\n const scale = (markerType === 'icon' ? marker?.icon?.scale : 1) ?? 1;\n const height =\n !markerType || markerType === 'status'\n ? 32\n : markerType === 'dot'\n ? 28\n : DEFAULT_OFFSET * 2 * scale;\n const width =\n !markerType || markerType === 'status'\n ? 22\n : markerType === 'dot'\n ? 28\n : DEFAULT_OFFSET * 2 * scale;\n return [width, height];\n }\n\n private getClusterChart(features: Feature[], grouping: Grouping): ImageStyle {\n const { data, colors } = this.getClusterChartData(features, grouping);\n\n const chart = new Chart({\n type: DEFAULT_CLUSTER_TYPE,\n radius: CLUSTER_RADIUS_SIZE,\n donutRatio: DEFAULT_DONUT_RATIO,\n colors,\n data,\n rotateWithView: true,\n snapToPixel: true,\n stroke: new Stroke({\n color: colors.length > 1 ? this.theme.strokeColor : 'rgba(0,0,0,0)',\n width: colors.length > 1 ? DEFAULT_STROKE_WEIGHT : 0\n }),\n overflow: true\n } as any); // types are wrong here and don't match the actual API\n\n return chart;\n }\n\n private getClusterChartData(\n features: Feature[],\n grouping: Grouping\n ): { data: number[]; colors: string[] } {\n const theme = this.theme;\n const groups: Record<number, number> = {};\n const ungrouped: number[] = [];\n const ungroupedColors: string[] = [];\n\n features.forEach(feat => {\n const props = feat.getProperties();\n const groupId = props.group;\n\n // Ungrouped features are considered as they have group on their own.\n if (groupId == null) {\n ungrouped.push(1);\n ungroupedColors.push(\n this.getStatusMarkerColor(theme, props.marker) ?? theme.defaultMarkerColor\n );\n return;\n }\n\n if (groups[groupId]) {\n groups[groupId] = groups[groupId] + 1;\n } else {\n groups[groupId] = 1;\n }\n });\n\n const data: number[] = [];\n this.transformChartData(data, Object.values(groups), features.length);\n this.transformChartData(data, ungrouped, features.length);\n\n // Corresponding colors of groups are based on matching index\n const colors = [\n ...Object.keys(groups).map(groupId => grouping.getColor(Number(groupId))),\n ...ungroupedColors\n ];\n\n return { data, colors };\n }\n\n /**\n * Calculates minimal safe distance for clustering to avoid overlapping of clusters\n */\n private calculateClusteringDistance(distance: number, clusterRadius: number): number {\n const safeDistance = clusterRadius * 2;\n return Math.max(safeDistance, distance);\n }\n\n private transformChartData(data: number[], series: number[], size: number): void {\n const fragmentSize = size / CLUSTER_CHARTS_FRAGMENTS;\n\n for (const value of series) {\n let fragment = value / fragmentSize;\n\n // Any fragment smaller than 1 must be represented at least as one fragment in the chart\n if (fragment > 0 && fragment < 1) {\n fragment = 1;\n }\n\n data.push(fragment);\n }\n }\n\n private getMarkerStyle(\n feature: Feature,\n grouping: Grouping,\n marker?: MarkerOptions\n ): Icon | Circle | undefined {\n if (!marker || marker.type === 'status') {\n return this.getStatusMarker(marker ?? { type: 'status', status: 'default' });\n }\n\n const color = this.getMarkerColor(feature, grouping, marker);\n\n if (marker.type === 'dot') {\n return this.getDotMarker(color);\n }\n\n if (marker.type === 'icon') {\n return this.getIconMarker(color, marker.icon);\n }\n\n return undefined;\n }\n\n /**\n * Decides what color should Marker be painted with.\n *\n * Markers are painted with group colors if group id is present. If marker color is specified,\n * it takes precedence over the group color.\n */\n private getMarkerColor(feature: Feature, grouping: Grouping, marker?: MarkerOptions): string {\n let color = this.theme.defaultMarkerColor;\n\n const groupId = feature.getProperties().group;\n if (groupId) {\n color = grouping.getColor(groupId);\n }\n\n if (marker?.color) {\n color = marker.color;\n }\n\n if (marker?.status) {\n color = this.theme.status[marker.status];\n }\n\n return color;\n }\n\n private getDotMarker(color: string): Circle {\n return new Circle({\n radius: 10,\n fill: new Fill({\n color\n }),\n stroke: new Stroke({\n color: this.theme.strokeColor,\n width: 6\n })\n });\n }\n\n private getIconMarker(color: string, iconConf?: IconMarkerOptions): Icon {\n const defaultIconStyle: IconOptions = {\n color,\n src: DEFAULT_ICON,\n scale: DEFAULT_ICON_SCALE\n };\n\n return new Icon({ ...defaultIconStyle, ...iconConf });\n }\n\n private getStatusMarkerColor(theme: ThemeType, marker?: MarkerOptions): string | undefined {\n if (!marker) {\n return theme.status.default;\n }\n if (marker.type === 'status') {\n return theme.status[marker.status!];\n }\n return marker.color;\n }\n\n private getStatusMarker(marker: MarkerOptions): Icon {\n marker.color = this.getStatusMarkerColor(this.theme, marker);\n\n const svg = getMarker(marker.status!, this.theme);\n const svgb64 = 'data:image/svg+xml;base64,' + btoa(svg);\n\n return new Icon({\n size: [64, 64],\n color: 'transparent', // Note: must be 'transparent' or '#fff' for OL to keep the colors\n width: 42,\n height: 42,\n displacement: [0, 16],\n src: svgb64\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { click } from 'ol/events/condition';\nimport { createEmpty as createEmptyExtent, extend } from 'ol/extent';\nimport Feature from 'ol/Feature';\nimport Select, { SelectEvent } from 'ol/interaction/Select';\nimport { StyleLike } from 'ol/style/Style';\n\nexport class SelectCluster extends Select {\n private zoomOnClick: () => boolean;\n private maxZoom: () => number;\n private fitClusterPadding: () => number[];\n\n constructor(options: {\n fitClusterPadding: () => number[];\n maxZoom: () => number;\n style?: StyleLike | null;\n zoomOnClick: () => boolean;\n }) {\n super({ ...options, condition: click });\n\n this.zoomOnClick = options.zoomOnClick;\n this.maxZoom = options.maxZoom;\n this.fitClusterPadding = options.fitClusterPadding;\n this.on('select', this.selectCluster.bind(this));\n }\n\n selectCluster(e: SelectEvent): void {\n const feature = e.selected.at(0);\n\n // Not a cluster (or just one feature)\n const cluster = feature?.get('features');\n if (!cluster || cluster.length === 1) {\n return;\n }\n\n if (this.zoomOnClick()) {\n this.zoomToCluster(cluster);\n }\n }\n\n zoomToCluster(cluster: Feature[]): void {\n const extent = createEmptyExtent();\n cluster.forEach(feature => {\n const geometry = feature.getGeometry();\n if (geometry) {\n extend(extent, geometry.getExtent());\n }\n });\n\n this.getMap()!.getView().fit(extent, {\n padding: this.fitClusterPadding(),\n maxZoom: this.maxZoom()\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterViewChecked,\n AfterViewInit,\n Component,\n computed,\n contentChild,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n model,\n NgZone,\n OnChanges,\n OnDestroy,\n output,\n SimpleChanges,\n Type,\n viewChild\n} from '@angular/core';\nimport {\n SiNoTranslateService,\n SiTranslateServiceBuilder,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { siMapStyle } from '@siemens/map-styles/common';\nimport { apply as applyMapboxStyle } from 'ol-mapbox-style';\nimport Control from 'ol/control/Control';\nimport { defaults as defaultControls } from 'ol/control/defaults';\nimport { Coordinate } from 'ol/coordinate';\nimport * as olExtent from 'ol/extent';\nimport Feature, { FeatureLike } from 'ol/Feature';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport Geometry from 'ol/geom/Geometry';\nimport Point from 'ol/geom/Point';\nimport Layer from 'ol/layer/Layer';\nimport VectorLayer from 'ol/layer/Vector';\nimport Map from 'ol/Map';\nimport MapBrowserEvent from 'ol/MapBrowserEvent';\nimport Overlay, { Positioning } from 'ol/Overlay';\nimport RenderFeature from 'ol/render/Feature';\nimport Cluster from 'ol/source/Cluster';\nimport VectorSource from 'ol/source/Vector';\nimport { StyleLike } from 'ol/style/Style';\nimport View from 'ol/View';\n\nimport { SiMapPopoverComponent } from './components/si-map-popover/si-map-popover.component';\nimport { SiMapTooltipComponent } from './components/si-map-tooltip/si-map-tooltip.component';\nimport { ColorPalette } from './models/color-palette.type';\nimport {\n ANIMATION_DURATION,\n DEFAULT_CLUSTER_CLICK_ZOOM,\n DEFAULT_CLUSTER_DISTANCE,\n DEFAULT_FEATURE_CLICK_ZOOM,\n DEFAULT_FEATURE_SELECT_ZOOM,\n DEFAULT_GLOBAL_ZOOM,\n GEOJSON_LAYER,\n LAYER_NAME,\n POINTS_LAYER\n} from './models/constants';\nimport { MapPoint, MapPointMetaData } from './models/map-point.interface';\nimport { OverlayNativeProperties } from './models/overlay-native-properties.interface';\nimport { MapService } from './services/map.service';\nimport { SelectCluster } from './services/SelectCluster';\n\ninterface ClusterHolder {\n feature?: Feature;\n}\n\n@Component({\n selector: 'si-map',\n\n imports: [SiMapTooltipComponent, SiMapPopoverComponent],\n templateUrl: './si-map.component.html',\n styleUrl: './si-map.component.scss',\n providers: [MapService]\n})\nexport class SiMapComponent implements AfterViewInit, OnChanges, OnDestroy, AfterViewChecked {\n /**\n * Points to be rendered on the map as features.\n */\n readonly points = model<MapPoint[]>();\n /**\n * Payload of a geo-JSON object.\n */\n readonly geoJson = input<any>();\n /**\n * Callback function to add custom styling to the drawn geo-JSON features.\n */\n readonly styleFunction = input<StyleLike>();\n /**\n * Projection format used to render the geo-JSON payload.\n *\n * @defaultValue 'EPSG:3857'\n */\n readonly geoJsonProjection = input('EPSG:3857');\n /**\n * Enable or disable animation of markers.\n *\n * @defaultValue false\n */\n readonly markerAnimation = input(false);\n /**\n * Enable or disable clustering of points on the map.\n *\n * @defaultValue false\n */\n readonly cluster = input(false);\n /**\n * Defines which colors should be used when points are grouped. Grouping means\n * that points are painted with their group color and they are displayed as\n * series in donut chart inside cluster.\n *\n * @defaultValue 'status'\n */\n readonly groupColors = input<Record<number, string> | ColorPalette>('status');\n /**\n * - **overlay**: Layer for popup element, an element to be displayed over the\n * map and attached to a single map location.\n * - **controls**: List of controls to activate for map, additional controls\n * like full screen, etc. can be added here.\n */\n readonly nativeProperties = input<OverlayNativeProperties>();\n /**\n * Type of background map, for example `'https://api.maptiler.com/maps/voyager/style.json?key=xxx'`\n * (Token key is required). The styleJson defines the tiler source and the\n * used styles for different layers, should only be used if the siemens\n * default styles by using `maptilerKey` isn't good enough.\n */\n readonly styleJson = input<any>();\n /**\n * Option to switch on/off the display of tooltip while hovering over single\n * point.\n *\n * @defaultValue false\n */\n readonly displayTooltipOnHover = input(false);\n /**\n * Option to switch on/off the display of popover when clicked.\n * Default set to true (on).\n *\n * @defaultValue true\n */\n readonly displayPopoverOnClick = input(true);\n\n /**\n * Option to switch on/off popover when hovered.\n * Default is set to false (off)\n *\n * @defaultValue false\n */\n readonly displayPopoverOnHover = input(false);\n\n /**\n * Provide your key for MapTiler, this will use the default siemens element\n * styles which can be used in both light and dark mode. Shouldn't be used\n * together with styleJson.\n */\n readonly maptilerKey = input<string>();\n /**\n * Option to switch on/off the display of tooltip while hovering over cluster.\n *\n * @defaultValue false\n */\n readonly displayTooltipOnClusterHover = input(false);\n /**\n * Defines range in which points are clustered. In pixels.\n *\n * @defaultValue DEFAULT_CLUSTER_DISTANCE\n */\n readonly clusterDistance = input<number>(DEFAULT_CLUSTER_DISTANCE);\n /**\n * Zoom level when calling the `select()` method on the component.\n * Defaults to 10.\n *\n * @defaultValue DEFAULT_FEATURE_SELECT_ZOOM\n */\n readonly featureSelectZoom = input<number>(DEFAULT_FEATURE_SELECT_ZOOM);\n /**\n * Max zoom level which is used when clicking on feature on the map.\n * Defaults to 15.\n *\n * @defaultValue DEFAULT_FEATURE_CLICK_ZOOM\n */\n readonly featureClickZoom = input<number>(DEFAULT_FEATURE_CLICK_ZOOM);\n /**\n * Max zoom level for clicking on a cluster on the map. Defaults to 15.\n *\n * @defaultValue DEFAULT_CLUSTER_CLICK_ZOOM\n */\n readonly clusterClickZoom = input<number>(DEFAULT_CLUSTER_CLICK_ZOOM);\n /**\n * Max zoom level on load or when clicking the reset button. Defaults to 5.\n *\n * @defaultValue DEFAULT_GLOBAL_ZOOM\n */\n readonly globalZoom = input<number>(DEFAULT_GLOBAL_ZOOM);\n /**\n * When enabled, features will be automatically zoom to on click.\n *\n * @defaultValue false\n */\n readonly autoZoomFeatureClick = input(false);\n /**\n * When disabled, clusters will no longer automatically be zoomed to on click.\n *\n * @defaultValue true\n */\n readonly autoZoomClusterClick = input(true);\n /**\n * Custom popover component\n */\n readonly popoverComponent = input<Type<any>>();\n\n /**\n * Custom popover component for clustering\n */\n readonly clusterPopoverComponent = input<Type<any>>();\n /**\n * Custom popover component\n */\n readonly popoverComponentProps = input<any>();\n /**\n * Close the popover on click\n *\n * @defaultValue true\n */\n readonly popoverCloseOnClick = input(true);\n\n /**\n * Padding (in pixels) applied to the map view when zooming to a cluster, preventing points from being clipped at the edges.\n * Specified as [top, right, bottom, left].\n *\n * @defaultValue [20, 20, 20, 20]\n */\n readonly fitClusterPadding = input<[number, number, number, number]>([20, 20, 20, 20]);\n /**\n * For Point geometry, padding (in pixels) to be cleared to fit the point inside the view after a click on it.\n * Values in the array are: [top, right, bottom, left].\n *\n * @defaultValue [20, 20, 20, 20]\n */\n readonly fitPointPadding = input<number[]>([20, 20, 20, 20]);\n /**\n * For GeoJson, padding (in pixels) to be cleared to fit the GeoJson inside the view after a click on it.\n * Values in the array are: [top, right, bottom, left].\n *\n * @defaultValue [20, 20, 20, 20]\n */\n readonly fitGeoJsonPadding = input<number[]>([20, 20, 20, 20]);\n /**\n * Show multiple worlds, including points that cross the 180th meridian.\n *\n * @defaultValue true\n */\n readonly multiWorld = input(true);\n /**\n * Show the label permanently next to the point.\n * Normally the label is shown on hover or click.\n * By enabling this it will always be visible next to the marker.\n *\n * @defaultValue false\n */\n readonly alwaysShowLabels = input(false);\n /**\n * Maximum number of characters per line for always displayed labels of a point.\n * If the label exceeds this limit, it will be wrapped or trimmed.\n * If set to 0, label trimming will be disabled.\n * This setting is effective only when {@link alwaysShowLabels} is enabled.\n * Important: Changing this is not recommended in most cases and may cause issues with positioning of the labels.\n *\n * @defaultValue 20\n */\n readonly maxLabelLineLength = input(20);\n /**\n * Maximum number of lines for always displayed labels of a point.\n * If the label exceeds this limit, it will be trimmed.\n * This setting is effective only when {@link alwaysShowLabels} is enabled and {@link maxLabelLineLength} is not 0.\n * Important: Changing this is not recommended in most cases and may cause issues with positioning of the labels.\n *\n * @defaultValue 3\n */\n readonly maxLabelLines = input(3);\n /**\n * Emitted when points on the map are selected or de-selected\n */\n readonly pointsSelected = output<MapPoint[]>();\n /**\n * Emitted when the points are available as features. So consumers can call methods like `zoomToPoints()` on the actual point list.\n */\n readonly pointsRefreshed = output<void>();\n\n protected readonly popover = viewChild.required(SiMapPopoverComponent);\n protected readonly popoverElement = viewChild.required<ElementRef, ElementRef>('popover', {\n read: ElementRef\n });\n protected readonly defaultTooltip = viewChild(SiMapTooltipComponent);\n protected readonly projectedTooltip = contentChild(SiMapTooltipComponent);\n protected readonly tooltip = computed(() => this.projectedTooltip() ?? this.defaultTooltip()!);\n protected readonly mapReference = viewChild.required<ElementRef<HTMLElement>>('map');\n /** OpenLayers map instance. */\n map?: Map;\n\n tooltipOverlay!: Overlay;\n popoverOverlay!: Overlay;\n /** @defaultValue false */\n isClicked = false;\n /** @defaultValue [] */\n features: Feature[] = [];\n selected?: Feature;\n targetFeature?: Feature;\n protected attributionsLabel = t(() => $localize`:@@SI_MAPS.ATTRIBUTIONS_BUTTON:Attributions`);\n protected zoomInLabel = t(() => $localize`:@@SI_MAPS.ZOOM_IN_BUTTON:Zoom in`);\n protected zoomOutLabel = t(() => $localize`:@@SI_MAPS.ZOOM_OUT_BUTTON:Zoom out`);\n protected zoomToDefaultLabel = t(() => $localize`:@@SI_MAPS.ZOOM_TO_DEFAULT_BUTTON:Reset zoom`);\n protected clusterInteraction?: SelectCluster;\n private selectedCluster?: Feature;\n private darkTheme: boolean | undefined = undefined;\n\n private readonly mapService = inject(MapService);\n private readonly ngZone = inject(NgZone);\n // We cannot use new inject function, as it may not be available in older translate version.\n // Older version could potentially be used in mobile.\n private readonly translateService =\n inject(SiTranslateServiceBuilder, { optional: true })?.buildService(inject(Injector)) ??\n inject(SiNoTranslateService);\n\n constructor() {\n const translations = this.translateService.translateSync([\n this.attributionsLabel,\n this.zoomInLabel,\n this.zoomOutLabel,\n this.zoomToDefaultLabel\n ]);\n this.attributionsLabel = translations[this.attributionsLabel];\n this.zoomInLabel = translations[this.zoomInLabel];\n this.zoomOutLabel = translations[this.zoomOutLabel];\n this.zoomToDefaultLabel = translations[this.zoomToDefaultLabel];\n }\n // this is to filter out non-data layers for performance of `forEachFeatureAtPixel()`\n private layerFilter = (layer: Layer<any>): boolean => {\n const name = layer.get(LAYER_NAME);\n return name === POINTS_LAYER || name === GEOJSON_LAYER;\n };\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (!this.map) {\n return;\n }\n\n if (changes.groupColors) {\n this.mapService.setTheme(this.groupColors());\n // refresh the style of points-layer to reflect the color changes.\n this.refreshLayersStyle([POINTS_LAYER]);\n }\n\n if (changes.points) {\n this.refresh(this.points() ?? [], false);\n }\n\n if (changes.geoJson || changes.styleFunction) {\n const geojsonLayer = this.map\n .getLayers()\n .getArray()\n .find(layer => layer.get(LAYER_NAME) === GEOJSON_LAYER) as VectorLayer<VectorSource>;\n if (geojsonLayer) {\n if (changes.geoJson) {\n // If geojson-layer is already present and there is change in geojson,\n // update the features of geojson-layer with the latest geojson.\n const geoJson = this.geoJson();\n const features =\n geoJson && Object.keys(geoJson).length\n ? new GeoJSON({ featureProjection: this.geoJsonProjection() }).readFeatures(geoJson)\n : [];\n this.ngZone.runOutsideAngular(() =>\n geojsonLayer.setSource(new VectorSource({ features }))\n );\n }\n if (changes.styleFunction) {\n // If there is some change in styleFunction, update the style of geojson-layer.\n this.ngZone.runOutsideAngular(() => geojsonLayer.setStyle(this.styleFunction()));\n }\n } else {\n // If geojson-layer is not present, and change is detected in geojson or styleFunction,\n // create a new geojson-layer.\n this.ngZone.runOutsideAngular(() => this.setGeoJsonLayer());\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.ngZone.runOutsideAngular(() => {\n this.init();\n this.map?.on('pointermove', event => this.onFeatureHover(event));\n this.map?.on('click', event => this.onClusterClick(event));\n });\n\n const dark = document.documentElement.classList.contains('app--dark');\n this.setTheme(dark, this.maptilerKey());\n\n setTimeout(() => this.fixCenter());\n }\n\n ngAfterViewChecked(): void {\n // making sure that if the map is not rendered updateSize() gets called\n // this is to make sure the map also gets rendered in ionic\n if (this.map && !this.map.isRendered()) {\n this.ngZone.runOutsideAngular(() => this.map!.updateSize());\n }\n }\n\n ngOnDestroy(): void {\n this.removePixelRatioListener();\n this.map?.setTarget(undefined);\n }\n\n @HostListener('window:theme-switch', ['$event'])\n onThemeSwitchInternal(event: Event): void {\n this.setTheme((event as CustomEvent).detail.dark, this.maptilerKey());\n }\n\n onThemeSwitch(dark: boolean): void {\n this.setTheme(dark, this.maptilerKey());\n }\n\n private removePixelRatioListener = (): void => {};\n\n private readonly updatePixelRatio = (): void => {\n // on browser zoom the pixel ratio changes. No other updates are needed as OL has a\n if (this.map && window.devicePixelRatio !== (this.map as any).pixelRatio_) {\n this.ngZone.runOutsideAngular(() => this.changeOpenLayerPixelRation());\n }\n\n this.removePixelRatioListener();\n const media = matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);\n media.addEventListener('change', this.updatePixelRatio);\n this.removePixelRatioListener = () =>\n media.removeEventListener('change', this.updatePixelRatio);\n };\n\n /**\n * Changes the pixel ration in OL which is not supported directly by OL.\n */\n private changeOpenLayerPixelRation(): void {\n if (!this.map) {\n return;\n }\n\n // need to reset cached styles as they contain pre-rendered canvases\n this.mapService.resetCaches();\n\n // set private property\n (this.map as any).pixelRatio_ = devicePixelRatio;\n\n // force redraw of all layers\n this.map!.getLayers().forEach(layer => {\n if (layer instanceof Layer) {\n const source = layer.getSource();\n if (source?.tilePixelRatio_ !== undefined) {\n source.tilePixelRatio_ = devicePixelRatio;\n source.refresh();\n }\n if (source instanceof Cluster) {\n source.getSource()?.changed();\n } else {\n source?.changed();\n }\n layer.changed();\n }\n });\n this.map.updateSize();\n }\n\n /**\n * Initialize map and it's layers\n */\n init(): void {\n const tooltipContainer = this.tooltip().nativeElement;\n const popoverContainer = this.popoverElement().nativeElement;\n const mapContainer = this.mapReference().nativeElement;\n const initialView = {\n constrainResolution: true,\n showFullExtent: true,\n center: [0, 0],\n zoom: 2,\n minZoom: 2,\n maxZoom: 24\n };\n\n this.tooltipOverlay = this.createOverlay(\n tooltipContainer,\n 'top-center',\n this.nativeProperties(),\n true\n );\n this.popoverOverlay = this.createOverlay(\n popoverContainer,\n 'top-center',\n this.nativeProperties()\n );\n\n const controls = defaultControls({\n attributionOptions: {\n label: '',\n tipLabel: this.attributionsLabel,\n expandClassName: 'element-state-info',\n collapseLabel: '',\n collapseClassName: 'element-left-2 flip-rtl'\n },\n zoomOptions: {\n zoomInLabel: '',\n zoomInTipLabel: this.zoomInLabel,\n zoomInClassName: 'element-plus',\n zoomOutLabel: '',\n zoomOutTipLabel: this.zoomOutLabel,\n zoomOutClassName: 'element-minus'\n },\n rotateOptions: {\n label: '',\n compassClassName: 'element-compass-needle'\n }\n });\n\n class ResetZoomControl extends Control {\n constructor(options: { label: string; callback: () => void }) {\n const button = document.createElement('button');\n button.className = 'element-zoom-reset';\n button.title = options.label;\n\n const element = document.createElement('div');\n element.className = 'ol-zoom-extent ol-unselectable ol-control';\n element.appendChild(button);\n\n super({ element: element });\n\n button.addEventListener('click', options.callback, false);\n }\n }\n\n controls.push(\n new ResetZoomControl({\n label: this.zoomToDefaultLabel,\n callback: () => {\n if (this.features.length) {\n this.zoomToFeatures(this.features, this.globalZoom());\n } else {\n // reset to original view\n this.map?.setView(new View(initialView));\n }\n }\n })\n );\n\n const nativeProperties = this.nativeProperties();\n if (nativeProperties?.controls) {\n nativeProperties.controls.forEach(e => controls.push(e));\n }\n\n this.map = new Map({\n controls,\n target: mapContainer,\n overlays: [this.tooltipOverlay, this.popoverOverlay],\n view: new View(initialView)\n });\n\n this.mapService.setZoomCallback(() => this.map?.getView().getZoom());\n\n this.mapService.setTheme(this.groupColors()); // Set theme before adding layers.\n\n const styleJsonValue = this.styleJson();\n if (styleJsonValue) {\n this.setMapStyle(undefined, undefined, styleJsonValue);\n }\n\n this.setGeoJsonLayer();\n\n const points = this.points();\n if (points?.length) {\n this.features = this.mapService.createFeatures(points, this.alwaysShowLabels());\n }\n this.setLayers();\n this.zoomToFeatures(this.features, this.globalZoom(), false);\n\n this.updatePixelRatio();\n }\n\n private centerValid(): boolean {\n const center = this.map?.getView()?.getCenter();\n return !!center && !isNaN(center[0]);\n }\n\n // workaround for center not being applied sometimes\n private fixCenter(): void {\n if (!this.centerValid()) {\n this.ngZone.runOutsideAngular(() => this.map?.getView()?.setCenter([0, 0]));\n }\n }\n\n /**\n * Setting up the layers for the map (cluster/vector layer)\n */\n private setLayers(): void {\n let layer: Layer;\n let labelLayer: Layer | undefined;\n const showLabels = this.features.some(feature => feature.getProperties().label?.text);\n if (this.cluster()) {\n const clusterLayer = this.mapService.clusterLayer(\n this.features,\n this.markerAnimation(),\n this.clusterDistance(),\n this.multiWorld()\n );\n\n this.clusterInteraction = new SelectCluster({\n maxZoom: this.featureClickZoom,\n zoomOnClick: this.autoZoomClusterClick,\n fitClusterPadding: this.fitClusterPadding,\n // Style the selection\n style: (feature: FeatureLike) => this.mapService.getClusterStyle(feature as Feature)\n });\n this.map?.addInteraction(this.clusterInteraction);\n\n if (showLabels) {\n labelLayer = this.mapService.labelLayer(\n this.features,\n this.multiWorld(),\n this.maxLabelLineLength(),\n this.maxLabelLines(),\n clusterLayer\n );\n }\n layer = clusterLayer;\n } else {\n layer = this.mapService.vectorLayer(this.features, this.multiWorld());\n if (showLabels) {\n labelLayer = this.mapService.labelLayer(\n this.features,\n this.multiWorld(),\n this.maxLabelLineLength(),\n this.maxLabelLines()\n );\n }\n }\n layer.set(LAYER_NAME, POINTS_LAYER);\n\n this.map?.addLayer(layer);\n if (labelLayer) {\n this.map?.addLayer(labelLayer);\n }\n }\n\n /**\n * Setting up the geoJson layer\n */\n setGeoJsonLayer(): void {\n const geoJson = this.geoJson();\n if (this.map && geoJson && Object.keys(geoJson).length > 0) {\n const layer = this.mapService.vectorLayer(\n new GeoJSON({ featureProjection: this.geoJsonProjection() }).readFeatures(geoJson),\n this.multiWorld()\n );\n layer.setStyle(this.styleFunction());\n layer.set(LAYER_NAME, GEOJSON_LAYER);\n this.ngZone.runOutsideAngular(() => this.map!.addLayer(layer));\n }\n }\n\n private setTheme(dark: boolean, maptilerKey?: string): void {\n if (maptilerKey && (this.darkTheme === undefined || this.darkTheme !== dark)) {\n this.setMapStyle(dark, maptilerKey);\n this.darkTheme = dark;\n }\n this.mapService.setTheme(this.groupColors());\n // reload the style to reflect the theme changes.\n this.refreshLayersStyle([POINTS_LAYER, GEOJSON_LAYER]);\n }\n\n private refreshLayersStyle(layerNames: string[]): void {\n this.ngZone.runOutsideAngular(() =>\n this.map\n ?.getLayers()\n .getArray()\n .forEach(layer => {\n if (layerNames.includes(layer.get(LAYER_NAME))) {\n (layer as VectorLayer<VectorSource>).setStyle(\n (layer as VectorLayer<VectorSource>).getStyle()\n );\n }\n })\n );\n }\n\n /**\n * Set Map style\n * @param dark - boolean if dark theme should be active or not\n * @param key - the api key for the maptiler styleJSON\n * @param styleJSON - a preexisting styleJSON as url with key already provided\n */\n setMapStyle(dark?: boolean, key?: string, styleJSON?: string): void {\n if (!this.map) {\n return;\n }\n\n if (styleJSON) {\n this.ngZone.runOutsideAngular(() => applyMapboxStyle(this.map!, styleJSON));\n } else if (key) {\n const layers = this.map.getLayers().getArray() as Layer[];\n layers.forEach((layer: Layer) => {\n if (layer.get('mapbox-source')) {\n this.map!.removeLayer(layer);\n }\n });\n this.mapboxStyles(siMapStyle(key, dark));\n }\n }\n\n /**\n * Set mapbox styles\n * @param styleJSON - the styleJSON as a JSON object\n */\n mapboxStyles(styleJSON: any): void {\n if (!this.map) {\n return;\n }\n this.ngZone.runOutsideAngular(() =>\n applyMapboxStyle(this.map!, styleJSON).then(mapOrLayer => {\n const map = mapOrLayer as Map;\n const layers = map.getLayers().getArray() as Layer[];\n layers.forEach((layer: Layer) => {\n if (layer.get('mapbox-source')) {\n // any needs to be used here otherwise library doesn't allow it\n (layer.getSource() as any).wrapX_ = this.multiWorld();\n this.map = map;\n }\n });\n })\n );\n }\n\n /**\n * Create overlay for tooltip and popover\n * @param nativeProperties - native properties\n * @param container - to create overlay in\n * @param position - overlay positioning\n */\n createOverlay(\n container: HTMLElement,\n position: Positioning,\n nativeProperties?: OverlayNativeProperties,\n isTooltip?: boolean\n ): Overlay {\n return (\n nativeProperties?.overlay ??\n new Overlay({\n element: container,\n positioning: position,\n // Stop event bubbling which allow to scroll in the popover\n stopEvent: true,\n autoPan: isTooltip ? true : false\n })\n );\n }\n\n /**\n * On feature hovering show tooltip and change cursor style\n * @param event - A hovering event\n */\n onFeatureHover(event: MapBrowserEvent): void {\n if (!this.map) {\n return;\n }\n\n const clusterHolder: ClusterHolder = {};\n const features = this.map.forEachFeatureAtPixel(\n event.pixel,\n feat => this.featureCallback(feat, clusterHolder),\n {\n hitTolerance: 2,\n layerFilter: this.layerFilter\n }\n );\n\n const element = this.map.getTargetElement();\n if (element) {\n // The cursor will change to pointer if displayPopoverOnClick is true or if Cluster Features are hovered.\n element.style.cursor =\n features?.length && (this.displayPopoverOnClick() || features.length > 1) ? 'pointer' : '';\n // The popover will be shown only for individual points, not for cluster.\n if (this.displayPopoverOnHover() && !this.isClicked) {\n if (features?.length === 1) {\n this.setPopOver(features[0], false, event);\n } else {\n this.popoverOverlay.setPosition(undefined);\n }\n return;\n }\n }\n\n this.doShowTooltip(features, clusterHolder.feature);\n }\n\n /** Display tooltip on hovering over feature type of Feature. */\n displayTooltip(feats: FeatureLike[]): void {\n if (!this.displayTooltipOnHover() || this.isClicked) {\n return;\n }\n for (const feat of feats) {\n const features = this.featureCallback(feat);\n if (features?.length === 1) {\n this.showTooltipContent(features[0]);\n return;\n }\n }\n }\n\n private doShowTooltip(features?: Feature[], cluster?: Feature): void {\n let shown = false;\n if (!this.isClicked && features?.length) {\n if (this.displayTooltipOnHover() && features?.length === 1) {\n shown = this.showTooltipContent(features[0]);\n } else if (this.selectedCluster !== cluster && this.displayTooltipOnClusterHover()) {\n shown = this.showClusterTooltipContent(features, cluster);\n }\n }\n if (!shown) {\n this.tooltipOverlay.setPosition(undefined);\n }\n }\n\n /**\n * Clicking on cluster event\n * @param event - openlayers event\n */\n onClusterClick(event: MapBrowserEvent): void {\n if (!this.map) {\n return;\n }\n if (!this.popoverCloseOnClick() && this.popoverElement()) {\n const popoverLoc = (\n this.popoverElement().nativeElement as HTMLElement\n ).firstElementChild!.getBoundingClientRect();\n const mapLoc = (this.mapReference().nativeElement as HTMLElement).getBoundingClientRect();\n const left = popoverLoc.left - mapLoc.left;\n const top = popoverLoc.top - mapLoc.top;\n const right = popoverLoc.right - mapLoc.left;\n const bottom = popoverLoc.bottom - mapLoc.top;\n if (\n left <= event.pixel[0] &&\n event.pixel[0] <= right &&\n top <= event.pixel[1] &&\n event.pixel[1] <= bottom\n ) {\n return;\n }\n }\n const clusterHolder: ClusterHolder = {};\n const clusterFeatures = this.map.forEachFeatureAtPixel(\n event.pixel,\n feat => this.featureCallback(feat, clusterHolder),\n {\n layerFilter: this.layerFilter\n }\n );\n if (clusterFeatures) {\n if (clusterFeatures.length > 1) {\n this.tooltipOverlay.setPosition(undefined);\n this.showClusterPopover(clusterHolder.feature!);\n this.emitSelection(clusterFeatures);\n } else if (clusterFeatures.length === 1) {\n if (clusterFeatures[0] instanceof RenderFeature) {\n this.closePopup();\n this.emitSelection();\n } else if (this.displayPopoverOnClick()) {\n this.featureClick(clusterFeatures[0], event, this.autoZoomFeatureClick());\n this.emitSelection(clusterFeatures);\n }\n }\n } else {\n this.closePopup();\n this.emitSelection();\n }\n }\n\n private emitSelection(features?: Feature[]): void {\n const points: MapPoint[] = (features ?? []).map(f => {\n const props = f.getProperties();\n return props.meta ?? (props as MapPoint);\n });\n this.ngZone.run(() => this.pointsSelected.emit(points));\n }\n\n /**\n * Zoom to cluster features\n * @param clusterFeatures - features to zoom in\n */\n zoomCluster(clusterFeatures: Feature[]): void {\n this.clusterInteraction?.zoomToCluster(clusterFeatures);\n }\n\n /**\n * Close popup\n */\n closePopup(): boolean {\n this.selectedCluster = undefined;\n this.popoverOverlay.setPosition(undefined);\n this.isClicked = false;\n return false;\n }\n\n /**\n * Return features inside feature object in case of cluster enabled/disabled\n * @param feat - feature to get features from\n */\n featureCallback(feat: FeatureLike, clusterHolder?: ClusterHolder): Feature[] | undefined {\n if (feat instanceof Feature) {\n const propFeatures = feat.getProperties().features;\n if (this.cluster() && propFeatures) {\n if (clusterHolder) {\n clusterHolder.feature = feat;\n }\n return propFeatures;\n }\n return [feat];\n }\n return undefined;\n }\n\n /**\n * Zoom to features, gets coordinates of points and creates bounding extent\n * @param points - list of points to zoom in, if empty all points will be zoomed to, need to be the same reference as the input\n * @param zoomLevel - number for level to zoom in\n */\n zoomToPoints(points: MapPoint[], zoomLevel: number, shouldAnimate = true): void {\n if (!points.length) {\n this.zoomToFeatures([], zoomLevel, shouldAnimate);\n } else {\n const features = points\n .map(point => this.points()?.indexOf(point))\n .filter(index => index !== undefined)\n .map(index => this.features[index]);\n this.zoomToFeatures(features, zoomLevel, shouldAnimate);\n }\n }\n\n /**\n * Zoom to features, gets coordinates of features and creates bounding extent\n * @param features - list of features to zoom in, if empty all features will be zoomed to\n * @param zoomLevel - number for level to zoom in\n */\n zoomToFeatures(features: Feature[], zoomLevel: number, shouldAnimate = true): void {\n if (!features.length) {\n features = this.features;\n }\n const coordinates: Coordinate[] = [];\n for (const f of features) {\n const coordinate = this.getFeatureCoordinate(f);\n if (coordinate) {\n coordinates.push(coordinate);\n }\n }\n this.zoomToCoordinates(coordinates, zoomLevel, shouldAnimate, this.fitPointPadding());\n }\n\n /**\n * Zoom to GeoJson using coordinates of point of click\n * @param coordinate - coordinates of point of click\n * @param zoomLevel - number for level to zoom in\n */\n zoomToGeoJson(coordinate: Coordinate, zoomLevel: number, shouldAnimate = true): void {\n this.zoomToCoordinates([coordinate], zoomLevel, shouldAnimate, this.fitGeoJsonPadding());\n }\n\n private zoomToCoordinates(\n coordinates: Coordinate[],\n maxZoom: number,\n animate = true,\n padding?: number[]\n ): void {\n this.ngZone.runOutsideAngular(() => {\n if (this.map && coordinates.length) {\n const view = this.map.getView();\n view.fit(olExtent.boundingExtent(coordinates), {\n duration: animate && this.centerValid() ? ANIMATION_DURATION : undefined,\n maxZoom,\n padding\n });\n }\n });\n }\n\n /**\n * Refresh points with new set of points\n * @param points - to refresh with\n */\n refresh(points: MapPoint[], zoomToFeatures = true): void {\n this.points.set(points);\n this.ngZone.runOutsideAngular(() => this.doRefresh(points, zoomToFeatures));\n }\n\n private doRefresh(points: MapPoint[], zoomToFeatures: boolean): void {\n if (!this.map) {\n return;\n }\n\n this.mapService.resetCaches();\n\n this.isClicked = false;\n this.clear();\n\n const layers = this.map.getLayers().getArray() as Layer[];\n this.features = this.mapService.createFeatures(points, this.alwaysShowLabels());\n\n layers.forEach((layer: Layer) => {\n const source = layer.getSource();\n\n if (source instanceof Cluster && this.cluster()) {\n const vectorSource = source.getSource();\n vectorSource?.addFeatures(this.features);\n } else if (source instanceof VectorSource) {\n source.addFeatures(this.features);\n }\n });\n\n if (zoomToFeatures) {\n this.zoomToFeatures([], this.globalZoom());\n }\n // Emit change event to notify consumers that the actual features are available.\n // This is necessary to call methods like `zoomToPoints()`\n this.ngZone.run(() => this.pointsRefreshed.emit());\n }\n\n clear(): void {\n this.ngZone.runOutsideAngular(() => this.doClear());\n }\n\n private doClear(): void {\n if (!this.map) {\n return;\n }\n\n this.mapService.resetCaches();\n\n this.hideOverlays();\n const layers = this.map.getLayers().getArray() as Layer[];\n\n layers.forEach((layer: Layer) => {\n const source = layer.getSource();\n\n if (source instanceof Cluster && this.cluster()) {\n const vectorSource = source.getSource();\n vectorSource?.clear();\n }\n\n if (source instanceof VectorSource) {\n source.clear();\n }\n });\n }\n\n /**\n * Selecting the certain point on map with API\n * @param point - which select\n */\n select(point: MapPoint, maxZoomLevel?: number): void {\n this.ngZone.runOutsideAngular(() => this.doSelect(point, maxZoomLevel));\n }\n\n private doSelect(point: MapPoint, maxZoomLevel?: number): void {\n if (!this.map) {\n return;\n }\n\n const featPoint: Feature[] = this.mapService.createFeatures([point], this.alwaysShowLabels());\n const ext = featPoint[0]?.getGeometry()?.getExtent();\n\n if (ext) {\n const center = olExtent.getCenter(ext);\n this.map.setView(\n new View({\n center: [center[0], center[1]],\n zoom: maxZoomLevel ?? this.featureSelectZoom()\n })\n );\n this.featureClick(featPoint[0]);\n this.emitSelection(featPoint);\n }\n }\n\n /** API for feature clicking with extra properties. */\n featureClick(feature: Feature, event?: any, zoom?: boolean): void {\n this.targetFeature = feature;\n this.isClicked = true;\n this.tooltipOverlay.setPosition(undefined);\n\n this.setPopOver(feature, zoom, event);\n }\n\n private setPopOver(feature: Feature, zoom: boolean | undefined, event: any): void {\n const extraProperties = feature.getProperties().extraProperties;\n const geometry = feature?.getGeometry();\n\n /*If a Point geometry is present on top of a GeoJson layer, and when clicked on the point,\n \"else if\" statement will prevent repetition of the popover render and zoom method.*/\n if (geometry && geometry instanceof Point) {\n if (zoom) {\n this.zoomToFeatures([feature], this.featureClickZoom());\n }\n const coordinates = geometry.getCoordinates();\n this.selected = feature;\n this.popoverOverlay.setPosition(coordinates);\n this.popoverOverlay.setOffset(this.mapService.getMarkerOffset(feature));\n this.popover().render({\n component: this.popoverComponent(),\n mapPoints: feature.getProperties() as MapPointMetaData\n });\n if (extraProperties) {\n feature.getProperties().click?.(extraProperties);\n }\n } else if (this.geoJson()) {\n const coordinates = event.coordinate;\n this.popoverOverlay.setPosition(coordinates);\n this.popoverOverlay.setOffset(this.mapService.getMarkerOffset(feature));\n this.popover().render({\n component: this.popoverComponent(),\n mapPoints: [feature.getProperties() as MapPointMetaData]\n });\n if (zoom) {\n this.zoomToGeoJson(coordinates, this.featureClickZoom());\n }\n }\n }\n\n /**\n * Show tooltip with content on hover over feature\n * @param feature - to show popup on\n */\n showTooltipContent(feature: Feature): boolean {\n const coordinates = this.getFeatureCoordinate(feature);\n if (coordinates) {\n this.tooltip().setTooltip(feature.getProperties().name as string);\n this.tooltipOverlay.setOffset(this.mapService.getMarkerOffset(feature));\n this.tooltipOverlay.setPosition(coordinates);\n return true;\n }\n return false;\n }\n\n /** Sends data into cluster tooltip based on number of\n * @param features - in it\n * */\n showClusterTooltipContent(features: Feature[], cluster?: Feature): boolean {\n const coordinates =\n this.getFeatureCoordinate(cluster) ?? this.calculateClusterCoordinates(features);\n\n const labels = features.map(f => f.getProperties().name);\n this.tooltip().setTooltip(labels);\n\n this.tooltipOverlay.setOffset([0, 20]);\n this.tooltipOverlay.setPosition(coordinates);\n return true;\n }\n\n hideOverlays(): void {\n this.tooltipOverlay.setPosition(undefined);\n this.popoverOverlay.setPosition(undefined);\n }\n\n private getFeatureCoordinate(feature?: Feature): Coordinate | undefined {\n const geometry = feature?.getGeometry();\n if (geometry instanceof Point) {\n return geometry.getCoordinates();\n }\n return undefined;\n }\n\n /**\n * Calculates cluster center coordinates (lon, lat) for cluster tooltip positioning base on\n * @param features - (lon, lan)\n */\n private calculateClusterCoordinates(features: Feature[]): [number, number] {\n let lon = 0;\n let lat = 0;\n for (const feat of features) {\n const coordinates = this.getFeatureCoordinate(feat);\n if (coordinates) {\n lon += coordinates[0];\n lat += coordinates[1];\n }\n }\n return [lon / features.length, lat / features.length];\n }\n\n private showClusterPopover(cluster: Feature<Geometry>): void {\n if (!cluster) {\n this.popoverOverlay.setPosition(undefined);\n return;\n }\n // Only show cluster popover when auto zoom on cluster click is disabled or when the zoom level is sufficient.\n const zoom = this.map?.getView().getZoom();\n const show = !this.autoZoomClusterClick() || (zoom && zoom >= this.clusterClickZoom());\n if (!show) {\n return;\n }\n this.popoverOverlay.setOffset([0, 20]);\n this.popoverOverlay.setPosition(this.getFeatureCoordinate(cluster));\n const features = cluster.getProperties().features as Feature<Geometry>[];\n this.popover().render({\n component: this.clusterPopoverComponent(),\n mapPoints: features.map(f => f.getProperties() as MapPointMetaData),\n map: this.map\n });\n // Remember the selected cluster to avoid showing the a tooltip for cluster which has an open popover.\n this.selectedCluster = cluster;\n }\n}\n","<div #map class=\"map\"></div>\n<ng-content select=\"si-map-tooltip\">\n <si-map-tooltip />\n</ng-content>\n<si-map-popover #popover />\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiMapPopoverComponent } from './components/si-map-popover/si-map-popover.component';\nimport { SiMapTooltipComponent } from './components/si-map-tooltip/si-map-tooltip.component';\nimport { SiMapComponent } from './si-map.component';\n\n@NgModule({\n imports: [SiMapComponent, SiMapPopoverComponent, SiMapTooltipComponent],\n exports: [SiMapComponent]\n})\nexport class SiMapModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './components/index';\nexport * from './models/index';\nexport * from './services/map.service';\nexport * from './si-map.module';\nexport * from './si-map.component';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiMapModule } from './components/si-map/index';\n\n@NgModule({\n exports: [SiMapModule]\n})\nexport class SiMapsNgModule {}\n\n/**\n * @deprecated Use {@link SiMapsNgModule} instead. The `Simpl` prefix is deprecated and will be removed in v51.\n */\nexport { SiMapsNgModule as SimplMapsNgModule };\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './components/si-map/index';\nexport * from '@siemens/maps-ng/translate';\nexport * from './public-api.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["createEmptyExtent","defaultControls","applyMapboxStyle"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAGG;AACH;AACO,MAAM,qBAAqB,GAAG;AAC9B,MAAM,oBAAoB,GAAG;AAC7B,MAAM,mBAAmB,GAAG;AAC5B,MAAM,kBAAkB,GAAG;AAC3B,MAAM,YAAY,GAAG;AACrB,MAAM,kBAAkB,GAAG;AAC3B,MAAM,YAAY,GAAG;AACrB,MAAM,mBAAmB,GAAG;AAC5B,MAAM,cAAc,GAAG;AACvB,MAAM,2BAA2B,GAAG;AACpC,MAAM,0BAA0B,GAAG;AACnC,MAAM,0BAA0B,GAAG;AACnC,MAAM,mBAAmB,GAAG;AAC5B,MAAM,wBAAwB,GAAG;AAExC;AACO,MAAM,2BAA2B,GAAG;AAC3C;AACO,MAAM,qBAAqB,GAAG;AACrC;AACO,MAAM,mBAAmB,GAAG;AACnC;AACO,MAAM,wBAAwB,GAAG;AACjC,MAAM,aAAa,GAAG;AACtB,MAAM,YAAY,GAAG;AACrB,MAAM,UAAU,GAAG;;AC9B1B;;;AAGG;MAoBU,qBAAqB,CAAA;AAChC;;;;;;;AAOG;IACM,QAAQ,GAAG,KAAK,CACvB,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mDAAA,CAAqD,CAAC;iFACxE;AAED;;;;AAIG;IACM,cAAc,GAAG,KAAK,CAAC,EAAE;uFAAC;AAEnC,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;IACtC;IAEmB,aAAa,GAAG,MAAM,CAAC,CAAC;sFAAC;IACzB,aAAa,GAAG,MAAM,CAAW,EAAE;sFAAC;AACtC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,MAAyB,EAAA;AAClC,QAAA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE;AACzF,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CACvF;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,2BAA2B,EAAE,CAAC,CAAC,CAAC;IACrF;AAEQ,IAAA,YAAY,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE;AACvE,YAAA,OAAO,CAAA,EAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG;QACxD;AAEA,QAAA,OAAO,KAAK;IACd;uGAjDW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBlC,wOAQA,EAAA,MAAA,EAAA,CAAA,4nBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDUY,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA;;2FAKd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WACjB,CAAC,eAAe,CAAC,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,EAAA,QAAA,EAAA,wOAAA,EAAA,MAAA,EAAA,CAAA,4nBAAA,CAAA,EAAA;;;AErBhD;;;AAGG;MAQU,oCAAoC,CAAA;AAC/C,IAAA,OAAO,sBAAsB,CAC3B,SAA+C,EAC/C,OAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI;IACb;uGANW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAHhD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA,6BAAA;AACX,iBAAA;;;ACVD;;;AAGG;MAQU,6BAA6B,CAAA;AACxC,IAAA,OAAO,sBAAsB,CAC3B,SAAwC,EACxC,OAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI;IACb;uGANW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA,sBAAA;AACX,iBAAA;;;ACVD;;;AAGG;MA6BU,qBAAqB,CAAA;AACf,IAAA,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAa,SAAS;mFAAC;IACpD,SAAS,GAAG,MAAM,CAAgB,IAAI;kFAAC;IAEvC,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CACtD,kBAAkB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,CAAA,EAEhB,IAAI,EAAE,gBAAgB,EAAA,CAEzB;IAEkB,cAAc,GAAG,SAAS,CAAC,QAAQ,CACpD,gBAAgB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAEd,IAAI,EAAE,WAAW,EAAA,CAEpB;IAEkB,cAAc,GAAG,SAAS,CAAC,QAAQ,CACpD,gBAAgB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAEd,IAAI,EAAE,WAAW,EAAA,CAEpB;AAEM,IAAA,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAiB,EAAA;AACxD,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE;QAE/B,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC;QAClD;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAC/B;QAEA,IAAI,GAAG,EAAE;YACP,MAAM,SAAS,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACvE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG;AAC5E,YAAA,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,EAAE;AAC3C,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B;IACF;IAEQ,qBAAqB,CAC3B,SAAoB,EACpB,SAAgD,EAAA;QAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;;QAGvE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,GAAG,UAAU,EAAE,SAAS,CAAC;AACrF,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;IAChD;AAEQ,IAAA,aAAa,CAAC,SAAgD,EAAA;;QAEpE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE;QAClF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AACzF,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,aAAa,EAAE;IAC/E;uGA1DW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAOtB,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAOhB,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAOX,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDvB,s6BA0BA,EAAA,MAAA,EAAA,CAAA,2yCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCY,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oCAAoC,EAAA,QAAA,EAAA,+BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA;;2FAKlE,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;+BACE,gBAAgB,EAAA,OAAA,EACjB,CAAC,6BAA6B,EAAE,oCAAoC,CAAC,EAAA,eAAA,EAG7D,uBAAuB,CAAC,KAAK,EAAA,QAAA,EAAA,s6BAAA,EAAA,MAAA,EAAA,CAAA,2yCAAA,CAAA,EAAA;wEAGe,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAIpE,kBAAkB,EAAA,EAAA,GAClB;AACE,4BAAA,IAAI,EAAE;AACP,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAID,gBAAgB,EAAA,EAAA,GAChB;AACE,4BAAA,IAAI,EAAE;AACP,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAID,gBAAgB,EAAA,EAAA,GAChB;AACE,4BAAA,IAAI,EAAE;AACP,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtDL;;;AAGG;;ACIH,MAAM,OAAO,GAAG,CAAC,KAA0B,EAAE,IAAY,KAAY;AACnE,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5D,OAAO,GAAG,GAAG,GAAG,GAAG,EAAE;AACvB,CAAC;AAEM,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,MAAK;QACV,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC/D,QAAA,MAAM,MAAM,GAAqC;AAC/C,YAAA,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,iCAAiC,CAAC;AACvD,YAAA,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,6BAA6B,CAAC;AACtD,YAAA,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,6BAA6B,CAAC;AACtD,YAAA,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;AACpD,YAAA,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,6BAA6B,CAAC;AACtD,YAAA,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,8BAA8B,CAAC;AACxD,YAAA,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;AACrD,YAAA,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,6BAA6B;SACtD;QAED,OAAO;AACL,YAAA,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC;AAClD,YAAA,WAAW,EAAE,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC;AACpD,YAAA,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC;AAClD,YAAA,kBAAkB,EAAE,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC;YAC3D,MAAM;AACN,YAAA,YAAY,EAAE;AACZ,gBAAA,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;AACpE,gBAAA,OAAO,EAAE;AACP,oBAAA,OAAO,CAAC,KAAK,EAAE,gCAAgC,CAAC;AAChD,oBAAA,OAAO,CAAC,KAAK,EAAE,mCAAmC,CAAC;AACnD,oBAAA,OAAO,CAAC,KAAK,EAAE,6BAA6B,CAAC;AAC7C,oBAAA,OAAO,CAAC,KAAK,EAAE,kCAAkC,CAAC;AAClD,oBAAA,OAAO,CAAC,KAAK,EAAE,iCAAiC,CAAC;AACjD,oBAAA,OAAO,CAAC,KAAK,EAAE,6BAA6B,CAAC;AAC7C,oBAAA,OAAO,CAAC,KAAK,EAAE,8BAA8B;AAC9C;AACe;SACnB;IACH;CACD;;AC9CD;;;AAGG;AAIH;;AAEG;MACU,QAAQ,CAAA;AACF,IAAA,OAAO;AACP,IAAA,QAAQ;AAEzB,IAAA,WAAA,CAAY,cAAqD,QAAQ,EAAA;AACvE,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AAEjB,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACnC,MAAM,YAAY,GAAG,WAAW;AAChC,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,YAAY,CAAC;AAE7B,YAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,gBAAA,IAAI,CAAC,QAAQ,GAAG,YAA4B;gBAC5C,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,OAAO;YAC1D;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;gBACxB,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM;YACzD;QACF;aAAO;YACL,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AAC/C,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1B,gBAAA,IAAI,MAAM,IAAI,CAAC,EAAE;AACf,oBAAA,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC;gBACpF;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;AACrD,YAAA,CAAC,CAAC;QACJ;IACF;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;IAC5B;AAEA,IAAA,QAAQ,CAAC,OAAe,EAAA;;;QAGtB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACjC,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;AAC3C,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B;aAAO;YACL,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;QAClC;IACF;AACD;;AC7DD;;;AAGG;;ACIH,MAAM,OAAO,GAAqC;AAChD,IAAA,OAAO,EAAE;;;;;AAKV,CAAA;AACC,IAAA,OAAO,EAAE;;;;;;;AAOR,EAAA,CAAA;AACD,IAAA,IAAI,EAAE;;;;;;;;;AASL,EAAA,CAAA;AACD,IAAA,OAAO,EAAE;;;;;;;;;AASR,EAAA,CAAA;AACD,IAAA,MAAM,EAAE;;;;;;;;;AASP,EAAA,CAAA;AACD,IAAA,OAAO,EAAE;;;;;;;;;;AAUR,EAAA,CAAA;AACD,IAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;AACD,IAAA,OAAO,EAAE;;;;;;;;;AAST,CAAA;CACD;AAEM,MAAM,SAAS,GAAG,CAAC,MAAwB,EAAE,KAAgB,KAAY;IAC9E,OAAO;;;;AAIY,mBAAA,EAAA,KAAK,CAAC,SAAS,CAAA;AACf,mBAAA,EAAA,KAAK,CAAC,SAAS,CAAA;AACjB,iBAAA,EAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;;;IAGnC,OAAO,CAAC,MAAM,CAAC;;CAElB;AACD,CAAC;;AClGD;;;AAGG;AACH;MA2Ca,UAAU,CAAA;IACb,UAAU,GAA4B,EAAE;IACxC,iBAAiB,GAA4B,EAAE;IAC/C,eAAe,GAA4B,EAAE;AAC7C,IAAA,QAAQ;AAER,IAAA,MAAM;IAEN,gBAAgB,GAA2B,EAAE;IAC7C,mBAAmB,GAA2B,EAAE;IAExD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;IAC/B;AAEQ,IAAA,aAAa,CAAC,SAAiB,EAAE,SAAiB,EAAE,QAAgB,EAAA;QAC1E,MAAM,QAAQ,GAAG,CAAA,EAAG,SAAS,IAAI,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;AACxD,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QACxC;QAEA,IAAI,WAAW,GAAG,EAAE;QACpB,IAAI,WAAW,GAAG,EAAE;QACpB,IAAI,SAAS,GAAG,CAAC;QACjB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,YAAY,GAChB,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI;AAC3E,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,SAAS,EAAE;AACpE,oBAAA,IAAI,SAAS,GAAG,CAAC,IAAI,QAAQ,EAAE;AAC7B,wBAAA,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK;AAC5C,8BAAE;AACF,8BAAE,CAAC,WAAW,CAAC,MAAM,GAAG;kCAClB,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC;AACxC,kCAAE,WAAW,IAAI,KAAK;AAC5B,wBAAA,WAAW,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,IAAI,WAAW;wBACtD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,WAAW;oBACvD;yBAAO;AACL,wBAAA,WAAW,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,IAAI,WAAW;oBACxD;oBACA,WAAW,GAAG,EAAE;AAChB,oBAAA,SAAS,EAAE;gBACb;AACA,gBAAA,WAAW,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,EAAE,IAAI,YAAY;YACxD;YACA,IAAI,WAAW,EAAE;AACf,gBAAA,WAAW,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,IAAI,WAAW;YACxD;QACF;aAAO;YACL,WAAW,GAAG,SAAS;QACzB;QAEA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,WAAW;IACvD;IAEQ,iBAAiB,CACvB,IAAA,GAAe,EAAE,EACjB,SAAiB,EACjB,QAAgB,EAChB,WAA6B,EAC7B,YAA8B,EAAA;AAE9B,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA,EAAI,WAAW,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,YAAY,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,YAAY,CAAC,CAAC,CAAC,EAAE;AACxI,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAC3C;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC;QACjE,MAAM,MAAM,GAAG,CAAC;QAChB,MAAM,YAAY,GAAG,CAAC;QACtB,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;QACpC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;AACrC,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA;AACE,gBAAA,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACxB,gBAAA,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;gBACjC,KAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACxB,gBAAA,OAAO,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;gBACnD,KAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAClC,aAAA;AACD,YAAA;gBACE,OAAO,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;AAC9C,gBAAA,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU;gBACrC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ;AACjC,aAAA;AACD,YAAA;gBACE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;AAC7C,gBAAA,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU;gBACrC,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ;AAChC;SACO;AAEV,QAAA,QAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAC/D,MAAM,IACJ,IAAI,IAAI,CAAC;AACP,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AAC/C,YAAA,MAAM,EAAE,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,YAAA,OAAO,EAAE;AACP,gBAAA,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC;AACvD,gBAAA,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC;AACvD,gBAAA,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC;AACvD,gBAAA,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,YAAY,GAAG;AACvD,aAAA;AACD,YAAA,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,YAAA,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,YAAA,QAAQ,EAAE;SACX,CAAC,CACL;IACH;AAEQ,IAAA,YAAY,GAA6B,MAAM,SAAS;IAExD,OAAO,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IACnC;AAEA,IAAA,eAAe,CAAC,QAAmC,EAAA;QACjD,IAAI,CAAC,YAAY,GAAG,QAAQ,KAAK,MAAM,SAAS,CAAC;IACnD;AAEA,IAAA,QAAQ,CAAC,WAA8D,EAAA;QACrE,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,KAAK,EAAE;QACpC,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,MAAkB,EAAE,gBAAgB,GAAG,KAAK,EAAA;QACzD,OAAO,MAAM,CAAC,GAAG,CACf,KAAK,IACH,IAAI,OAAO,CAAC;AACV,YAAA,QAAQ,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;AAEvD,YAAA,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,YAAA,KAAK,EAAE,gBAAgB,GAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAmB,GAAG,SAAS;YAC5E,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,KAAK,EAAE,KAAK,CAAC;AACd,SAAA,CAAC,CACL;IACH;AAEA;;;;;;AAMG;AACH,IAAA,YAAY,CACV,QAAmB,EACnB,eAAwB,EACxB,eAAuB,EACvB,UAAmB,EAAA;QAEnB,OAAO,IAAI,eAAe,CAAC;AACzB,YAAA,SAAS,EAAE,kBAAkB;AAC7B,YAAA,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI,OAAO,CAAC;AAClB,gBAAA,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,IAAI,CAAC,2BAA2B,CAAC,eAAe,EAAE,mBAAmB,CAAC;gBAChF,WAAW,EAAE,mBAAmB,GAAG,CAAC;gBACpC,MAAM,EAAE,IAAI,YAAY,CAAC;oBACvB;iBACD;aACF,CAAC;YACF,iBAAiB,EAAE,eAAe,GAAG,kBAAkB,GAAG,CAAC;YAC3D,KAAK,EAAE,CAAC,OAAgB,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO;AAC1D,SAAA,CAAC;IACJ;AAEA;;;;AAIG;AACH,IAAA,WAAW,CACT,QAAmB,EACnB,UAAmB,EACnB,eAAwB,KAAK,EAAA;QAE7B,OAAO,IAAI,WAAW,CAAC;AACrB,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI,YAAY,CAAC;gBACvB,QAAQ;AACR,gBAAA,KAAK,EAAE;aACR,CAAC;YACF,KAAK,EAAE,CAAC;AACN,kBAAE,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,OAAkB,EAAE,KAAK,EAAE,QAAQ;AACrE,kBAAE;AACL,SAAA,CAAC;IACJ;IAEA,UAAU,CACR,QAAmB,EACnB,UAAmB,EACnB,cAAsB,EACtB,QAAgB,EAChB,YAAoB,EAAA;AAEpB,QAAA,MAAM,aAAa,GAAG,YAAY,EAAE,SAAS,EAA6B;QAC1E,OAAO,IAAI,WAAW,CAAC;AACrB,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI,YAAY,CAAC;gBACvB,QAAQ;AACR,gBAAA,KAAK,EAAE;aACR,CAAC;AACF,YAAA,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,IACZ,IAAI,CAAC,aAAa,CAChB,OAAyB,EACzB,QAA4B,EAC5B,cAAc,EACd,QAAQ,EACR,aAAa,EACb,KAAK;AAEV,SAAA,CAAC;IACJ;AAEA;;;;AAIG;AACH,IAAA,eAAe,CAAC,OAAgB,EAAA;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,QAAQ;QACjD,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;QACtD;QACA,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM;AACnD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM;AAE5B,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;QACtD;QAEA,IAAI,KAAK,GAAY,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAEhD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,KAAK,CAAC;oBACR,KAAK,EAAE,IAAI,MAAM,CAAC;AAChB,wBAAA,MAAM,EAAE,mBAAmB;wBAC3B,IAAI,EAAE,IAAI,IAAI,CAAC;AACb,4BAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;yBACnB,CAAC;wBACF,MAAM,EAAE,IAAI,MAAM,CAAC;AACjB,4BAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;AAC7B,4BAAA,KAAK,EAAE;yBACR;qBACF;iBACF,CAAC;AACF,gBAAA,IAAI,KAAK,CAAC;oBACR,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAS,CAAC;oBACrD,IAAI,EAAE,IAAI,IAAI,CAAC;AACb,wBAAA,IAAI,EAAE,IAAI,GAAG,qBAAqB,GAAG,CAAA,EAAG,qBAAqB,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAClF,wBAAA,SAAS,EAAE,OAAO;AAClB,wBAAA,SAAS,EAAE,QAAQ;AACnB,wBAAA,YAAY,EAAE,QAAQ;AACtB,wBAAA,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AAC/C,wBAAA,IAAI,EAAE;qBACP;iBACF;aACF;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK;QACrC;AAEA,QAAA,OAAO,KAAK;IACd;AAEA;;;;;AAKG;IACH,eAAe,CAAC,OAAgB,EAAE,OAAgB,EAAE,QAAmB,EAAE,KAAK,GAAG,KAAK,EAAA;QACpF,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,QAAQ;AACrD,QAAA,MAAM,IAAI,GAAG,OAAO,IAAI,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO;QAC3D,MAAM,MAAM,GAAkB,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM;QAEzD,IAAI,IAAI,EAAE;YACR,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC;YACrE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAEhC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,KAAK,GAAG;oBACN,IAAI,KAAK,CACP;AACE,0BAAE;AACF,0BAAE;AACE,4BAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAS,EAAE,MAAM;yBACxD;iBAER;AAED,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK;YAC9B;AAEA,YAAA,OAAO,KAAK;QACd;QAEA,OAAO;AACL,YAAA,IAAI,KAAK,CAAC;gBACR,MAAM,EAAE,IAAI,MAAM,CAAC;AACjB,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;AAC7B,oBAAA,KAAK,EAAE;iBACR;aACF;SACF;IACH;AAEA,IAAA,aAAa,CACX,OAAuB,EACvB,QAA0B,EAC1B,cAAsB,EACtB,QAAgB,EAChB,aAAuC,EACvC,KAAK,GAAG,KAAK,EAAA;AAEb,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;;QAGzE,MAAM,KAAK,GAAiB,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK;AAEzD,QAAA,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACzB,YAAA,OAAO,YAAY;QACrB;;AAGA,QAAA,IAAI,WAAW,GAAG,CAAC,CAAC,aAAa;QAEjC,IAAI,aAAa,EAAE;YACjB,IAAI,eAAe,GAAG,EAAE;;YAGxB,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,IAAG;AAC5C,gBAAA,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACzC,gBAAA,IAAI,eAAe,EAAE,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;oBACnE,WAAW,GAAG,KAAK;gBACrB;AACF,YAAA,CAAC,CAAC;QACJ;;QAGA,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;YAC1E,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAErC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CACxC,KAAK,EAAE,IAAI,EACX,cAAc,EACd,QAAQ,EACR,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAC3B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAC9B;gBACD,KAAK,GAAG,WAAW,CAAC,GAAG,CACrB,UAAU,IACR,IAAI,KAAK,CAAC;AACR,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC,CACL;AAED,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK;YACnC;AAEA,YAAA,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,KAAK,CAAC;QACpC;AAEA,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,eAAe,CAAC,OAAgB,EAAA;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,MAAM;AAC9C,QAAA,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI;QAC/B,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9C,QAAA,MAAM,cAAc,GAAG,CAAC,UAAU,IAAI,UAAU,KAAK,QAAQ,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC;AAC9E,QAAA,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC;IAC5B;AAEA,IAAA,aAAa,CAAC,OAAgB,EAAA;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,MAAM;AAC9C,QAAA,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI;QAC/B,MAAM,KAAK,GAAG,CAAC,UAAU,KAAK,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC;AACpE,QAAA,MAAM,MAAM,GACV,CAAC,UAAU,IAAI,UAAU,KAAK;AAC5B,cAAE;cACA,UAAU,KAAK;AACf,kBAAE;AACF,kBAAE,cAAc,GAAG,CAAC,GAAG,KAAK;AAClC,QAAA,MAAM,KAAK,GACT,CAAC,UAAU,IAAI,UAAU,KAAK;AAC5B,cAAE;cACA,UAAU,KAAK;AACf,kBAAE;AACF,kBAAE,cAAc,GAAG,CAAC,GAAG,KAAK;AAClC,QAAA,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB;IAEQ,eAAe,CAAC,QAAmB,EAAE,QAAkB,EAAA;AAC7D,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAErE,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;AACtB,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,MAAM,EAAE,mBAAmB;AAC3B,YAAA,UAAU,EAAE,mBAAmB;YAC/B,MAAM;YACN,IAAI;AACJ,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,IAAI,MAAM,CAAC;AACjB,gBAAA,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,eAAe;AACnE,gBAAA,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,qBAAqB,GAAG;aACpD,CAAC;AACF,YAAA,QAAQ,EAAE;SACJ,CAAC,CAAC;AAEV,QAAA,OAAO,KAAK;IACd;IAEQ,mBAAmB,CACzB,QAAmB,EACnB,QAAkB,EAAA;AAElB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,MAAM,MAAM,GAA2B,EAAE;QACzC,MAAM,SAAS,GAAa,EAAE;QAC9B,MAAM,eAAe,GAAa,EAAE;AAEpC,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAG;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK;;AAG3B,YAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,gBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB,gBAAA,eAAe,CAAC,IAAI,CAClB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAC3E;gBACD;YACF;AAEA,YAAA,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;gBACnB,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACvC;iBAAO;AACL,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACrB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,IAAI,GAAa,EAAE;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;QACrE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;;AAGzD,QAAA,MAAM,MAAM,GAAG;YACb,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,YAAA,GAAG;SACJ;AAED,QAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IACzB;AAEA;;AAEG;IACK,2BAA2B,CAAC,QAAgB,EAAE,aAAqB,EAAA;AACzE,QAAA,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;IACzC;AAEQ,IAAA,kBAAkB,CAAC,IAAc,EAAE,MAAgB,EAAE,IAAY,EAAA;AACvE,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,wBAAwB;AAEpD,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,IAAI,QAAQ,GAAG,KAAK,GAAG,YAAY;;YAGnC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAChC,QAAQ,GAAG,CAAC;YACd;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrB;IACF;AAEQ,IAAA,cAAc,CACpB,OAAgB,EAChB,QAAkB,EAClB,MAAsB,EAAA;QAEtB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC9E;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AAE5D,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACjC;AAEA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YAC1B,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;QAC/C;AAEA,QAAA,OAAO,SAAS;IAClB;AAEA;;;;;AAKG;AACK,IAAA,cAAc,CAAC,OAAgB,EAAE,QAAkB,EAAE,MAAsB,EAAA;AACjF,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK;QAC7C,IAAI,OAAO,EAAE;AACX,YAAA,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpC;AAEA,QAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACjB,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK;QACtB;AAEA,QAAA,IAAI,MAAM,EAAE,MAAM,EAAE;YAClB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1C;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,YAAY,CAAC,KAAa,EAAA;QAChC,OAAO,IAAI,MAAM,CAAC;AAChB,YAAA,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,IAAI,IAAI,CAAC;gBACb;aACD,CAAC;YACF,MAAM,EAAE,IAAI,MAAM,CAAC;AACjB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;AAC7B,gBAAA,KAAK,EAAE;aACR;AACF,SAAA,CAAC;IACJ;IAEQ,aAAa,CAAC,KAAa,EAAE,QAA4B,EAAA;AAC/D,QAAA,MAAM,gBAAgB,GAAgB;YACpC,KAAK;AACL,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,KAAK,EAAE;SACR;QAED,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,gBAAgB,EAAE,GAAG,QAAQ,EAAE,CAAC;IACvD;IAEQ,oBAAoB,CAAC,KAAgB,EAAE,MAAsB,EAAA;QACnE,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO;QAC7B;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC5B,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAO,CAAC;QACrC;QACA,OAAO,MAAM,CAAC,KAAK;IACrB;AAEQ,IAAA,eAAe,CAAC,MAAqB,EAAA;AAC3C,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;AAE5D,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,MAAO,EAAE,IAAI,CAAC,KAAK,CAAC;QACjD,MAAM,MAAM,GAAG,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC;QAEvD,OAAO,IAAI,IAAI,CAAC;AACd,YAAA,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACd,KAAK,EAAE,aAAa;AACpB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACrB,YAAA,GAAG,EAAE;AACN,SAAA,CAAC;IACJ;uGA/lBW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC9CD;;;AAGG;AAOG,MAAO,aAAc,SAAQ,MAAM,CAAA;AAC/B,IAAA,WAAW;AACX,IAAA,OAAO;AACP,IAAA,iBAAiB;AAEzB,IAAA,WAAA,CAAY,OAKX,EAAA;QACC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAEvC,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB;AAClD,QAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD;AAEA,IAAA,aAAa,CAAC,CAAc,EAAA;QAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;;QAGhC,MAAM,OAAO,GAAG,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACpC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAC7B;IACF;AAEA,IAAA,aAAa,CAAC,OAAkB,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAGA,WAAiB,EAAE;AAClC,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,IAAG;AACxB,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE;YACtC,IAAI,QAAQ,EAAE;gBACZ,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;YACtC;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,EAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE;AACnC,YAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE;AACjC,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC;IACJ;AACD;;ACzDD;;;AAGG;MA8EU,cAAc,CAAA;AACzB;;AAEG;AACM,IAAA,MAAM,GAAG,KAAK;0FAAc;AACrC;;AAEG;AACM,IAAA,OAAO,GAAG,KAAK;2FAAO;AAC/B;;AAEG;AACM,IAAA,aAAa,GAAG,KAAK;iGAAa;AAC3C;;;;AAIG;IACM,iBAAiB,GAAG,KAAK,CAAC,WAAW;0FAAC;AAC/C;;;;AAIG;IACM,eAAe,GAAG,KAAK,CAAC,KAAK;wFAAC;AACvC;;;;AAIG;IACM,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;AAC/B;;;;;;AAMG;IACM,WAAW,GAAG,KAAK,CAAwC,QAAQ;oFAAC;AAC7E;;;;;AAKG;AACM,IAAA,gBAAgB,GAAG,KAAK;oGAA2B;AAC5D;;;;;AAKG;AACM,IAAA,SAAS,GAAG,KAAK;6FAAO;AACjC;;;;;AAKG;IACM,qBAAqB,GAAG,KAAK,CAAC,KAAK;8FAAC;AAC7C;;;;;AAKG;IACM,qBAAqB,GAAG,KAAK,CAAC,IAAI;8FAAC;AAE5C;;;;;AAKG;IACM,qBAAqB,GAAG,KAAK,CAAC,KAAK;8FAAC;AAE7C;;;;AAIG;AACM,IAAA,WAAW,GAAG,KAAK;+FAAU;AACtC;;;;AAIG;IACM,4BAA4B,GAAG,KAAK,CAAC,KAAK;qGAAC;AACpD;;;;AAIG;IACM,eAAe,GAAG,KAAK,CAAS,wBAAwB;wFAAC;AAClE;;;;;AAKG;IACM,iBAAiB,GAAG,KAAK,CAAS,2BAA2B;0FAAC;AACvE;;;;;AAKG;IACM,gBAAgB,GAAG,KAAK,CAAS,0BAA0B;yFAAC;AACrE;;;;AAIG;IACM,gBAAgB,GAAG,KAAK,CAAS,0BAA0B;yFAAC;AACrE;;;;AAIG;IACM,UAAU,GAAG,KAAK,CAAS,mBAAmB;mFAAC;AACxD;;;;AAIG;IACM,oBAAoB,GAAG,KAAK,CAAC,KAAK;6FAAC;AAC5C;;;;AAIG;IACM,oBAAoB,GAAG,KAAK,CAAC,IAAI;6FAAC;AAC3C;;AAEG;AACM,IAAA,gBAAgB,GAAG,KAAK;oGAAa;AAE9C;;AAEG;AACM,IAAA,uBAAuB,GAAG,KAAK;2GAAa;AACrD;;AAEG;AACM,IAAA,qBAAqB,GAAG,KAAK;yGAAO;AAC7C;;;;AAIG;IACM,mBAAmB,GAAG,KAAK,CAAC,IAAI;4FAAC;AAE1C;;;;;AAKG;IACM,iBAAiB,GAAG,KAAK,CAAmC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;0FAAC;AACtF;;;;;AAKG;IACM,eAAe,GAAG,KAAK,CAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;wFAAC;AAC5D;;;;;AAKG;IACM,iBAAiB,GAAG,KAAK,CAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;0FAAC;AAC9D;;;;AAIG;IACM,UAAU,GAAG,KAAK,CAAC,IAAI;mFAAC;AACjC;;;;;;AAMG;IACM,gBAAgB,GAAG,KAAK,CAAC,KAAK;yFAAC;AACxC;;;;;;;;AAQG;IACM,kBAAkB,GAAG,KAAK,CAAC,EAAE;2FAAC;AACvC;;;;;;;AAOG;IACM,aAAa,GAAG,KAAK,CAAC,CAAC;sFAAC;AACjC;;AAEG;IACM,cAAc,GAAG,MAAM,EAAc;AAC9C;;AAEG;IACM,eAAe,GAAG,MAAM,EAAQ;AAEtB,IAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,qBAAqB;gFAAC;IACnD,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAyB,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EACtF,IAAI,EAAE,UAAU,EAAA,CAChB;IACiB,cAAc,GAAG,SAAS,CAAC,qBAAqB;uFAAC;IACjD,gBAAgB,GAAG,YAAY,CAAC,qBAAqB;yFAAC;AACtD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,cAAc,EAAG;gFAAC;AAC3E,IAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAA0B,KAAK;qFAAC;;AAEpF,IAAA,GAAG;AAEH,IAAA,cAAc;AACd,IAAA,cAAc;;IAEd,SAAS,GAAG,KAAK;;IAEjB,QAAQ,GAAc,EAAE;AACxB,IAAA,QAAQ;AACR,IAAA,aAAa;IACH,iBAAiB,GAAG,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,2CAAA,CAA6C,CAAC;IACnF,WAAW,GAAG,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC;IACnE,YAAY,GAAG,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC;IACtE,kBAAkB,GAAG,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,4CAAA,CAA8C,CAAC;AACrF,IAAA,kBAAkB;AACpB,IAAA,eAAe;IACf,SAAS,GAAwB,SAAS;AAEjC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;;AAGvB,IAAA,gBAAgB,GAC/B,MAAM,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrF,MAAM,CAAC,oBAAoB,CAAC;AAE9B,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACvD,YAAA,IAAI,CAAC,iBAAiB;AACtB,YAAA,IAAI,CAAC,WAAW;AAChB,YAAA,IAAI,CAAC,YAAY;AACjB,YAAA,IAAI,CAAC;AACN,SAAA,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACjE;;AAEQ,IAAA,WAAW,GAAG,CAAC,KAAiB,KAAa;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;AAClC,QAAA,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa;AACxD,IAAA,CAAC;AAED,IAAA,WAAW,CAAC,OAA4B,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;AAEA,QAAA,IAAI,OAAO,CAAC,WAAW,EAAE;YACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;AAE5C,YAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,CAAC;QACzC;AAEA,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC;QAC1C;QAEA,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE;AAC5C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,iBAAA,SAAS;AACT,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,CAA8B;YACtF,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,OAAO,CAAC,OAAO,EAAE;;;AAGnB,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;oBAC9B,MAAM,QAAQ,GACZ,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,0BAAE,IAAI,OAAO,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO;0BACjF,EAAE;oBACR,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAC5B,YAAY,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CACvD;gBACH;AACA,gBAAA,IAAI,OAAO,CAAC,aAAa,EAAE;;AAEzB,oBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;gBAClF;YACF;iBAAO;;;AAGL,gBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7D;QACF;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YACjC,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC5D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;QACrE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAEvC,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACpC;IAEA,kBAAkB,GAAA;;;AAGhB,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,GAAI,CAAC,UAAU,EAAE,CAAC;QAC7D;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC;IAChC;AAGA,IAAA,qBAAqB,CAAC,KAAY,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAE,KAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACvE;AAEA,IAAA,aAAa,CAAC,IAAa,EAAA;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACzC;AAEQ,IAAA,wBAAwB,GAAG,MAAW,EAAE,CAAC;IAEhC,gBAAgB,GAAG,MAAW;;AAE7C,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,gBAAgB,KAAM,IAAI,CAAC,GAAW,CAAC,WAAW,EAAE;AACzE,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACxE;QAEA,IAAI,CAAC,wBAAwB,EAAE;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,gBAAgB,CAAA,KAAA,CAAO,CAAC;QACxE,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACvD,QAAA,IAAI,CAAC,wBAAwB,GAAG,MAC9B,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC9D,IAAA,CAAC;AAED;;AAEG;IACK,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;;AAGA,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;AAG5B,QAAA,IAAI,CAAC,GAAW,CAAC,WAAW,GAAG,gBAAgB;;QAGhD,IAAI,CAAC,GAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAG;AACpC,YAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE;AAChC,gBAAA,IAAI,MAAM,EAAE,eAAe,KAAK,SAAS,EAAE;AACzC,oBAAA,MAAM,CAAC,eAAe,GAAG,gBAAgB;oBACzC,MAAM,CAAC,OAAO,EAAE;gBAClB;AACA,gBAAA,IAAI,MAAM,YAAY,OAAO,EAAE;AAC7B,oBAAA,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE;gBAC/B;qBAAO;oBACL,MAAM,EAAE,OAAO,EAAE;gBACnB;gBACA,KAAK,CAAC,OAAO,EAAE;YACjB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;IACvB;AAEA;;AAEG;IACH,IAAI,GAAA;QACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa;QACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa;AACtD,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,OAAO,EAAE;SACV;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CACtC,gBAAgB,EAChB,YAAY,EACZ,IAAI,CAAC,gBAAgB,EAAE,EACvB,IAAI,CACL;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CACtC,gBAAgB,EAChB,YAAY,EACZ,IAAI,CAAC,gBAAgB,EAAE,CACxB;QAED,MAAM,QAAQ,GAAGC,QAAe,CAAC;AAC/B,YAAA,kBAAkB,EAAE;AAClB,gBAAA,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;AAChC,gBAAA,eAAe,EAAE,oBAAoB;AACrC,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,iBAAiB,EAAE;AACpB,aAAA;AACD,YAAA,WAAW,EAAE;AACX,gBAAA,WAAW,EAAE,EAAE;gBACf,cAAc,EAAE,IAAI,CAAC,WAAW;AAChC,gBAAA,eAAe,EAAE,cAAc;AAC/B,gBAAA,YAAY,EAAE,EAAE;gBAChB,eAAe,EAAE,IAAI,CAAC,YAAY;AAClC,gBAAA,gBAAgB,EAAE;AACnB,aAAA;AACD,YAAA,aAAa,EAAE;AACb,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,gBAAgB,EAAE;AACnB;AACF,SAAA,CAAC;QAEF,MAAM,gBAAiB,SAAQ,OAAO,CAAA;AACpC,YAAA,WAAA,CAAY,OAAgD,EAAA;gBAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,gBAAA,MAAM,CAAC,SAAS,GAAG,oBAAoB;AACvC,gBAAA,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;gBAE5B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,gBAAA,OAAO,CAAC,SAAS,GAAG,2CAA2C;AAC/D,gBAAA,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;AAE3B,gBAAA,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAE3B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC3D;AACD;AAED,QAAA,QAAQ,CAAC,IAAI,CACX,IAAI,gBAAgB,CAAC;YACnB,KAAK,EAAE,IAAI,CAAC,kBAAkB;YAC9B,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvD;qBAAO;;oBAEL,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1C;YACF;AACD,SAAA,CAAC,CACH;AAED,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAChD,QAAA,IAAI,gBAAgB,EAAE,QAAQ,EAAE;AAC9B,YAAA,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1D;AAEA,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;YACjB,QAAQ;AACR,YAAA,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC;AACpD,YAAA,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW;AAC3B,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AAEpE,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAE7C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE;QACvC,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;QACxD;QAEA,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,MAAM,EAAE,MAAM,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjF;QACA,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC;QAE5D,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEQ,WAAW,GAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE;AAC/C,QAAA,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtC;;IAGQ,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E;IACF;AAEA;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,KAAY;AAChB,QAAA,IAAI,UAA6B;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;AACrF,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAC/C,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,eAAe,EAAE,EACtB,IAAI,CAAC,eAAe,EAAE,EACtB,IAAI,CAAC,UAAU,EAAE,CAClB;AAED,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,aAAa,CAAC;gBAC1C,OAAO,EAAE,IAAI,CAAC,gBAAgB;gBAC9B,WAAW,EAAE,IAAI,CAAC,oBAAoB;gBACtC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;;AAEzC,gBAAA,KAAK,EAAE,CAAC,OAAoB,KAAK,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAkB;AACpF,aAAA,CAAC;YACF,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAEjD,IAAI,UAAU,EAAE;AACd,gBAAA,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CACrC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,aAAa,EAAE,EACpB,YAAY,CACb;YACH;YACA,KAAK,GAAG,YAAY;QACtB;aAAO;AACL,YAAA,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACrE,IAAI,UAAU,EAAE;gBACd,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CACrC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,aAAa,EAAE,CACrB;YACH;QACF;AACA,QAAA,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC;AAEnC,QAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;QACzB,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC;QAChC;IACF;AAEA;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CACvC,IAAI,OAAO,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,EAClF,IAAI,CAAC,UAAU,EAAE,CAClB;YACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACpC,YAAA,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,GAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChE;IACF;IAEQ,QAAQ,CAAC,IAAa,EAAE,WAAoB,EAAA;AAClD,QAAA,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,EAAE;AAC5E,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC;AACnC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;QACA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;QAE5C,IAAI,CAAC,kBAAkB,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACxD;AAEQ,IAAA,kBAAkB,CAAC,UAAoB,EAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAC5B,IAAI,CAAC;AACH,cAAE,SAAS;AACV,aAAA,QAAQ;aACR,OAAO,CAAC,KAAK,IAAG;AACf,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE;gBAC7C,KAAmC,CAAC,QAAQ,CAC1C,KAAmC,CAAC,QAAQ,EAAE,CAChD;YACH;QACF,CAAC,CAAC,CACL;IACH;AAEA;;;;;AAKG;AACH,IAAA,WAAW,CAAC,IAAc,EAAE,GAAY,EAAE,SAAkB,EAAA;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;QAEA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAMC,KAAgB,CAAC,IAAI,CAAC,GAAI,EAAE,SAAS,CAAC,CAAC;QAC7E;aAAO,IAAI,GAAG,EAAE;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAa;AACzD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,KAAI;AAC9B,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;AAC9B,oBAAA,IAAI,CAAC,GAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC9B;AACF,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1C;IACF;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,SAAc,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;QACA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAC5BA,KAAgB,CAAC,IAAI,CAAC,GAAI,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,IAAG;YACvD,MAAM,GAAG,GAAG,UAAiB;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAa;AACpD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,KAAI;AAC9B,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;;oBAE7B,KAAK,CAAC,SAAS,EAAU,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AACrD,oBAAA,IAAI,CAAC,GAAG,GAAG,GAAG;gBAChB;AACF,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CACH;IACH;AAEA;;;;;AAKG;AACH,IAAA,aAAa,CACX,SAAsB,EACtB,QAAqB,EACrB,gBAA0C,EAC1C,SAAmB,EAAA;QAEnB,QACE,gBAAgB,EAAE,OAAO;AACzB,YAAA,IAAI,OAAO,CAAC;AACV,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,WAAW,EAAE,QAAQ;;AAErB,gBAAA,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,SAAS,GAAG,IAAI,GAAG;AAC7B,aAAA,CAAC;IAEN;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,KAAsB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;QAEA,MAAM,aAAa,GAAkB,EAAE;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAC7C,KAAK,CAAC,KAAK,EACX,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,EACjD;AACE,YAAA,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,IAAI,CAAC;AACnB,SAAA,CACF;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE;QAC3C,IAAI,OAAO,EAAE;;YAEX,OAAO,CAAC,KAAK,CAAC,MAAM;gBAClB,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,qBAAqB,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE;;YAE5F,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnD,gBAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,CAAC,EAAE;AAC1B,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;gBAC5C;qBAAO;AACL,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;gBAC5C;gBACA;YACF;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC;IACrD;;AAGA,IAAA,cAAc,CAAC,KAAoB,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;YACnD;QACF;AACA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC3C,YAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,CAAC,EAAE;gBAC1B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpC;YACF;QACF;IACF;IAEQ,aAAa,CAAC,QAAoB,EAAE,OAAiB,EAAA;QAC3D,IAAI,KAAK,GAAG,KAAK;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,MAAM,EAAE;YACvC,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,QAAQ,EAAE,MAAM,KAAK,CAAC,EAAE;gBAC1D,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9C;iBAAO,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;gBAClF,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC3D;QACF;QACA,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;QAC5C;IACF;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,KAAsB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;QACA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACxD,YAAA,MAAM,UAAU,GACd,IAAI,CAAC,cAAc,EAAE,CAAC,aACvB,CAAC,iBAAkB,CAAC,qBAAqB,EAAE;YAC5C,MAAM,MAAM,GAAI,IAAI,CAAC,YAAY,EAAE,CAAC,aAA6B,CAAC,qBAAqB,EAAE;YACzF,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;YAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG;YACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG;AAC7C,YAAA,IACE,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACtB,gBAAA,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK;AACvB,gBAAA,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,EACxB;gBACA;YACF;QACF;QACA,MAAM,aAAa,GAAkB,EAAE;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CACpD,KAAK,CAAC,KAAK,EACX,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,EACjD;YACE,WAAW,EAAE,IAAI,CAAC;AACnB,SAAA,CACF;QACD,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;AAC1C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,OAAQ,CAAC;AAC/C,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;YACrC;AAAO,iBAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,gBAAA,IAAI,eAAe,CAAC,CAAC,CAAC,YAAY,aAAa,EAAE;oBAC/C,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,aAAa,EAAE;gBACtB;AAAO,qBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AACvC,oBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACzE,oBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;gBACrC;YACF;QACF;aAAO;YACL,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AAEQ,IAAA,aAAa,CAAC,QAAoB,EAAA;AACxC,QAAA,MAAM,MAAM,GAAe,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAG;AAClD,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,aAAa,EAAE;AAC/B,YAAA,OAAO,KAAK,CAAC,IAAI,IAAK,KAAkB;AAC1C,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,eAA0B,EAAA;AACpC,QAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,eAAe,CAAC;IACzD;AAEA;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,OAAO,KAAK;IACd;AAEA;;;AAGG;IACH,eAAe,CAAC,IAAiB,EAAE,aAA6B,EAAA;AAC9D,QAAA,IAAI,IAAI,YAAY,OAAO,EAAE;YAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ;AAClD,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,YAAY,EAAE;gBAClC,IAAI,aAAa,EAAE;AACjB,oBAAA,aAAa,CAAC,OAAO,GAAG,IAAI;gBAC9B;AACA,gBAAA,OAAO,YAAY;YACrB;YACA,OAAO,CAAC,IAAI,CAAC;QACf;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;;;AAIG;AACH,IAAA,YAAY,CAAC,MAAkB,EAAE,SAAiB,EAAE,aAAa,GAAG,IAAI,EAAA;AACtE,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC;QACnD;aAAO;YACL,MAAM,QAAQ,GAAG;AACd,iBAAA,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC;iBAC1C,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS;AACnC,iBAAA,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC;QACzD;IACF;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,QAAmB,EAAE,SAAiB,EAAE,aAAa,GAAG,IAAI,EAAA;AACzE,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpB,YAAA,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC1B;QACA,MAAM,WAAW,GAAiB,EAAE;AACpC,QAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC/C,IAAI,UAAU,EAAE;AACd,gBAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B;QACF;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;IACvF;AAEA;;;;AAIG;AACH,IAAA,aAAa,CAAC,UAAsB,EAAE,SAAiB,EAAE,aAAa,GAAG,IAAI,EAAA;AAC3E,QAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1F;IAEQ,iBAAiB,CACvB,WAAyB,EACzB,OAAe,EACf,OAAO,GAAG,IAAI,EACd,OAAkB,EAAA;AAElB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YACjC,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE;gBAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AAC7C,oBAAA,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,kBAAkB,GAAG,SAAS;oBACxE,OAAO;oBACP;AACD,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;AACH,IAAA,OAAO,CAAC,MAAkB,EAAE,cAAc,GAAG,IAAI,EAAA;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC7E;IAEQ,SAAS,CAAC,MAAkB,EAAE,cAAuB,EAAA;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAE7B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,KAAK,EAAE;QAEZ,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAa;AACzD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAE/E,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,KAAI;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE;YAEhC,IAAI,MAAM,YAAY,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC/C,gBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE;AACvC,gBAAA,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC1C;AAAO,iBAAA,IAAI,MAAM,YAAY,YAAY,EAAE;AACzC,gBAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5C;;;AAGA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACpD;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACrD;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;QAE7B,IAAI,CAAC,YAAY,EAAE;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAa;AAEzD,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,KAAI;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE;YAEhC,IAAI,MAAM,YAAY,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC/C,gBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE;gBACvC,YAAY,EAAE,KAAK,EAAE;YACvB;AAEA,YAAA,IAAI,MAAM,YAAY,YAAY,EAAE;gBAClC,MAAM,CAAC,KAAK,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACH,MAAM,CAAC,KAAe,EAAE,YAAqB,EAAA;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACzE;IAEQ,QAAQ,CAAC,KAAe,EAAE,YAAqB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;QACF;AAEA,QAAA,MAAM,SAAS,GAAc,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC7F,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE;QAEpD,IAAI,GAAG,EAAE;YACP,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CACd,IAAI,IAAI,CAAC;gBACP,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC,iBAAiB;AAC7C,aAAA,CAAC,CACH;YACD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAC/B;IACF;;AAGA,IAAA,YAAY,CAAC,OAAgB,EAAE,KAAW,EAAE,IAAc,EAAA;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;QAE1C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC;IACvC;AAEQ,IAAA,UAAU,CAAC,OAAgB,EAAE,IAAyB,EAAE,KAAU,EAAA;QACxE,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,eAAe;AAC/D,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,WAAW,EAAE;AAEvC;AACoF;AACpF,QAAA,IAAI,QAAQ,IAAI,QAAQ,YAAY,KAAK,EAAE;YACzC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzD;AACA,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE;AAC7C,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC;AAC5C,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACvE,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;AACpB,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAClC,gBAAA,SAAS,EAAE,OAAO,CAAC,aAAa;AACjC,aAAA,CAAC;YACF,IAAI,eAAe,EAAE;gBACnB,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,GAAG,eAAe,CAAC;YAClD;QACF;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AACzB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU;AACpC,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC;AAC5C,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACvE,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;AACpB,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAClC,gBAAA,SAAS,EAAE,CAAC,OAAO,CAAC,aAAa,EAAsB;AACxD,aAAA,CAAC;YACF,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1D;QACF;IACF;AAEA;;;AAGG;AACH,IAAA,kBAAkB,CAAC,OAAgB,EAAA;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;QACtD,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,IAAc,CAAC;AACjE,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACvE,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC;AAC5C,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEK;IACL,yBAAyB,CAAC,QAAmB,EAAE,OAAiB,EAAA;AAC9D,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;AAElF,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAEjC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC;AAC5C,QAAA,OAAO,IAAI;IACb;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;IAC5C;AAEQ,IAAA,oBAAoB,CAAC,OAAiB,EAAA;AAC5C,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,WAAW,EAAE;AACvC,QAAA,IAAI,QAAQ,YAAY,KAAK,EAAE;AAC7B,YAAA,OAAO,QAAQ,CAAC,cAAc,EAAE;QAClC;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;;AAGG;AACK,IAAA,2BAA2B,CAAC,QAAmB,EAAA;QACrD,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YACnD,IAAI,WAAW,EAAE;AACf,gBAAA,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AACrB,gBAAA,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;YACvB;QACF;AACA,QAAA,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;IACvD;AAEQ,IAAA,kBAAkB,CAAC,OAA0B,EAAA;QACnD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;YAC1C;QACF;;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE;AAC1C,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtF,IAAI,CAAC,IAAI,EAAE;YACT;QACF;QACA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,QAA+B;AACxE,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;AACpB,YAAA,SAAS,EAAE,IAAI,CAAC,uBAAuB,EAAE;AACzC,YAAA,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAsB,CAAC;YACnE,GAAG,EAAE,IAAI,CAAC;AACX,SAAA,CAAC;;AAEF,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;IAChC;uGAhnCW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,+/JAFd,CAAC,UAAU,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA8N4B,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EALxB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAE7D,UAAU,8EAE4B,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5SrE,4IAKA,EAAA,MAAA,EAAA,CAAA,s3DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDuEY,qBAAqB,mGAAE,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,CAAA;;2FAK3C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;+BACE,QAAQ,EAAA,OAAA,EAET,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,EAAA,SAAA,EAG5C,CAAC,UAAU,CAAC,EAAA,QAAA,EAAA,4IAAA,EAAA,MAAA,EAAA,CAAA,s3DAAA,CAAA,EAAA;gxHAyNyB,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACU,SAAS,EAAA,EAAA,GAAE;AACxF,4BAAA,IAAI,EAAE;AACP,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAC6C,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAChB,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAEM,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA;sBAqHlF,YAAY;uBAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC;;;AEpajD;;;AAGG;MAWU,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YAHZ,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,aAC5D,cAAc,CAAA,EAAA,CAAA;wGAEb,WAAW,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,CAAC;oBACvE,OAAO,EAAE,CAAC,cAAc;AACzB,iBAAA;;;ACbD;;;AAGG;;ACHH;;;AAGG;MAQU,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAFf,WAAW,CAAA,EAAA,CAAA;AAEV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAFf,WAAW,CAAA,EAAA,CAAA;;2FAEV,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,WAAW;AACtB,iBAAA;;;ACVD;;;AAGG;;ACHH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"siemens-maps-ng.mjs","sources":["../../../../projects/maps-ng/src/components/si-map/models/constants.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-tooltip/si-map-tooltip.component.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-tooltip/si-map-tooltip.component.html","../../../../projects/maps-ng/src/components/si-map/components/si-map-popover/si-map-popover-cluster-template.directive.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-popover/si-map-popover-template.directive.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-popover/si-map-popover.component.ts","../../../../projects/maps-ng/src/components/si-map/components/si-map-popover/si-map-popover.component.html","../../../../projects/maps-ng/src/components/si-map/components/index.ts","../../../../projects/maps-ng/src/components/si-map/shared/themes/element.ts","../../../../projects/maps-ng/src/components/si-map/models/grouping.model.ts","../../../../projects/maps-ng/src/components/si-map/models/index.ts","../../../../projects/maps-ng/src/components/si-map/shared/themes/marker.ts","../../../../projects/maps-ng/src/components/si-map/services/map.service.ts","../../../../projects/maps-ng/src/components/si-map/services/SelectCluster.ts","../../../../projects/maps-ng/src/components/si-map/si-map.component.ts","../../../../projects/maps-ng/src/components/si-map/si-map.component.html","../../../../projects/maps-ng/src/components/si-map/si-map.module.ts","../../../../projects/maps-ng/src/components/si-map/index.ts","../../../../projects/maps-ng/src/public-api.module.ts","../../../../projects/maps-ng/src/public-api.ts","../../../../projects/maps-ng/src/siemens-maps-ng.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n/** */\nexport const DEFAULT_STROKE_WEIGHT = 2;\nexport const DEFAULT_CLUSTER_TYPE = 'donut';\nexport const DEFAULT_DONUT_RATIO = 0.6;\nexport const ANIMATION_DURATION = 500;\nexport const DEFAULT_ICON = 'assets/default-marker-icon.svg';\nexport const DEFAULT_ICON_SCALE = 1;\nexport const SIEMENS_FONT = 'bold 13px \"SiemensSans Pro\", sans-serif';\nexport const SIEMENS_FONT_LABELS = '600 14px \"SiemensSans Pro\", sans-serif';\nexport const DEFAULT_OFFSET = 14;\nexport const DEFAULT_FEATURE_SELECT_ZOOM = 10;\nexport const DEFAULT_FEATURE_CLICK_ZOOM = 15;\nexport const DEFAULT_CLUSTER_CLICK_ZOOM = 15;\nexport const DEFAULT_GLOBAL_ZOOM = 5;\nexport const DEFAULT_CLUSTER_DISTANCE = 40;\n\n/** Updates the amount of buildings to be shown in a cluster tooltip after hovering over it */\nexport const TOOLTIP_FEATURES_TO_DISPLAY = 4;\n/** Specifies the maximum amount of buildings allowed to be displayed as a number in a cluster */\nexport const MAX_CLUSTER_BUILDINGS = 99;\n/** Defines the cluster radius size, so all the clusters are of the same size */\nexport const CLUSTER_RADIUS_SIZE = 20;\n/** Chart inside the cluster is internally divided into 20 fragments */\nexport const CLUSTER_CHARTS_FRAGMENTS = 20;\nexport const GEOJSON_LAYER = 'geojson-layer';\nexport const POINTS_LAYER = 'points-layer';\nexport const LAYER_NAME = 'layerName';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { TOOLTIP_FEATURES_TO_DISPLAY } from '../../models/constants';\n\n@Component({\n selector: 'si-map-tooltip',\n imports: [SiTranslatePipe],\n templateUrl: './si-map-tooltip.component.html',\n styleUrl: './si-map-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class SiMapTooltipComponent {\n /**\n * Cutoff text for tooltips, when cluster combines more than 4 features\n *\n * @defaultValue\n * ```\n * t(() =>$localize`:@@SI_MAPS.TOOLTIP_MORE_TEXT:+ {{length}} locations`)\n * ```\n */\n readonly moreText = input(\n t(() => $localize`:@@SI_MAPS.TOOLTIP_MORE_TEXT:+ {{length}} locations`)\n );\n\n /**\n * Adds the maximum length of a string thats allowed in a tooltip and if its longer it cuts off the rest and adds 3 dots at the end.\n * If set to -1, it will not cut off the string.\n * @defaultValue 50\n */\n readonly maxLabelLength = input(50);\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n protected readonly hiddenEntries = signal(0);\n protected readonly tooltipLabels = signal<string[]>([]);\n private readonly elementRef = inject(ElementRef);\n\n /**\n * Method sets tooltip content. If parameter is of type\n * string, it will directly set it as tooltip content.\n * If it is array of string, it will render it as list of those strings.\n *\n * @param labels - array of strings or string itself\n */\n setTooltip(labels: string[] | string): void {\n const labelList = typeof labels === 'string' ? [labels] : labels.length > 1 ? labels : [];\n this.tooltipLabels.set(\n labelList.slice(0, TOOLTIP_FEATURES_TO_DISPLAY).map(label => this.getLabelText(label))\n );\n this.hiddenEntries.set(Math.max(labelList.length - TOOLTIP_FEATURES_TO_DISPLAY, 0));\n }\n\n private getLabelText(label: string): string {\n if (this.maxLabelLength() != -1 && label.length > this.maxLabelLength()) {\n return `${label.substring(0, this.maxLabelLength())}…`;\n }\n\n return label;\n }\n}\n","<div class=\"si-map-tooltip\">\n @for (label of tooltipLabels(); track $index) {\n <div>{{ label }}</div>\n }\n @if (hiddenEntries()) {\n <div>{{ moreText() | translate: { length: hiddenEntries() } }}</div>\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { MapPointMetaData } from '../../models';\n\n@Directive({\n selector: `[siMapPopoverClusterTemplate]`\n})\nexport class SiMapPopoverClusterTemplateDirective {\n static ngTemplateContextGuard(\n directive: SiMapPopoverClusterTemplateDirective,\n context: unknown\n ): context is { mapPoints: MapPointMetaData[] } {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { MapPointMetaData } from '../../models';\n\n@Directive({\n selector: `[siMapPopoverTemplate]`\n})\nexport class SiMapPopoverTemplateDirective {\n static ngTemplateContextGuard(\n directive: SiMapPopoverTemplateDirective,\n context: unknown\n ): context is { mapPoint: MapPointMetaData } {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n signal,\n TemplateRef,\n Type,\n viewChild,\n ViewContainerRef\n} from '@angular/core';\nimport Map from 'ol/Map';\n\nimport { MapPointMetaData } from '../../models/map-point.interface';\nimport { SiMapPopoverClusterTemplateDirective } from './si-map-popover-cluster-template.directive';\nimport { SiMapPopoverTemplateDirective } from './si-map-popover-template.directive';\nexport interface RenderOptions {\n component?: Type<any>;\n mapPoints: MapPointMetaData | MapPointMetaData[];\n map?: Map;\n}\n\n@Component({\n selector: 'si-map-popover',\n imports: [SiMapPopoverTemplateDirective, SiMapPopoverClusterTemplateDirective],\n templateUrl: './si-map-popover.component.html',\n styleUrl: './si-map-popover.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class SiMapPopoverComponent {\n private readonly elementRef = viewChild.required<ElementRef>('popover');\n protected readonly maxHeight = signal<number | null>(null);\n\n protected readonly contentContainer = viewChild.required<ElementRef, ViewContainerRef>(\n 'contentContainer',\n {\n read: ViewContainerRef\n }\n );\n\n protected readonly defaultContent = viewChild.required<ElementRef, TemplateRef<any>>(\n 'defaultContent',\n {\n read: TemplateRef\n }\n );\n\n protected readonly defaultCluster = viewChild.required<ElementRef, TemplateRef<any>>(\n 'defaultCluster',\n {\n read: TemplateRef\n }\n );\n\n public render({ component, mapPoints, map }: RenderOptions): void {\n this.contentContainer().clear();\n\n if (component) {\n this.renderCustomComponent(component, mapPoints);\n } else {\n this.renderDefault(mapPoints);\n }\n\n if (map) {\n const mapHeight = map.getTargetElement().getBoundingClientRect().height;\n const contentY = this.elementRef().nativeElement.getBoundingClientRect().top;\n const maxheight = mapHeight - contentY - 20;\n this.maxHeight.set(maxheight);\n }\n }\n\n private renderCustomComponent(\n component: Type<any>,\n mapPoints: MapPointMetaData | MapPointMetaData[]\n ): void {\n const componentRef = this.contentContainer().createComponent(component);\n\n // Assign map point meta data to component instance input\n componentRef.setInput(Array.isArray(mapPoints) ? 'mapPoints' : 'mapPoint', mapPoints);\n componentRef.changeDetectorRef.detectChanges();\n }\n\n private renderDefault(mapPoints: MapPointMetaData | MapPointMetaData[]): void {\n // Create an embedded view with the default content template\n const context = Array.isArray(mapPoints) ? { mapPoints } : { mapPoint: mapPoints };\n const template = Array.isArray(mapPoints) ? this.defaultCluster() : this.defaultContent();\n this.contentContainer().createEmbeddedView(template, context).detectChanges();\n }\n}\n","<div #popover class=\"si-map-popover\">\n <div class=\"si-map-popover-arrow\"></div>\n\n <div class=\"si-map-popover-content\">\n <div class=\"overflow-auto px-5\">\n <div #contentContainer></div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultContent let-mapPoint=\"mapPoint\" siMapPopoverTemplate>\n <div>{{ mapPoint?.name }}</div>\n <div [innerHTML]=\"mapPoint?.description\"></div>\n</ng-template>\n<ng-template #defaultCluster let-mapPoints=\"mapPoints\" siMapPopoverClusterTemplate>\n <div [style.max-block-size.px]=\"maxHeight()\">\n <div class=\"si-map-popover-list\">\n @for (point of mapPoints; track $index) {\n <div class=\"si-map-popover-item\">\n <div class=\"si-map-popover-item-title\">{{ point.name }}</div>\n <div class=\"si-map-popover-item-description\" [innerHTML]=\"point.description\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-map-tooltip/si-map-tooltip.component';\nexport * from './si-map-popover/si-map-popover.component';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ColorPalettes } from '../../models/color-palette.type';\nimport { MarkerStatusType } from '../../models/map-point.interface';\n\nconst getProp = (style: CSSStyleDeclaration, prop: string): string => {\n const val = style.getPropertyValue(prop).replace(/\\s/g, ''); // trim all whitespaces\n return val ? val : '';\n};\n\nexport const themeElement = {\n style: () => {\n const style = window.getComputedStyle(document.documentElement);\n const status: Record<MarkerStatusType, string> = {\n info: getProp(style, '--si-sys-color-background-information'),\n success: getProp(style, '--si-sys-color-background-success'),\n warning: getProp(style, '--si-sys-color-background-warning'),\n danger: getProp(style, '--si-sys-color-background-danger'),\n caution: getProp(style, '--si-sys-color-background-caution'),\n critical: getProp(style, '--si-sys-color-background-critical'),\n default: getProp(style, '--si-sys-color-background-accent'),\n unknown: getProp(style, '--si-sys-color-background-neutral')\n };\n\n return {\n fillColor: getProp(style, '--si-sys-color-background-1'),\n strokeColor: getProp(style, '--si-sys-color-background-1'),\n textColor: getProp(style, '--si-sys-color-text-primary'),\n defaultMarkerColor: getProp(style, '--si-sys-color-text-primary'),\n status,\n colorPalette: {\n status: [status.info, status.success, status.warning, status.danger],\n element: [\n getProp(style, '--si-sys-color-data-sequential-red-2'),\n getProp(style, '--si-sys-color-data-sequential-orange-4'),\n getProp(style, '--si-sys-color-background-caution'),\n getProp(style, '--si-sys-color-data-sequential-green-2'),\n getProp(style, '--si-sys-color-background-information'),\n getProp(style, '--si-sys-color-data-categorical-1'),\n getProp(style, '--si-sys-color-data-categorical-17')\n ]\n } as ColorPalettes\n };\n }\n};\n\nexport type ThemeType = ReturnType<typeof themeElement.style>;\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { themeElement } from '../shared/themes/element';\nimport { ColorPalette } from './color-palette.type';\n\n/**\n * Class for grouping functionality\n */\nexport class Grouping {\n private readonly _colors: string[];\n private readonly _palette?: ColorPalette;\n\n constructor(groupColors: Record<number, string> | ColorPalette = 'status') {\n this._colors = [];\n\n if (typeof groupColors === 'string') {\n const colorPalette = groupColors;\n this._colors = [colorPalette];\n\n if (colorPalette === 'element') {\n this._palette = colorPalette as ColorPalette;\n this._colors = themeElement.style().colorPalette.element;\n } else {\n this._palette = 'status';\n this._colors = themeElement.style().colorPalette.status;\n }\n } else {\n Object.keys(groupColors).forEach((key: string) => {\n const numKey = Number(key);\n if (numKey <= 0) {\n throw new Error('Key is out of range: keys should start from 1 and do not repeat');\n }\n this._colors[Number(key) - 1] = groupColors[numKey];\n });\n }\n }\n\n get colors(): string[] {\n return Object.values(this._colors);\n }\n\n get palette(): string | undefined {\n return this._palette;\n }\n\n get length(): number {\n return this._colors.length;\n }\n\n getColor(groupId: number): string {\n // Group has higher index than available colors,\n // cycle trough them.\n if (groupId > this._colors.length) {\n const index = groupId % this._colors.length;\n return this._colors[index];\n } else {\n return this._colors[groupId - 1];\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './constants';\nexport * from './color-palette.type';\nexport * from './grouping.model';\nexport * from './overlay-native-properties.interface';\nexport * from './map-point.interface';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { MarkerStatusType } from '../../models/map-point.interface';\nimport { ThemeType } from './element';\n\nconst markers: Record<MarkerStatusType, string> = {\n default: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <path class=\"middle\"\n d=\"m255.99,277.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n`,\n success: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Zm0,213.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"middle\"\n d=\"m255.99,277.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"symbol\"\n d=\"m241.55,225.45c-2.47,0-4.93-.94-6.82-2.82l-24.09-24.09c-3.77-3.77-3.77-9.86,0-13.63,3.77-3.77,9.87-3.77,13.63,0l17.28,17.28,46.19-46.19c3.77-3.77,9.87-3.77,13.63,0,3.77,3.77,3.77,9.86,0,13.63l-53.01,53.01c-1.88,1.88-4.35,2.82-6.82,2.82h.02Z\" />\n `,\n info: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <rect class=\"middle\"\n x=\"177.74\" y=\"110.96\" width=\"156.52\" height=\"156.52\" rx=\"11.74\" ry=\"11.74\" />\n <path class=\"symbol\"\n d=\"m255.91,134.43h.18c7.02,0,12.72,5.73,12.72,12.81s-5.69,12.81-12.72,12.81h-.18c-7.02,0-12.72-5.73-12.72-12.81s5.69-12.81,12.72-12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,179.94c5.31,0,9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61s-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61Z\" />\n `,\n warning: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <path class=\"middle\"\n d=\"m243.78,104.22l-76.92,134.35c-5.38,9.39,1.4,21.09,12.22,21.09h153.85c10.82,0,17.6-11.7,12.22-21.09l-76.92-134.35c-5.41-9.45-19.04-9.45-24.45,0Z\" />\n <path class=\"symbol\"\n d=\"m256.09,244.09h-.18c-7.02,0-12.72-5.73-12.72-12.81s5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81s-5.69,12.81-12.72,12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,198.59c-5.31,0-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61s9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61Z\" />\n `,\n danger: `\n <path class=\"icon\"\n d=\"m256,64c-69.05,0-125.21,56.17-125.21,125.21,0,1.43.04,2.94.12,4.6.46,12.81,2.85,25.34,7.07,37.27,24.64,80.64,105.26,184.13,108.68,188.43,2.27,2.85,5.7,4.5,9.35,4.5s7.08-1.66,9.35-4.5c3.42-4.3,84.05-107.77,108.69-188.43,4.23-11.93,6.61-24.46,7.07-37.24.08-1.5.12-3.06.12-4.62,0-69.05-56.18-125.21-125.22-125.21h0Z\" />\n <path class=\"middle\"\n d=\"m255.99,277.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"symbol\"\n d=\"m256.09,244.09h-.18c-7.02,0-12.72-5.73-12.72-12.81s5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81s-5.69,12.81-12.72,12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,198.59c-5.31,0-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61s9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61Z\" />\n `,\n caution: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <rect class=\"middle\"\n x=\"190.26\" y=\"123.48\" width=\"131.47\" height=\"131.47\" rx=\"11.74\" ry=\"11.74\"\n transform=\"translate(208.78 -125.6) rotate(45)\" />\n <path class=\"symbol\"\n d=\"m256.09,244h-.18c-7.02,0-12.72-5.73-12.72-12.81,0-7.08,5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81,0,7.08-5.69,12.81-12.72,12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,198.5c-5.31,0-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61,5.31,0,9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61Z\" />\n `,\n critical: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Z\" />\n <path class=\"middle\"\n d=\"m285.78,105.57h-59.57c-3.11,0-6.1,1.24-8.3,3.44l-42.12,42.12c-2.2,2.2-3.44,5.19-3.44,8.3v59.57c0,3.11,1.24,6.1,3.44,8.3l42.12,42.12c2.2,2.2,5.19,3.44,8.3,3.44h59.57c3.11,0,6.1-1.24,8.3-3.44l42.12-42.12c2.2-2.2,3.44-5.19,3.44-8.3v-59.57c0-3.11-1.24-6.1-3.44-8.3l-42.12-42.12c-2.2-2.2-5.19-3.44-8.3-3.44Z\" />\n <path class=\"symbol\"\n d=\"m256.09,244h-.18c-7.02,0-12.72-5.73-12.72-12.81,0-7.08,5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81,0,7.08-5.69,12.81-12.72,12.81Z\" />\n <path class=\"symbol\"\n d=\"m256,198.5c-5.31,0-9.61-4.3-9.61-9.61v-44.84c0-5.31,4.3-9.61,9.61-9.61,5.31,0,9.61,4.3,9.61,9.61v44.84c0,5.31-4.3,9.61-9.61,9.61Z\" />\n `,\n unknown: `\n <path class=\"icon\"\n d=\"m256,64c-69.37,0-125.8,56.43-125.8,125.8,0,1.44.04,2.95.12,4.62.46,12.87,2.86,25.46,7.1,37.44,24.76,81.02,105.75,183.3,109.19,187.62,2.28,2.86,5.73,4.52,9.39,4.52s7.11-1.67,9.39-4.52c3.44-4.32,84.44-106.59,109.2-187.62,4.25-11.99,6.64-24.57,7.1-37.41.08-1.51.12-3.07.12-4.64,0-69.37-56.44-125.8-125.81-125.8Zm0,213.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"middle\"\n d=\"m255.99,277.81c-48.59,0-87.99-39.4-87.99-88.01s39.4-87.99,87.99-87.99,88.01,39.41,88.01,87.99-39.39,88.01-88.01,88.01Z\" />\n <path class=\"symbol\"\n d=\"m256.04,207.64h0c-5.25,0-9.5-4.25-9.5-9.5v-9.95c0-3.59,1.8-7,4.87-8.86.59-.36,1.07-.56,1.58-.73,5.75-1.99,17.59-8.4,17.59-15.59,0-6.46-4.07-12.24-10.16-14.38-7.91-2.78-16.6,1.39-19.38,9.29-1.74,4.95-7.16,7.55-12.11,5.81-4.95-1.74-7.55-7.17-5.81-12.11,6.26-17.79,25.82-27.17,43.61-20.91,13.69,4.82,22.87,17.8,22.85,32.31,0,16.73-14.98,26.5-24.04,30.88v4.23c0,5.25-4.25,9.5-9.5,9.5h0Z\" />\n <path class=\"symbol\"\n d=\"m256.09,247h-.18c-7.02,0-12.72-5.73-12.72-12.81,0-7.08,5.69-12.81,12.72-12.81h.18c7.02,0,12.72,5.73,12.72,12.81,0,7.08-5.69,12.81-12.72,12.81Z\" />\n `\n};\n\nexport const getMarker = (status: MarkerStatusType, theme: ThemeType): string => {\n return `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" width=\"64\" height=\"64\">\n <defs>\n <style>\n .middle{fill:${theme.fillColor};}\n .symbol{fill:${theme.textColor};}\n .icon{fill:${theme.status[status]};}\n </style>\n </defs>\n ${markers[status]}\n</svg>\n`;\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n/// <reference types=\"./ol-ext.d.ts\" />\nimport { Injectable } from '@angular/core';\nimport AnimatedCluster from 'ol-ext/layer/AnimatedCluster';\nimport Chart from 'ol-ext/style/Chart';\nimport Feature from 'ol/Feature';\nimport Point from 'ol/geom/Point';\nimport Layer from 'ol/layer/Layer';\nimport VectorLayer from 'ol/layer/Vector';\nimport { fromLonLat } from 'ol/proj';\nimport Cluster from 'ol/source/Cluster';\nimport VectorSource from 'ol/source/Vector';\nimport { Circle, Fill, Icon, Stroke, Style, Text } from 'ol/style';\nimport { Options as IconOptions } from 'ol/style/Icon';\nimport ImageStyle from 'ol/style/Image';\n\nimport { ColorPalette } from '../models/color-palette.type';\nimport {\n ANIMATION_DURATION,\n CLUSTER_CHARTS_FRAGMENTS,\n CLUSTER_RADIUS_SIZE,\n DEFAULT_CLUSTER_TYPE,\n DEFAULT_DONUT_RATIO,\n DEFAULT_ICON,\n DEFAULT_ICON_SCALE,\n DEFAULT_OFFSET,\n DEFAULT_STROKE_WEIGHT,\n MAX_CLUSTER_BUILDINGS,\n SIEMENS_FONT,\n SIEMENS_FONT_LABELS\n} from '../models/constants';\nimport { Grouping } from '../models/grouping.model';\nimport {\n IconMarkerOptions,\n LabelOptions,\n MapPoint,\n MarkerOptions\n} from '../models/map-point.interface';\nimport { themeElement, ThemeType } from '../shared/themes/element';\nimport { getMarker } from '../shared/themes/marker';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MapService {\n private styleCache: Record<string, Style[]> = {};\n private clusterStyleCache: Record<string, Style[]> = {};\n private labelStyleCache: Record<string, Style[]> = {};\n private grouping?: Grouping;\n\n private _theme?: ThemeType;\n\n private wrappedTextCache: Record<string, string> = {};\n private labelTextStyleCache: Record<string, Text[]> = {};\n\n resetCaches(): void {\n this.styleCache = {};\n this.clusterStyleCache = {};\n this.labelStyleCache = {};\n this.wrappedTextCache = {};\n this.labelTextStyleCache = {};\n }\n\n private wrapLabelText(labelText: string, maxLength: number, maxLines: number): string {\n const cacheKey = `${labelText}_${maxLength}_${maxLines}`;\n if (this.wrappedTextCache[cacheKey]) {\n return this.wrappedTextCache[cacheKey];\n }\n\n let wrappedText = '';\n let currentLine = '';\n let lineCount = 0;\n const words = labelText.split(/[ \\n]/g);\n if (maxLength > 0) {\n for (const word of words) {\n const strippedWord =\n word.length > maxLength ? word.substring(0, maxLength - 3) + '...' : word;\n if ((currentLine.length || -1) + 1 + strippedWord.length > maxLength) {\n if (lineCount + 1 >= maxLines) {\n const wrappedLine = currentLine.endsWith('...')\n ? currentLine\n : (currentLine.length > maxLength\n ? currentLine.substring(0, maxLength - 3)\n : currentLine) + '...';\n wrappedText += (wrappedText ? '\\n' : '') + wrappedLine;\n return (this.wrappedTextCache[cacheKey] = wrappedText);\n } else {\n wrappedText += (wrappedText ? '\\n' : '') + currentLine;\n }\n currentLine = '';\n lineCount++;\n }\n currentLine += (currentLine ? ' ' : '') + strippedWord;\n }\n if (currentLine) {\n wrappedText += (wrappedText ? '\\n' : '') + currentLine;\n }\n } else {\n wrappedText = labelText;\n }\n\n return (this.wrappedTextCache[cacheKey] = wrappedText);\n }\n\n private getLabelTextStyle(\n text: string = '',\n maxLength: number,\n maxLines: number,\n markerSizes: [number, number],\n markerOffset: [number, number]\n ): Text[] {\n const cacheKey = `${text}_${maxLength}_${SIEMENS_FONT_LABELS}_${markerSizes[0]}_${markerSizes[1]}_${markerOffset[0]}_${markerOffset[1]}`;\n if (this.labelTextStyleCache[cacheKey]) {\n return this.labelTextStyleCache[cacheKey];\n }\n\n const wrappedText = this.wrapLabelText(text, maxLength, maxLines);\n const margin = 6;\n const extraPadding = 1;\n const halfWidth = markerSizes[0] / 2;\n const halfHeight = markerSizes[1] / 2;\n const placementOffsets = [\n {\n offsetX: markerOffset[0],\n offsetY: margin + markerOffset[1],\n align: { h: 'center', v: 'top' }\n },\n {\n offsetX: markerOffset[0],\n offsetY: -margin - markerSizes[1] + markerOffset[1],\n align: { h: 'center', v: 'bottom' }\n },\n {\n offsetX: -margin - halfWidth + markerOffset[0],\n offsetY: markerOffset[1] - halfHeight,\n align: { h: 'right', v: 'middle' }\n },\n {\n offsetX: margin + halfWidth - markerOffset[0],\n offsetY: markerOffset[1] - halfHeight,\n align: { h: 'left', v: 'middle' }\n }\n ] as const;\n\n return (this.labelTextStyleCache[cacheKey] = placementOffsets.map(\n offset =>\n new Text({\n text: wrappedText,\n font: SIEMENS_FONT_LABELS,\n fill: new Fill({ color: this.theme.textColor }),\n stroke: new Stroke({ color: this.theme.strokeColor, width: 4 }),\n offsetX: offset.offsetX,\n offsetY: offset.offsetY,\n padding: [\n offset.offsetY >= 0 ? offset.offsetY + extraPadding : 0,\n offset.offsetX < 0 ? -offset.offsetX - extraPadding : 0,\n offset.offsetY < 0 ? -offset.offsetY - extraPadding : 0,\n offset.offsetX >= 0 ? offset.offsetX + extraPadding : 0\n ],\n textAlign: offset.align.h,\n textBaseline: offset.align.v,\n overflow: true\n })\n ));\n }\n\n private zoomCallback: () => number | undefined = () => undefined;\n\n private getZoom(): number {\n return this.zoomCallback?.() ?? 3;\n }\n\n setZoomCallback(callback?: () => number | undefined): void {\n this.zoomCallback = callback ?? (() => undefined);\n }\n\n setTheme(groupColors: Record<number, string> | ColorPalette | undefined): void {\n this.resetCaches();\n this.grouping = new Grouping(groupColors);\n this._theme = undefined;\n }\n\n get theme(): ThemeType {\n this._theme ??= themeElement.style();\n return this._theme;\n }\n\n /**\n * Create feature with parameters\n * @param points - the list of points\n */\n createFeatures(points: MapPoint[], alwaysShowLabels = false): Feature[] {\n return points.map(\n point =>\n new Feature({\n geometry: new Point(fromLonLat([point.lon, point.lat])),\n // Append MapPointMetaData that will be available in getProperties()\n meta: point,\n name: point.name,\n description: point.description,\n marker: point.marker,\n label: alwaysShowLabels ? ({ text: point.name } as LabelOptions) : undefined,\n group: point.group,\n extraProperties: point.extraProperties,\n click: point.click\n })\n );\n }\n\n /**\n * Initialize animated cluster layer for points if clustering is enabled\n * @param features - for the source\n * @param markerAnimation - animation value for markers\n * @param clusterDistance - number distance between clusters\n * @param multiWorld - boolean if points should be repeated on multiple world maps\n */\n clusterLayer(\n features: Feature[],\n markerAnimation: boolean,\n clusterDistance: number,\n multiWorld: boolean\n ): Layer {\n return new AnimatedCluster({\n className: 'animated-cluster',\n zIndex: 1000,\n source: new Cluster({\n wrapX: multiWorld,\n distance: this.calculateClusteringDistance(clusterDistance, CLUSTER_RADIUS_SIZE),\n minDistance: CLUSTER_RADIUS_SIZE * 2,\n source: new VectorSource({\n features\n })\n }),\n animationDuration: markerAnimation ? ANIMATION_DURATION : 0,\n style: (feature: Feature) => this.getClusterStyle(feature)\n });\n }\n\n /**\n * Create vector layer when clustering is disabled\n * @param features - list of Features\n * @param multiWorld - boolean if points should be repeated on multiple world maps\n */\n vectorLayer(\n features: Feature[],\n multiWorld: boolean,\n defaultStyle: boolean = false\n ): VectorLayer<VectorSource> {\n return new VectorLayer({\n className: 'vector-layer',\n zIndex: 1000,\n source: new VectorSource({\n features,\n wrapX: multiWorld\n }),\n style: !defaultStyle\n ? feature => this.getFeatureStyle(feature as Feature, false, features)\n : undefined\n });\n }\n\n labelLayer(\n features: Feature[],\n multiWorld: boolean,\n maxLabelLength: number,\n maxLines: number,\n clusterLayer?: Layer\n ): VectorLayer<VectorSource> {\n const clusterSource = clusterLayer?.getSource() as Cluster<Feature<Point>>;\n return new VectorLayer({\n className: 'vector-layer',\n zIndex: 1200,\n source: new VectorSource({\n features,\n wrapX: multiWorld\n }),\n declutter: true,\n style: feature =>\n this.getLabelStyle(\n feature as Feature<Point>,\n features as Feature<Point>[],\n maxLabelLength,\n maxLines,\n clusterSource,\n false\n )\n });\n }\n\n /**\n * Cluster styling\n *\n * @param feature - Feature\n */\n getClusterStyle(feature: Feature): Style[] {\n const features = feature.getProperties().features;\n if (!features) {\n return this.getFeatureStyle(feature, true, features);\n }\n const uid = feature.getProperties().geometry.ol_uid;\n const size = features.length;\n\n if (size === 1) {\n return this.getFeatureStyle(feature, true, features);\n }\n\n let style: Style[] = this.clusterStyleCache[uid];\n\n if (!style) {\n style = [\n new Style({\n image: new Circle({\n radius: CLUSTER_RADIUS_SIZE,\n fill: new Fill({\n color: this.theme.fillColor\n }),\n stroke: new Stroke({\n color: this.theme.strokeColor,\n width: 6\n })\n })\n }),\n new Style({\n image: this.getClusterChart(features, this.grouping!),\n text: new Text({\n text: size > MAX_CLUSTER_BUILDINGS ? `${MAX_CLUSTER_BUILDINGS}+` : size.toString(),\n placement: 'point',\n textAlign: 'center',\n textBaseline: 'middle',\n fill: new Fill({ color: this.theme.textColor }),\n font: SIEMENS_FONT\n })\n })\n ];\n\n this.clusterStyleCache[uid] = style;\n }\n\n return style;\n }\n\n /**\n * Separate feature styling with icon\n * @param feature - to style\n * @param cluster - indication\n * @param features - list of features\n */\n getFeatureStyle(feature: Feature, cluster: boolean, features: Feature[], dummy = false): Style[] {\n const subFeatures = feature.getProperties()?.features;\n const feat = cluster && features ? subFeatures[0] : feature;\n const marker: MarkerOptions = feat.getProperties().marker;\n\n if (feat) {\n const uid = feat.getProperties().geometry.ol_uid + (dummy ? '~' : '');\n let style = this.styleCache[uid];\n\n if (!style) {\n style = [\n new Style(\n dummy\n ? {}\n : {\n image: this.getMarkerStyle(feat, this.grouping!, marker)\n }\n )\n ];\n\n this.styleCache[uid] = style;\n }\n\n return style;\n }\n\n return [\n new Style({\n stroke: new Stroke({\n color: this.theme.strokeColor,\n width: DEFAULT_STROKE_WEIGHT\n })\n })\n ];\n }\n\n getLabelStyle(\n feature: Feature<Point>,\n features: Feature<Point>[],\n maxLabelLength: number,\n maxLines: number,\n clusterSource?: Cluster<Feature<Point>>,\n dummy = false\n ): Style[] {\n const featureStyle = this.getFeatureStyle(feature, false, features, true);\n\n // const marker: MarkerOptions = feature.getProperties().marker;\n const label: LabelOptions = feature.getProperties().label;\n\n if (dummy || !label?.text) {\n return featureStyle;\n }\n\n // Determine if the feature is clustered\n let isClustered = !!clusterSource;\n\n if (clusterSource) {\n let clusterFeatures = [];\n\n // Here we iterate over all clusters and check if the feature is among them\n clusterSource.getFeatures().forEach(cluster => {\n clusterFeatures = cluster.get('features');\n if (clusterFeatures?.length === 1 && clusterFeatures[0] === feature) {\n isClustered = false;\n }\n });\n }\n\n // Only show labels for features that are not clustered\n if (!isClustered) {\n const uid = feature.getProperties().geometry.ol_uid + '~' + this.getZoom();\n let style = this.labelStyleCache[uid];\n\n if (!style) {\n const labelStyles = this.getLabelTextStyle(\n label?.text,\n maxLabelLength,\n maxLines,\n this.getMarkerSize(feature),\n this.getMarkerOffset(feature)\n );\n style = labelStyles.map(\n labelStyle =>\n new Style({\n text: labelStyle\n })\n );\n\n this.labelStyleCache[uid] = style;\n }\n\n return [...featureStyle, ...style];\n }\n\n return featureStyle;\n }\n\n getMarkerOffset(feature: Feature): [number, number] {\n const marker = feature.getProperties()?.marker;\n const markerType = marker?.type;\n const [, height] = this.getMarkerSize(feature);\n const offsetVertical = !markerType || markerType === 'status' ? 0 : height / 2;\n return [0, offsetVertical];\n }\n\n getMarkerSize(feature: Feature): [number, number] {\n const marker = feature.getProperties()?.marker;\n const markerType = marker?.type;\n const scale = (markerType === 'icon' ? marker?.icon?.scale : 1) ?? 1;\n const height =\n !markerType || markerType === 'status'\n ? 32\n : markerType === 'dot'\n ? 28\n : DEFAULT_OFFSET * 2 * scale;\n const width =\n !markerType || markerType === 'status'\n ? 22\n : markerType === 'dot'\n ? 28\n : DEFAULT_OFFSET * 2 * scale;\n return [width, height];\n }\n\n private getClusterChart(features: Feature[], grouping: Grouping): ImageStyle {\n const { data, colors } = this.getClusterChartData(features, grouping);\n\n const chart = new Chart({\n type: DEFAULT_CLUSTER_TYPE,\n radius: CLUSTER_RADIUS_SIZE,\n donutRatio: DEFAULT_DONUT_RATIO,\n colors,\n data,\n rotateWithView: true,\n snapToPixel: true,\n stroke: new Stroke({\n color: colors.length > 1 ? this.theme.strokeColor : 'rgba(0,0,0,0)',\n width: colors.length > 1 ? DEFAULT_STROKE_WEIGHT : 0\n }),\n overflow: true\n } as any); // types are wrong here and don't match the actual API\n\n return chart;\n }\n\n private getClusterChartData(\n features: Feature[],\n grouping: Grouping\n ): { data: number[]; colors: string[] } {\n const theme = this.theme;\n const groups: Record<number, number> = {};\n const ungrouped: number[] = [];\n const ungroupedColors: string[] = [];\n\n features.forEach(feat => {\n const props = feat.getProperties();\n const groupId = props.group;\n\n // Ungrouped features are considered as they have group on their own.\n if (groupId == null) {\n ungrouped.push(1);\n ungroupedColors.push(\n this.getStatusMarkerColor(theme, props.marker) ?? theme.defaultMarkerColor\n );\n return;\n }\n\n if (groups[groupId]) {\n groups[groupId] = groups[groupId] + 1;\n } else {\n groups[groupId] = 1;\n }\n });\n\n const data: number[] = [];\n this.transformChartData(data, Object.values(groups), features.length);\n this.transformChartData(data, ungrouped, features.length);\n\n // Corresponding colors of groups are based on matching index\n const colors = [\n ...Object.keys(groups).map(groupId => grouping.getColor(Number(groupId))),\n ...ungroupedColors\n ];\n\n return { data, colors };\n }\n\n /**\n * Calculates minimal safe distance for clustering to avoid overlapping of clusters\n */\n private calculateClusteringDistance(distance: number, clusterRadius: number): number {\n const safeDistance = clusterRadius * 2;\n return Math.max(safeDistance, distance);\n }\n\n private transformChartData(data: number[], series: number[], size: number): void {\n const fragmentSize = size / CLUSTER_CHARTS_FRAGMENTS;\n\n for (const value of series) {\n let fragment = value / fragmentSize;\n\n // Any fragment smaller than 1 must be represented at least as one fragment in the chart\n if (fragment > 0 && fragment < 1) {\n fragment = 1;\n }\n\n data.push(fragment);\n }\n }\n\n private getMarkerStyle(\n feature: Feature,\n grouping: Grouping,\n marker?: MarkerOptions\n ): Icon | Circle | undefined {\n if (!marker || marker.type === 'status') {\n return this.getStatusMarker(marker ?? { type: 'status', status: 'default' });\n }\n\n const color = this.getMarkerColor(feature, grouping, marker);\n\n if (marker.type === 'dot') {\n return this.getDotMarker(color);\n }\n\n if (marker.type === 'icon') {\n return this.getIconMarker(color, marker.icon);\n }\n\n return undefined;\n }\n\n /**\n * Decides what color should Marker be painted with.\n *\n * Markers are painted with group colors if group id is present. If marker color is specified,\n * it takes precedence over the group color.\n */\n private getMarkerColor(feature: Feature, grouping: Grouping, marker?: MarkerOptions): string {\n let color = this.theme.defaultMarkerColor;\n\n const groupId = feature.getProperties().group;\n if (groupId) {\n color = grouping.getColor(groupId);\n }\n\n if (marker?.color) {\n color = marker.color;\n }\n\n if (marker?.status) {\n color = this.theme.status[marker.status];\n }\n\n return color;\n }\n\n private getDotMarker(color: string): Circle {\n return new Circle({\n radius: 10,\n fill: new Fill({\n color\n }),\n stroke: new Stroke({\n color: this.theme.strokeColor,\n width: 6\n })\n });\n }\n\n private getIconMarker(color: string, iconConf?: IconMarkerOptions): Icon {\n const defaultIconStyle: IconOptions = {\n color,\n src: DEFAULT_ICON,\n scale: DEFAULT_ICON_SCALE\n };\n\n return new Icon({ ...defaultIconStyle, ...iconConf });\n }\n\n private getStatusMarkerColor(theme: ThemeType, marker?: MarkerOptions): string | undefined {\n if (!marker) {\n return theme.status.default;\n }\n if (marker.type === 'status') {\n return theme.status[marker.status!];\n }\n return marker.color;\n }\n\n private getStatusMarker(marker: MarkerOptions): Icon {\n marker.color = this.getStatusMarkerColor(this.theme, marker);\n\n const svg = getMarker(marker.status!, this.theme);\n const svgb64 = 'data:image/svg+xml;base64,' + btoa(svg);\n\n return new Icon({\n size: [64, 64],\n color: 'transparent', // Note: must be 'transparent' or '#fff' for OL to keep the colors\n width: 42,\n height: 42,\n displacement: [0, 16],\n src: svgb64\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { click } from 'ol/events/condition';\nimport { createEmpty as createEmptyExtent, extend } from 'ol/extent';\nimport Feature from 'ol/Feature';\nimport Select, { SelectEvent } from 'ol/interaction/Select';\nimport { StyleLike } from 'ol/style/Style';\n\nexport class SelectCluster extends Select {\n private zoomOnClick: () => boolean;\n private maxZoom: () => number;\n private fitClusterPadding: () => number[];\n\n constructor(options: {\n fitClusterPadding: () => number[];\n maxZoom: () => number;\n style?: StyleLike | null;\n zoomOnClick: () => boolean;\n }) {\n super({ ...options, condition: click });\n\n this.zoomOnClick = options.zoomOnClick;\n this.maxZoom = options.maxZoom;\n this.fitClusterPadding = options.fitClusterPadding;\n this.on('select', this.selectCluster.bind(this));\n }\n\n selectCluster(e: SelectEvent): void {\n const feature = e.selected.at(0);\n\n // Not a cluster (or just one feature)\n const cluster = feature?.get('features');\n if (!cluster || cluster.length === 1) {\n return;\n }\n\n if (this.zoomOnClick()) {\n this.zoomToCluster(cluster);\n }\n }\n\n zoomToCluster(cluster: Feature[]): void {\n const extent = createEmptyExtent();\n cluster.forEach(feature => {\n const geometry = feature.getGeometry();\n if (geometry) {\n extend(extent, geometry.getExtent());\n }\n });\n\n this.getMap()!.getView().fit(extent, {\n padding: this.fitClusterPadding(),\n maxZoom: this.maxZoom()\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterViewChecked,\n AfterViewInit,\n Component,\n computed,\n contentChild,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n model,\n NgZone,\n OnChanges,\n OnDestroy,\n output,\n SimpleChanges,\n Type,\n viewChild\n} from '@angular/core';\nimport {\n SiNoTranslateService,\n SiTranslateServiceBuilder,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { siMapStyle } from '@siemens/map-styles/common';\nimport { apply as applyMapboxStyle } from 'ol-mapbox-style';\nimport Control from 'ol/control/Control';\nimport { defaults as defaultControls } from 'ol/control/defaults';\nimport { Coordinate } from 'ol/coordinate';\nimport * as olExtent from 'ol/extent';\nimport Feature, { FeatureLike } from 'ol/Feature';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport Geometry from 'ol/geom/Geometry';\nimport Point from 'ol/geom/Point';\nimport Layer from 'ol/layer/Layer';\nimport VectorLayer from 'ol/layer/Vector';\nimport Map from 'ol/Map';\nimport MapBrowserEvent from 'ol/MapBrowserEvent';\nimport Overlay, { Positioning } from 'ol/Overlay';\nimport RenderFeature from 'ol/render/Feature';\nimport Cluster from 'ol/source/Cluster';\nimport VectorSource from 'ol/source/Vector';\nimport { StyleLike } from 'ol/style/Style';\nimport View from 'ol/View';\n\nimport { SiMapPopoverComponent } from './components/si-map-popover/si-map-popover.component';\nimport { SiMapTooltipComponent } from './components/si-map-tooltip/si-map-tooltip.component';\nimport { ColorPalette } from './models/color-palette.type';\nimport {\n ANIMATION_DURATION,\n DEFAULT_CLUSTER_CLICK_ZOOM,\n DEFAULT_CLUSTER_DISTANCE,\n DEFAULT_FEATURE_CLICK_ZOOM,\n DEFAULT_FEATURE_SELECT_ZOOM,\n DEFAULT_GLOBAL_ZOOM,\n GEOJSON_LAYER,\n LAYER_NAME,\n POINTS_LAYER\n} from './models/constants';\nimport { MapPoint, MapPointMetaData } from './models/map-point.interface';\nimport { OverlayNativeProperties } from './models/overlay-native-properties.interface';\nimport { MapService } from './services/map.service';\nimport { SelectCluster } from './services/SelectCluster';\n\ninterface ClusterHolder {\n feature?: Feature;\n}\n\n@Component({\n selector: 'si-map',\n\n imports: [SiMapTooltipComponent, SiMapPopoverComponent],\n templateUrl: './si-map.component.html',\n styleUrl: './si-map.component.scss',\n providers: [MapService]\n})\nexport class SiMapComponent implements AfterViewInit, OnChanges, OnDestroy, AfterViewChecked {\n /**\n * Points to be rendered on the map as features.\n */\n readonly points = model<MapPoint[]>();\n /**\n * Payload of a geo-JSON object.\n */\n readonly geoJson = input<any>();\n /**\n * Callback function to add custom styling to the drawn geo-JSON features.\n */\n readonly styleFunction = input<StyleLike>();\n /**\n * Projection format used to render the geo-JSON payload.\n *\n * @defaultValue 'EPSG:3857'\n */\n readonly geoJsonProjection = input('EPSG:3857');\n /**\n * Enable or disable animation of markers.\n *\n * @defaultValue false\n */\n readonly markerAnimation = input(false);\n /**\n * Enable or disable clustering of points on the map.\n *\n * @defaultValue false\n */\n readonly cluster = input(false);\n /**\n * Defines which colors should be used when points are grouped. Grouping means\n * that points are painted with their group color and they are displayed as\n * series in donut chart inside cluster.\n *\n * @defaultValue 'status'\n */\n readonly groupColors = input<Record<number, string> | ColorPalette>('status');\n /**\n * - **overlay**: Layer for popup element, an element to be displayed over the\n * map and attached to a single map location.\n * - **controls**: List of controls to activate for map, additional controls\n * like full screen, etc. can be added here.\n */\n readonly nativeProperties = input<OverlayNativeProperties>();\n /**\n * Type of background map, for example `'https://api.maptiler.com/maps/voyager/style.json?key=xxx'`\n * (Token key is required). The styleJson defines the tiler source and the\n * used styles for different layers, should only be used if the siemens\n * default styles by using `maptilerKey` isn't good enough.\n */\n readonly styleJson = input<any>();\n /**\n * Option to switch on/off the display of tooltip while hovering over single\n * point.\n *\n * @defaultValue false\n */\n readonly displayTooltipOnHover = input(false);\n /**\n * Option to switch on/off the display of popover when clicked.\n * Default set to true (on).\n *\n * @defaultValue true\n */\n readonly displayPopoverOnClick = input(true);\n\n /**\n * Option to switch on/off popover when hovered.\n * Default is set to false (off)\n *\n * @defaultValue false\n */\n readonly displayPopoverOnHover = input(false);\n\n /**\n * Provide your key for MapTiler, this will use the default siemens element\n * styles which can be used in both light and dark mode. Shouldn't be used\n * together with styleJson.\n */\n readonly maptilerKey = input<string>();\n /**\n * Option to switch on/off the display of tooltip while hovering over cluster.\n *\n * @defaultValue false\n */\n readonly displayTooltipOnClusterHover = input(false);\n /**\n * Defines range in which points are clustered. In pixels.\n *\n * @defaultValue DEFAULT_CLUSTER_DISTANCE\n */\n readonly clusterDistance = input<number>(DEFAULT_CLUSTER_DISTANCE);\n /**\n * Zoom level when calling the `select()` method on the component.\n * Defaults to 10.\n *\n * @defaultValue DEFAULT_FEATURE_SELECT_ZOOM\n */\n readonly featureSelectZoom = input<number>(DEFAULT_FEATURE_SELECT_ZOOM);\n /**\n * Max zoom level which is used when clicking on feature on the map.\n * Defaults to 15.\n *\n * @defaultValue DEFAULT_FEATURE_CLICK_ZOOM\n */\n readonly featureClickZoom = input<number>(DEFAULT_FEATURE_CLICK_ZOOM);\n /**\n * Max zoom level for clicking on a cluster on the map. Defaults to 15.\n *\n * @defaultValue DEFAULT_CLUSTER_CLICK_ZOOM\n */\n readonly clusterClickZoom = input<number>(DEFAULT_CLUSTER_CLICK_ZOOM);\n /**\n * Max zoom level on load or when clicking the reset button. Defaults to 5.\n *\n * @defaultValue DEFAULT_GLOBAL_ZOOM\n */\n readonly globalZoom = input<number>(DEFAULT_GLOBAL_ZOOM);\n /**\n * When enabled, features will be automatically zoom to on click.\n *\n * @defaultValue false\n */\n readonly autoZoomFeatureClick = input(false);\n /**\n * When disabled, clusters will no longer automatically be zoomed to on click.\n *\n * @defaultValue true\n */\n readonly autoZoomClusterClick = input(true);\n /**\n * Custom popover component\n */\n readonly popoverComponent = input<Type<any>>();\n\n /**\n * Custom popover component for clustering\n */\n readonly clusterPopoverComponent = input<Type<any>>();\n /**\n * Custom popover component\n */\n readonly popoverComponentProps = input<any>();\n /**\n * Close the popover on click\n *\n * @defaultValue true\n */\n readonly popoverCloseOnClick = input(true);\n\n /**\n * Padding (in pixels) applied to the map view when zooming to a cluster, preventing points from being clipped at the edges.\n * Specified as [top, right, bottom, left].\n *\n * @defaultValue [20, 20, 20, 20]\n */\n readonly fitClusterPadding = input<[number, number, number, number]>([20, 20, 20, 20]);\n /**\n * For Point geometry, padding (in pixels) to be cleared to fit the point inside the view after a click on it.\n * Values in the array are: [top, right, bottom, left].\n *\n * @defaultValue [20, 20, 20, 20]\n */\n readonly fitPointPadding = input<number[]>([20, 20, 20, 20]);\n /**\n * For GeoJson, padding (in pixels) to be cleared to fit the GeoJson inside the view after a click on it.\n * Values in the array are: [top, right, bottom, left].\n *\n * @defaultValue [20, 20, 20, 20]\n */\n readonly fitGeoJsonPadding = input<number[]>([20, 20, 20, 20]);\n /**\n * Show multiple worlds, including points that cross the 180th meridian.\n *\n * @defaultValue true\n */\n readonly multiWorld = input(true);\n /**\n * Show the label permanently next to the point.\n * Normally the label is shown on hover or click.\n * By enabling this it will always be visible next to the marker.\n *\n * @defaultValue false\n */\n readonly alwaysShowLabels = input(false);\n /**\n * Maximum number of characters per line for always displayed labels of a point.\n * If the label exceeds this limit, it will be wrapped or trimmed.\n * If set to 0, label trimming will be disabled.\n * This setting is effective only when {@link alwaysShowLabels} is enabled.\n * Important: Changing this is not recommended in most cases and may cause issues with positioning of the labels.\n *\n * @defaultValue 20\n */\n readonly maxLabelLineLength = input(20);\n /**\n * Maximum number of lines for always displayed labels of a point.\n * If the label exceeds this limit, it will be trimmed.\n * This setting is effective only when {@link alwaysShowLabels} is enabled and {@link maxLabelLineLength} is not 0.\n * Important: Changing this is not recommended in most cases and may cause issues with positioning of the labels.\n *\n * @defaultValue 3\n */\n readonly maxLabelLines = input(3);\n /**\n * Emitted when points on the map are selected or de-selected\n */\n readonly pointsSelected = output<MapPoint[]>();\n /**\n * Emitted when the points are available as features. So consumers can call methods like `zoomToPoints()` on the actual point list.\n */\n readonly pointsRefreshed = output<void>();\n\n protected readonly popover = viewChild.required(SiMapPopoverComponent);\n protected readonly popoverElement = viewChild.required<ElementRef, ElementRef>('popover', {\n read: ElementRef\n });\n protected readonly defaultTooltip = viewChild(SiMapTooltipComponent);\n protected readonly projectedTooltip = contentChild(SiMapTooltipComponent);\n protected readonly tooltip = computed(() => this.projectedTooltip() ?? this.defaultTooltip()!);\n protected readonly mapReference = viewChild.required<ElementRef<HTMLElement>>('map');\n /** OpenLayers map instance. */\n map?: Map;\n\n tooltipOverlay!: Overlay;\n popoverOverlay!: Overlay;\n /** @defaultValue false */\n isClicked = false;\n /** @defaultValue [] */\n features: Feature[] = [];\n selected?: Feature;\n targetFeature?: Feature;\n protected attributionsLabel = t(() => $localize`:@@SI_MAPS.ATTRIBUTIONS_BUTTON:Attributions`);\n protected zoomInLabel = t(() => $localize`:@@SI_MAPS.ZOOM_IN_BUTTON:Zoom in`);\n protected zoomOutLabel = t(() => $localize`:@@SI_MAPS.ZOOM_OUT_BUTTON:Zoom out`);\n protected zoomToDefaultLabel = t(() => $localize`:@@SI_MAPS.ZOOM_TO_DEFAULT_BUTTON:Reset zoom`);\n protected clusterInteraction?: SelectCluster;\n private selectedCluster?: Feature;\n private darkTheme: boolean | undefined = undefined;\n\n private readonly mapService = inject(MapService);\n private readonly ngZone = inject(NgZone);\n // We cannot use new inject function, as it may not be available in older translate version.\n // Older version could potentially be used in mobile.\n private readonly translateService =\n inject(SiTranslateServiceBuilder, { optional: true })?.buildService(inject(Injector)) ??\n inject(SiNoTranslateService);\n\n constructor() {\n const translations = this.translateService.translateSync([\n this.attributionsLabel,\n this.zoomInLabel,\n this.zoomOutLabel,\n this.zoomToDefaultLabel\n ]);\n this.attributionsLabel = translations[this.attributionsLabel];\n this.zoomInLabel = translations[this.zoomInLabel];\n this.zoomOutLabel = translations[this.zoomOutLabel];\n this.zoomToDefaultLabel = translations[this.zoomToDefaultLabel];\n }\n // this is to filter out non-data layers for performance of `forEachFeatureAtPixel()`\n private layerFilter = (layer: Layer<any>): boolean => {\n const name = layer.get(LAYER_NAME);\n return name === POINTS_LAYER || name === GEOJSON_LAYER;\n };\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (!this.map) {\n return;\n }\n\n if (changes.groupColors) {\n this.mapService.setTheme(this.groupColors());\n // refresh the style of points-layer to reflect the color changes.\n this.refreshLayersStyle([POINTS_LAYER]);\n }\n\n if (changes.points) {\n this.refresh(this.points() ?? [], false);\n }\n\n if (changes.geoJson || changes.styleFunction) {\n const geojsonLayer = this.map\n .getLayers()\n .getArray()\n .find(layer => layer.get(LAYER_NAME) === GEOJSON_LAYER) as VectorLayer<VectorSource>;\n if (geojsonLayer) {\n if (changes.geoJson) {\n // If geojson-layer is already present and there is change in geojson,\n // update the features of geojson-layer with the latest geojson.\n const geoJson = this.geoJson();\n const features =\n geoJson && Object.keys(geoJson).length\n ? new GeoJSON({ featureProjection: this.geoJsonProjection() }).readFeatures(geoJson)\n : [];\n this.ngZone.runOutsideAngular(() =>\n geojsonLayer.setSource(new VectorSource({ features }))\n );\n }\n if (changes.styleFunction) {\n // If there is some change in styleFunction, update the style of geojson-layer.\n this.ngZone.runOutsideAngular(() => geojsonLayer.setStyle(this.styleFunction()));\n }\n } else {\n // If geojson-layer is not present, and change is detected in geojson or styleFunction,\n // create a new geojson-layer.\n this.ngZone.runOutsideAngular(() => this.setGeoJsonLayer());\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.ngZone.runOutsideAngular(() => {\n this.init();\n this.map?.on('pointermove', event => this.onFeatureHover(event));\n this.map?.on('click', event => this.onClusterClick(event));\n });\n\n const dark = document.documentElement.classList.contains('app--dark');\n this.setTheme(dark, this.maptilerKey());\n\n setTimeout(() => this.fixCenter());\n }\n\n ngAfterViewChecked(): void {\n // making sure that if the map is not rendered updateSize() gets called\n // this is to make sure the map also gets rendered in ionic\n if (this.map && !this.map.isRendered()) {\n this.ngZone.runOutsideAngular(() => this.map!.updateSize());\n }\n }\n\n ngOnDestroy(): void {\n this.removePixelRatioListener();\n this.map?.setTarget(undefined);\n }\n\n @HostListener('window:theme-switch', ['$event'])\n onThemeSwitchInternal(event: Event): void {\n this.setTheme((event as CustomEvent).detail.dark, this.maptilerKey());\n }\n\n onThemeSwitch(dark: boolean): void {\n this.setTheme(dark, this.maptilerKey());\n }\n\n private removePixelRatioListener = (): void => {};\n\n private readonly updatePixelRatio = (): void => {\n // on browser zoom the pixel ratio changes. No other updates are needed as OL has a\n if (this.map && window.devicePixelRatio !== (this.map as any).pixelRatio_) {\n this.ngZone.runOutsideAngular(() => this.changeOpenLayerPixelRation());\n }\n\n this.removePixelRatioListener();\n const media = matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);\n media.addEventListener('change', this.updatePixelRatio);\n this.removePixelRatioListener = () =>\n media.removeEventListener('change', this.updatePixelRatio);\n };\n\n /**\n * Changes the pixel ration in OL which is not supported directly by OL.\n */\n private changeOpenLayerPixelRation(): void {\n if (!this.map) {\n return;\n }\n\n // need to reset cached styles as they contain pre-rendered canvases\n this.mapService.resetCaches();\n\n // set private property\n (this.map as any).pixelRatio_ = devicePixelRatio;\n\n // force redraw of all layers\n this.map!.getLayers().forEach(layer => {\n if (layer instanceof Layer) {\n const source = layer.getSource();\n if (source?.tilePixelRatio_ !== undefined) {\n source.tilePixelRatio_ = devicePixelRatio;\n source.refresh();\n }\n if (source instanceof Cluster) {\n source.getSource()?.changed();\n } else {\n source?.changed();\n }\n layer.changed();\n }\n });\n this.map.updateSize();\n }\n\n /**\n * Initialize map and it's layers\n */\n init(): void {\n const tooltipContainer = this.tooltip().nativeElement;\n const popoverContainer = this.popoverElement().nativeElement;\n const mapContainer = this.mapReference().nativeElement;\n const initialView = {\n constrainResolution: true,\n showFullExtent: true,\n center: [0, 0],\n zoom: 2,\n minZoom: 2,\n maxZoom: 24\n };\n\n this.tooltipOverlay = this.createOverlay(\n tooltipContainer,\n 'top-center',\n this.nativeProperties(),\n true\n );\n this.popoverOverlay = this.createOverlay(\n popoverContainer,\n 'top-center',\n this.nativeProperties()\n );\n\n const controls = defaultControls({\n attributionOptions: {\n label: '',\n tipLabel: this.attributionsLabel,\n expandClassName: 'element-state-info',\n collapseLabel: '',\n collapseClassName: 'element-left-2 flip-rtl'\n },\n zoomOptions: {\n zoomInLabel: '',\n zoomInTipLabel: this.zoomInLabel,\n zoomInClassName: 'element-plus',\n zoomOutLabel: '',\n zoomOutTipLabel: this.zoomOutLabel,\n zoomOutClassName: 'element-minus'\n },\n rotateOptions: {\n label: '',\n compassClassName: 'element-compass-needle'\n }\n });\n\n class ResetZoomControl extends Control {\n constructor(options: { label: string; callback: () => void }) {\n const button = document.createElement('button');\n button.className = 'element-zoom-reset';\n button.title = options.label;\n\n const element = document.createElement('div');\n element.className = 'ol-zoom-extent ol-unselectable ol-control';\n element.appendChild(button);\n\n super({ element: element });\n\n button.addEventListener('click', options.callback, false);\n }\n }\n\n controls.push(\n new ResetZoomControl({\n label: this.zoomToDefaultLabel,\n callback: () => {\n if (this.features.length) {\n this.zoomToFeatures(this.features, this.globalZoom());\n } else {\n // reset to original view\n this.map?.setView(new View(initialView));\n }\n }\n })\n );\n\n const nativeProperties = this.nativeProperties();\n if (nativeProperties?.controls) {\n nativeProperties.controls.forEach(e => controls.push(e));\n }\n\n this.map = new Map({\n controls,\n target: mapContainer,\n overlays: [this.tooltipOverlay, this.popoverOverlay],\n view: new View(initialView)\n });\n\n this.mapService.setZoomCallback(() => this.map?.getView().getZoom());\n\n this.mapService.setTheme(this.groupColors()); // Set theme before adding layers.\n\n const styleJsonValue = this.styleJson();\n if (styleJsonValue) {\n this.setMapStyle(undefined, undefined, styleJsonValue);\n }\n\n this.setGeoJsonLayer();\n\n const points = this.points();\n if (points?.length) {\n this.features = this.mapService.createFeatures(points, this.alwaysShowLabels());\n }\n this.setLayers();\n this.zoomToFeatures(this.features, this.globalZoom(), false);\n\n this.updatePixelRatio();\n }\n\n private centerValid(): boolean {\n const center = this.map?.getView()?.getCenter();\n return !!center && !isNaN(center[0]);\n }\n\n // workaround for center not being applied sometimes\n private fixCenter(): void {\n if (!this.centerValid()) {\n this.ngZone.runOutsideAngular(() => this.map?.getView()?.setCenter([0, 0]));\n }\n }\n\n /**\n * Setting up the layers for the map (cluster/vector layer)\n */\n private setLayers(): void {\n let layer: Layer;\n let labelLayer: Layer | undefined;\n const showLabels = this.features.some(feature => feature.getProperties().label?.text);\n if (this.cluster()) {\n const clusterLayer = this.mapService.clusterLayer(\n this.features,\n this.markerAnimation(),\n this.clusterDistance(),\n this.multiWorld()\n );\n\n this.clusterInteraction = new SelectCluster({\n maxZoom: this.featureClickZoom,\n zoomOnClick: this.autoZoomClusterClick,\n fitClusterPadding: this.fitClusterPadding,\n // Style the selection\n style: (feature: FeatureLike) => this.mapService.getClusterStyle(feature as Feature)\n });\n this.map?.addInteraction(this.clusterInteraction);\n\n if (showLabels) {\n labelLayer = this.mapService.labelLayer(\n this.features,\n this.multiWorld(),\n this.maxLabelLineLength(),\n this.maxLabelLines(),\n clusterLayer\n );\n }\n layer = clusterLayer;\n } else {\n layer = this.mapService.vectorLayer(this.features, this.multiWorld());\n if (showLabels) {\n labelLayer = this.mapService.labelLayer(\n this.features,\n this.multiWorld(),\n this.maxLabelLineLength(),\n this.maxLabelLines()\n );\n }\n }\n layer.set(LAYER_NAME, POINTS_LAYER);\n\n this.map?.addLayer(layer);\n if (labelLayer) {\n this.map?.addLayer(labelLayer);\n }\n }\n\n /**\n * Setting up the geoJson layer\n */\n setGeoJsonLayer(): void {\n const geoJson = this.geoJson();\n if (this.map && geoJson && Object.keys(geoJson).length > 0) {\n const layer = this.mapService.vectorLayer(\n new GeoJSON({ featureProjection: this.geoJsonProjection() }).readFeatures(geoJson),\n this.multiWorld()\n );\n layer.setStyle(this.styleFunction());\n layer.set(LAYER_NAME, GEOJSON_LAYER);\n this.ngZone.runOutsideAngular(() => this.map!.addLayer(layer));\n }\n }\n\n private setTheme(dark: boolean, maptilerKey?: string): void {\n if (maptilerKey && (this.darkTheme === undefined || this.darkTheme !== dark)) {\n this.setMapStyle(dark, maptilerKey);\n this.darkTheme = dark;\n }\n this.mapService.setTheme(this.groupColors());\n // reload the style to reflect the theme changes.\n this.refreshLayersStyle([POINTS_LAYER, GEOJSON_LAYER]);\n }\n\n private refreshLayersStyle(layerNames: string[]): void {\n this.ngZone.runOutsideAngular(() =>\n this.map\n ?.getLayers()\n .getArray()\n .forEach(layer => {\n if (layerNames.includes(layer.get(LAYER_NAME))) {\n (layer as VectorLayer<VectorSource>).setStyle(\n (layer as VectorLayer<VectorSource>).getStyle()\n );\n }\n })\n );\n }\n\n /**\n * Set Map style\n * @param dark - boolean if dark theme should be active or not\n * @param key - the api key for the maptiler styleJSON\n * @param styleJSON - a preexisting styleJSON as url with key already provided\n */\n setMapStyle(dark?: boolean, key?: string, styleJSON?: string): void {\n if (!this.map) {\n return;\n }\n\n if (styleJSON) {\n this.ngZone.runOutsideAngular(() => applyMapboxStyle(this.map!, styleJSON));\n } else if (key) {\n const layers = this.map.getLayers().getArray() as Layer[];\n layers.forEach((layer: Layer) => {\n if (layer.get('mapbox-source')) {\n this.map!.removeLayer(layer);\n }\n });\n this.mapboxStyles(siMapStyle(key, dark));\n }\n }\n\n /**\n * Set mapbox styles\n * @param styleJSON - the styleJSON as a JSON object\n */\n mapboxStyles(styleJSON: any): void {\n if (!this.map) {\n return;\n }\n this.ngZone.runOutsideAngular(() =>\n applyMapboxStyle(this.map!, styleJSON).then(mapOrLayer => {\n const map = mapOrLayer as Map;\n const layers = map.getLayers().getArray() as Layer[];\n layers.forEach((layer: Layer) => {\n if (layer.get('mapbox-source')) {\n // any needs to be used here otherwise library doesn't allow it\n (layer.getSource() as any).wrapX_ = this.multiWorld();\n this.map = map;\n }\n });\n })\n );\n }\n\n /**\n * Create overlay for tooltip and popover\n * @param nativeProperties - native properties\n * @param container - to create overlay in\n * @param position - overlay positioning\n */\n createOverlay(\n container: HTMLElement,\n position: Positioning,\n nativeProperties?: OverlayNativeProperties,\n isTooltip?: boolean\n ): Overlay {\n return (\n nativeProperties?.overlay ??\n new Overlay({\n element: container,\n positioning: position,\n // Stop event bubbling which allow to scroll in the popover\n stopEvent: true,\n autoPan: isTooltip ? true : false\n })\n );\n }\n\n /**\n * On feature hovering show tooltip and change cursor style\n * @param event - A hovering event\n */\n onFeatureHover(event: MapBrowserEvent): void {\n if (!this.map) {\n return;\n }\n\n const clusterHolder: ClusterHolder = {};\n const features = this.map.forEachFeatureAtPixel(\n event.pixel,\n feat => this.featureCallback(feat, clusterHolder),\n {\n hitTolerance: 2,\n layerFilter: this.layerFilter\n }\n );\n\n const element = this.map.getTargetElement();\n if (element) {\n // The cursor will change to pointer if displayPopoverOnClick is true or if Cluster Features are hovered.\n element.style.cursor =\n features?.length && (this.displayPopoverOnClick() || features.length > 1) ? 'pointer' : '';\n // The popover will be shown only for individual points, not for cluster.\n if (this.displayPopoverOnHover() && !this.isClicked) {\n if (features?.length === 1) {\n this.setPopOver(features[0], false, event);\n } else {\n this.popoverOverlay.setPosition(undefined);\n }\n return;\n }\n }\n\n this.doShowTooltip(features, clusterHolder.feature);\n }\n\n /** Display tooltip on hovering over feature type of Feature. */\n displayTooltip(feats: FeatureLike[]): void {\n if (!this.displayTooltipOnHover() || this.isClicked) {\n return;\n }\n for (const feat of feats) {\n const features = this.featureCallback(feat);\n if (features?.length === 1) {\n this.showTooltipContent(features[0]);\n return;\n }\n }\n }\n\n private doShowTooltip(features?: Feature[], cluster?: Feature): void {\n let shown = false;\n if (!this.isClicked && features?.length) {\n if (this.displayTooltipOnHover() && features?.length === 1) {\n shown = this.showTooltipContent(features[0]);\n } else if (this.selectedCluster !== cluster && this.displayTooltipOnClusterHover()) {\n shown = this.showClusterTooltipContent(features, cluster);\n }\n }\n if (!shown) {\n this.tooltipOverlay.setPosition(undefined);\n }\n }\n\n /**\n * Clicking on cluster event\n * @param event - openlayers event\n */\n onClusterClick(event: MapBrowserEvent): void {\n if (!this.map) {\n return;\n }\n if (!this.popoverCloseOnClick() && this.popoverElement()) {\n const popoverLoc = (\n this.popoverElement().nativeElement as HTMLElement\n ).firstElementChild!.getBoundingClientRect();\n const mapLoc = (this.mapReference().nativeElement as HTMLElement).getBoundingClientRect();\n const left = popoverLoc.left - mapLoc.left;\n const top = popoverLoc.top - mapLoc.top;\n const right = popoverLoc.right - mapLoc.left;\n const bottom = popoverLoc.bottom - mapLoc.top;\n if (\n left <= event.pixel[0] &&\n event.pixel[0] <= right &&\n top <= event.pixel[1] &&\n event.pixel[1] <= bottom\n ) {\n return;\n }\n }\n const clusterHolder: ClusterHolder = {};\n const clusterFeatures = this.map.forEachFeatureAtPixel(\n event.pixel,\n feat => this.featureCallback(feat, clusterHolder),\n {\n layerFilter: this.layerFilter\n }\n );\n if (clusterFeatures) {\n if (clusterFeatures.length > 1) {\n this.tooltipOverlay.setPosition(undefined);\n this.showClusterPopover(clusterHolder.feature!);\n this.emitSelection(clusterFeatures);\n } else if (clusterFeatures.length === 1) {\n if (clusterFeatures[0] instanceof RenderFeature) {\n this.closePopup();\n this.emitSelection();\n } else if (this.displayPopoverOnClick()) {\n this.featureClick(clusterFeatures[0], event, this.autoZoomFeatureClick());\n this.emitSelection(clusterFeatures);\n }\n }\n } else {\n this.closePopup();\n this.emitSelection();\n }\n }\n\n private emitSelection(features?: Feature[]): void {\n const points: MapPoint[] = (features ?? []).map(f => {\n const props = f.getProperties();\n return props.meta ?? (props as MapPoint);\n });\n this.ngZone.run(() => this.pointsSelected.emit(points));\n }\n\n /**\n * Zoom to cluster features\n * @param clusterFeatures - features to zoom in\n */\n zoomCluster(clusterFeatures: Feature[]): void {\n this.clusterInteraction?.zoomToCluster(clusterFeatures);\n }\n\n /**\n * Close popup\n */\n closePopup(): boolean {\n this.selectedCluster = undefined;\n this.popoverOverlay.setPosition(undefined);\n this.isClicked = false;\n return false;\n }\n\n /**\n * Return features inside feature object in case of cluster enabled/disabled\n * @param feat - feature to get features from\n */\n featureCallback(feat: FeatureLike, clusterHolder?: ClusterHolder): Feature[] | undefined {\n if (feat instanceof Feature) {\n const propFeatures = feat.getProperties().features;\n if (this.cluster() && propFeatures) {\n if (clusterHolder) {\n clusterHolder.feature = feat;\n }\n return propFeatures;\n }\n return [feat];\n }\n return undefined;\n }\n\n /**\n * Zoom to features, gets coordinates of points and creates bounding extent\n * @param points - list of points to zoom in, if empty all points will be zoomed to, need to be the same reference as the input\n * @param zoomLevel - number for level to zoom in\n */\n zoomToPoints(points: MapPoint[], zoomLevel: number, shouldAnimate = true): void {\n if (!points.length) {\n this.zoomToFeatures([], zoomLevel, shouldAnimate);\n } else {\n const features = points\n .map(point => this.points()?.indexOf(point))\n .filter(index => index !== undefined)\n .map(index => this.features[index]);\n this.zoomToFeatures(features, zoomLevel, shouldAnimate);\n }\n }\n\n /**\n * Zoom to features, gets coordinates of features and creates bounding extent\n * @param features - list of features to zoom in, if empty all features will be zoomed to\n * @param zoomLevel - number for level to zoom in\n */\n zoomToFeatures(features: Feature[], zoomLevel: number, shouldAnimate = true): void {\n if (!features.length) {\n features = this.features;\n }\n const coordinates: Coordinate[] = [];\n for (const f of features) {\n const coordinate = this.getFeatureCoordinate(f);\n if (coordinate) {\n coordinates.push(coordinate);\n }\n }\n this.zoomToCoordinates(coordinates, zoomLevel, shouldAnimate, this.fitPointPadding());\n }\n\n /**\n * Zoom to GeoJson using coordinates of point of click\n * @param coordinate - coordinates of point of click\n * @param zoomLevel - number for level to zoom in\n */\n zoomToGeoJson(coordinate: Coordinate, zoomLevel: number, shouldAnimate = true): void {\n this.zoomToCoordinates([coordinate], zoomLevel, shouldAnimate, this.fitGeoJsonPadding());\n }\n\n private zoomToCoordinates(\n coordinates: Coordinate[],\n maxZoom: number,\n animate = true,\n padding?: number[]\n ): void {\n this.ngZone.runOutsideAngular(() => {\n if (this.map && coordinates.length) {\n const view = this.map.getView();\n view.fit(olExtent.boundingExtent(coordinates), {\n duration: animate && this.centerValid() ? ANIMATION_DURATION : undefined,\n maxZoom,\n padding\n });\n }\n });\n }\n\n /**\n * Refresh points with new set of points\n * @param points - to refresh with\n */\n refresh(points: MapPoint[], zoomToFeatures = true): void {\n this.points.set(points);\n this.ngZone.runOutsideAngular(() => this.doRefresh(points, zoomToFeatures));\n }\n\n private doRefresh(points: MapPoint[], zoomToFeatures: boolean): void {\n if (!this.map) {\n return;\n }\n\n this.mapService.resetCaches();\n\n this.isClicked = false;\n this.clear();\n\n const layers = this.map.getLayers().getArray() as Layer[];\n this.features = this.mapService.createFeatures(points, this.alwaysShowLabels());\n\n layers.forEach((layer: Layer) => {\n const source = layer.getSource();\n\n if (source instanceof Cluster && this.cluster()) {\n const vectorSource = source.getSource();\n vectorSource?.addFeatures(this.features);\n } else if (source instanceof VectorSource) {\n source.addFeatures(this.features);\n }\n });\n\n if (zoomToFeatures) {\n this.zoomToFeatures([], this.globalZoom());\n }\n // Emit change event to notify consumers that the actual features are available.\n // This is necessary to call methods like `zoomToPoints()`\n this.ngZone.run(() => this.pointsRefreshed.emit());\n }\n\n clear(): void {\n this.ngZone.runOutsideAngular(() => this.doClear());\n }\n\n private doClear(): void {\n if (!this.map) {\n return;\n }\n\n this.mapService.resetCaches();\n\n this.hideOverlays();\n const layers = this.map.getLayers().getArray() as Layer[];\n\n layers.forEach((layer: Layer) => {\n const source = layer.getSource();\n\n if (source instanceof Cluster && this.cluster()) {\n const vectorSource = source.getSource();\n vectorSource?.clear();\n }\n\n if (source instanceof VectorSource) {\n source.clear();\n }\n });\n }\n\n /**\n * Selecting the certain point on map with API\n * @param point - which select\n */\n select(point: MapPoint, maxZoomLevel?: number): void {\n this.ngZone.runOutsideAngular(() => this.doSelect(point, maxZoomLevel));\n }\n\n private doSelect(point: MapPoint, maxZoomLevel?: number): void {\n if (!this.map) {\n return;\n }\n\n const featPoint: Feature[] = this.mapService.createFeatures([point], this.alwaysShowLabels());\n const ext = featPoint[0]?.getGeometry()?.getExtent();\n\n if (ext) {\n const center = olExtent.getCenter(ext);\n this.map.setView(\n new View({\n center: [center[0], center[1]],\n zoom: maxZoomLevel ?? this.featureSelectZoom()\n })\n );\n this.featureClick(featPoint[0]);\n this.emitSelection(featPoint);\n }\n }\n\n /** API for feature clicking with extra properties. */\n featureClick(feature: Feature, event?: any, zoom?: boolean): void {\n this.targetFeature = feature;\n this.isClicked = true;\n this.tooltipOverlay.setPosition(undefined);\n\n this.setPopOver(feature, zoom, event);\n }\n\n private setPopOver(feature: Feature, zoom: boolean | undefined, event: any): void {\n const extraProperties = feature.getProperties().extraProperties;\n const geometry = feature?.getGeometry();\n\n /*If a Point geometry is present on top of a GeoJson layer, and when clicked on the point,\n \"else if\" statement will prevent repetition of the popover render and zoom method.*/\n if (geometry && geometry instanceof Point) {\n if (zoom) {\n this.zoomToFeatures([feature], this.featureClickZoom());\n }\n const coordinates = geometry.getCoordinates();\n this.selected = feature;\n this.popoverOverlay.setPosition(coordinates);\n this.popoverOverlay.setOffset(this.mapService.getMarkerOffset(feature));\n this.popover().render({\n component: this.popoverComponent(),\n mapPoints: feature.getProperties() as MapPointMetaData\n });\n if (extraProperties) {\n feature.getProperties().click?.(extraProperties);\n }\n } else if (this.geoJson()) {\n const coordinates = event.coordinate;\n this.popoverOverlay.setPosition(coordinates);\n this.popoverOverlay.setOffset(this.mapService.getMarkerOffset(feature));\n this.popover().render({\n component: this.popoverComponent(),\n mapPoints: [feature.getProperties() as MapPointMetaData]\n });\n if (zoom) {\n this.zoomToGeoJson(coordinates, this.featureClickZoom());\n }\n }\n }\n\n /**\n * Show tooltip with content on hover over feature\n * @param feature - to show popup on\n */\n showTooltipContent(feature: Feature): boolean {\n const coordinates = this.getFeatureCoordinate(feature);\n if (coordinates) {\n this.tooltip().setTooltip(feature.getProperties().name as string);\n this.tooltipOverlay.setOffset(this.mapService.getMarkerOffset(feature));\n this.tooltipOverlay.setPosition(coordinates);\n return true;\n }\n return false;\n }\n\n /** Sends data into cluster tooltip based on number of\n * @param features - in it\n * */\n showClusterTooltipContent(features: Feature[], cluster?: Feature): boolean {\n const coordinates =\n this.getFeatureCoordinate(cluster) ?? this.calculateClusterCoordinates(features);\n\n const labels = features.map(f => f.getProperties().name);\n this.tooltip().setTooltip(labels);\n\n this.tooltipOverlay.setOffset([0, 20]);\n this.tooltipOverlay.setPosition(coordinates);\n return true;\n }\n\n hideOverlays(): void {\n this.tooltipOverlay.setPosition(undefined);\n this.popoverOverlay.setPosition(undefined);\n }\n\n private getFeatureCoordinate(feature?: Feature): Coordinate | undefined {\n const geometry = feature?.getGeometry();\n if (geometry instanceof Point) {\n return geometry.getCoordinates();\n }\n return undefined;\n }\n\n /**\n * Calculates cluster center coordinates (lon, lat) for cluster tooltip positioning base on\n * @param features - (lon, lan)\n */\n private calculateClusterCoordinates(features: Feature[]): [number, number] {\n let lon = 0;\n let lat = 0;\n for (const feat of features) {\n const coordinates = this.getFeatureCoordinate(feat);\n if (coordinates) {\n lon += coordinates[0];\n lat += coordinates[1];\n }\n }\n return [lon / features.length, lat / features.length];\n }\n\n private showClusterPopover(cluster: Feature<Geometry>): void {\n if (!cluster) {\n this.popoverOverlay.setPosition(undefined);\n return;\n }\n // Only show cluster popover when auto zoom on cluster click is disabled or when the zoom level is sufficient.\n const zoom = this.map?.getView().getZoom();\n const show = !this.autoZoomClusterClick() || (zoom && zoom >= this.clusterClickZoom());\n if (!show) {\n return;\n }\n this.popoverOverlay.setOffset([0, 20]);\n this.popoverOverlay.setPosition(this.getFeatureCoordinate(cluster));\n const features = cluster.getProperties().features as Feature<Geometry>[];\n this.popover().render({\n component: this.clusterPopoverComponent(),\n mapPoints: features.map(f => f.getProperties() as MapPointMetaData),\n map: this.map\n });\n // Remember the selected cluster to avoid showing the a tooltip for cluster which has an open popover.\n this.selectedCluster = cluster;\n }\n}\n","<div #map class=\"map\"></div>\n<ng-content select=\"si-map-tooltip\">\n <si-map-tooltip />\n</ng-content>\n<si-map-popover #popover />\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiMapPopoverComponent } from './components/si-map-popover/si-map-popover.component';\nimport { SiMapTooltipComponent } from './components/si-map-tooltip/si-map-tooltip.component';\nimport { SiMapComponent } from './si-map.component';\n\n@NgModule({\n imports: [SiMapComponent, SiMapPopoverComponent, SiMapTooltipComponent],\n exports: [SiMapComponent]\n})\nexport class SiMapModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './components/index';\nexport * from './models/index';\nexport * from './services/map.service';\nexport * from './si-map.module';\nexport * from './si-map.component';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiMapModule } from './components/si-map/index';\n\n@NgModule({\n exports: [SiMapModule]\n})\nexport class SiMapsNgModule {}\n\n/**\n * @deprecated Use {@link SiMapsNgModule} instead. The `Simpl` prefix is deprecated and will be removed in v51.\n */\nexport { SiMapsNgModule as SimplMapsNgModule };\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './components/si-map/index';\nexport * from '@siemens/maps-ng/translate';\nexport * from './public-api.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["createEmptyExtent","defaultControls","applyMapboxStyle"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@siemens/maps-ng",
|
|
3
3
|
"description": "Element maps library based on OpenLayers.",
|
|
4
|
-
"version": "51.0.
|
|
4
|
+
"version": "51.0.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"@angular/common": "22",
|
|
23
23
|
"@angular/core": "22",
|
|
24
|
-
"@siemens/element-theme": "51.0.
|
|
25
|
-
"@siemens/element-translate-ng": "51.0.
|
|
26
|
-
"@siemens/map-styles": "51.0.
|
|
24
|
+
"@siemens/element-theme": "51.0.1",
|
|
25
|
+
"@siemens/element-translate-ng": "51.0.1",
|
|
26
|
+
"@siemens/map-styles": "51.0.1",
|
|
27
27
|
"ol": "~10.6.0 || ~10.7.0 || ~10.8.0 || ~10.9.0 || ~10.10.0",
|
|
28
28
|
"ol-ext": "^4.0.24",
|
|
29
29
|
"ol-mapbox-style": "^13.1.0"
|