@regionerne/gis-komponent 0.0.97 → 0.0.99

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.
@@ -20,7 +20,7 @@ import ol_control_mouse from 'ol/control/MousePosition';
20
20
  import ol_control_scale from 'ol/control/ScaleLine';
21
21
  import { register } from 'ol/proj/proj4';
22
22
  import proj4 from 'proj4';
23
- import { Control, Rotate as Rotate$1 } from 'ol/control';
23
+ import { Control } from 'ol/control';
24
24
  import { TileWMS, Vector } from 'ol/source';
25
25
  import { Subject, BehaviorSubject, tap, switchMap, EMPTY, map, combineLatest, Observable, debounceTime, distinctUntilChanged, filter, take, of, ReplaySubject, interval, catchError, forkJoin } from 'rxjs';
26
26
  import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';
@@ -233,6 +233,11 @@ class LayerHelperService {
233
233
  set map(value) {
234
234
  this._map = value;
235
235
  }
236
+ getParamsObject(layer) {
237
+ let params = layer.wmsParameters.reduce((current, value) => { return current.append(value.key, value.value); }, new HttpParams());
238
+ params = layer.authKeyName ? params.append(layer.authKeyName, layer.token) : params;
239
+ return params;
240
+ }
236
241
  setName(layer, name) {
237
242
  layer.set(this._layerNameKey, name);
238
243
  }
@@ -355,20 +360,20 @@ class LayerHelperService {
355
360
  }
356
361
  });
357
362
  }
358
- toggleLayerInMap(map, layerId) {
363
+ toggleLayerInMap(map, layerId, value = undefined) {
359
364
  map.getLayers().getArray().forEach(layergroup => {
360
365
  if (layergroup instanceof OLLayerGroup) {
361
366
  layergroup.getLayers().getArray().forEach(l => {
362
367
  if (l.get(this._layerDbIdKey) === layerId) {
363
368
  const current = l.getVisible();
364
- l.setVisible(!current);
369
+ l.setVisible(value != undefined ? value : !current);
365
370
  }
366
371
  });
367
372
  // DMP layer
368
373
  }
369
374
  else if (layergroup.get('dmp') && layergroup.get(this._layerDbIdKey) === layerId) {
370
375
  const current = layergroup.getVisible();
371
- layergroup.setVisible(!current);
376
+ layergroup.setVisible(value != undefined ? value : !current);
372
377
  }
373
378
  });
374
379
  }
@@ -794,10 +799,10 @@ class WidgetConstants {
794
799
  static searchWidth = 374;
795
800
  static activeObjectsHeight = 80;
796
801
  static activeObjectsWidth = 350;
797
- static layerSelectorHeight = 209;
802
+ static layerSelectorHeight = 610;
798
803
  static layerSelectorWidth = 429;
799
- static legendsHeight = 341;
800
- static legendsWidth = 296;
804
+ static legendsHeight = 610;
805
+ static legendsWidth = 350;
801
806
  static toolboxDefaultX = 29;
802
807
  static toolboxDefaultY = 120;
803
808
  static searchDefaultX = 29;
@@ -2297,6 +2302,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
2297
2302
 
2298
2303
  class SearchProviderBase {
2299
2304
  _http = inject(HttpClient);
2305
+ _layerHelperService = inject(LayerHelperService);
2300
2306
  wfsFormat = new WFS();
2301
2307
  _serializer = new XMLSerializer();
2302
2308
  search(searchValue, maxCount) {
@@ -2314,8 +2320,9 @@ class SearchProviderBase {
2314
2320
  filter
2315
2321
  });
2316
2322
  const body = this._serializer.serializeToString(searchFeature);
2323
+ let params = this._layerHelperService.getParamsObject(layer);
2317
2324
  // Call the post without generic <WfsFeatureCollection>, because the GeoServer will return a 200 and an error as xml. Handle the deserialize manually instead.
2318
- const req$ = this._http.post(layer.baseUrl.replace('wms', 'wfs'), body, { headers: { 'Content-Type': 'text/xml' }, responseType: 'text', observe: 'response' }).pipe(map(r => {
2325
+ const req$ = this._http.post(layer.baseUrl.replace('wms', 'wfs'), body, { headers: { 'Content-Type': 'text/xml' }, params, responseType: 'text', observe: 'response' }).pipe(map(r => {
2319
2326
  try {
2320
2327
  const result = JSON.parse(r.body ?? '');
2321
2328
  return this.map(layer, result);
@@ -2900,7 +2907,7 @@ class SelectedFeatureInfoComponent {
2900
2907
  if (this.features) {
2901
2908
  this.features.forEach(item => {
2902
2909
  if (this.collapsedStates[item.layerName] === undefined) {
2903
- this.collapsedStates[item.layerName] = true;
2910
+ this.collapsedStates[item.layerName] = false;
2904
2911
  }
2905
2912
  });
2906
2913
  }
@@ -2914,11 +2921,11 @@ class SelectedFeatureInfoComponent {
2914
2921
  return this.collapsedStates[layerName] || false;
2915
2922
  }
2916
2923
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SelectedFeatureInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2917
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SelectedFeatureInfoComponent, isStandalone: true, selector: "selected-feature-info", host: { properties: { "hidden": "this.hidden" } }, ngImport: i0, template: "\n@if(features && features.length > 0) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \n @if(item.values && item.values.length >0) {\n <div class=\"feature-section\">\n <span (click)=\"toggleCollapse(item.layerName)\" class=\"collapsible-header\">\n <mat-icon class=\"collapse-icon\">\n {{ isCollapsed(item.layerName) ? 'keyboard_arrow_up' : 'expand_more' }}\n </mat-icon>\n {{item.layerName}}\n </span>\n <div class=\"feature-content\" [class.collapsed]=\"isCollapsed(item.layerName)\">\n @for(feature of item.values; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-row\">\n <div class=\"feature-label\">\n {{ kv.value.name }}:\n </div>\n <div class=\"feature-value\">\n <ng-container [ngSwitch]=\"kv.value.kind\">\n <img *ngSwitchCase=\"'img'\" [src]=\"kv.value.data\" alt=\"{{ kv.key }}\" style=\"max-width:240px;\" />\n <a *ngSwitchCase=\"'url'\" [href]=\"kv.value.data\" target=\"_blank\" rel=\"noopener noreferrer\">\n {{ kv.key }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n <span *ngSwitchDefault>{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n}\n", styles: ["::ng-deep .selected-features-wrapper{background:#4c4d51;border-radius:5px;box-shadow:0 4px 6px #00000012,0 10px 20px #0000001a;max-width:420px;max-height:450px;overflow-y:auto;position:relative}::ng-deep .selected-features-wrapper::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper .feature-section{padding:0;margin-bottom:8px;position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.03);transition:all .2s ease}::ng-deep .selected-features-wrapper .feature-section:not(:last-child){margin-bottom:10px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{color:#fff;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;padding:14px 16px 14px 20px;background:#ffffff26;border-bottom:1px solid rgba(255,255,255,.05);transition:all .2s ease;position:relative;z-index:2;font-size:14px;letter-spacing:.3px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover{background:#ffffff0d}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover:before{opacity:1}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:22px;width:22px;height:22px;transition:transform .3s ease;color:#fff;opacity:.9}::ng-deep .selected-features-wrapper .feature-section .feature-content{max-height:350px;overflow:auto;transition:max-height .3s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:1;padding:12px 16px 12px 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content.collapsed{max-height:0;opacity:0;padding:0 16px 0 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper .feature-section .feature-item{background:#ffffff0d;border-radius:6px;padding:12px;transition:all .2s ease;position:relative;color:#fff;border:1px solid rgba(255,255,255,.02);margin-bottom:8px}::ng-deep .selected-features-wrapper .feature-section .feature-item:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-row{display:flex;align-items:flex-start;margin-bottom:10px;gap:12px;padding:2px 0}::ng-deep .selected-features-wrapper .feature-row:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-label{color:#bdc1c3cc;min-width:120px;flex-shrink:0;font-size:13px;letter-spacing:.2px}::ng-deep .selected-features-wrapper .feature-value{color:#fff;flex-grow:1;font-size:13px;word-break:break-word}::ng-deep .selected-features-wrapper img{margin-top:4px;border-radius:6px;border:1px solid rgba(255,255,255,.1);max-width:100%;max-height:180px;display:block;box-shadow:0 2px 8px #0003;transition:all .2s ease}::ng-deep .selected-features-wrapper img:hover{transform:scale(1.02);box-shadow:0 4px 12px #0000004d}::ng-deep .selected-features-wrapper a{color:#89bbeb!important;font-weight:500;transition:all .2s ease;text-decoration:none;position:relative;padding:2px 4px;border-radius:4px;display:inline-flex;align-items:center;gap:4px;background:#89bbeb0d}::ng-deep .selected-features-wrapper a:hover{color:#a8ccf0!important;background:#89bbeb1a}::ng-deep .selected-features-wrapper a .link-icon{font-size:16px;width:16px;height:16px;opacity:.7}::ng-deep .selected-features-wrapper div[ng-reflect-ng-for-of]{display:none}@media (max-width: 768px){::ng-deep .selected-features-wrapper{max-width:100%;border-radius:12px 12px 0 0;max-height:70vh}::ng-deep .selected-features-wrapper .feature-section{margin-bottom:6px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{padding:12px 16px;font-size:15px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{right:10px;font-size:20px;width:20px;height:20px}::ng-deep .selected-features-wrapper .feature-section .feature-content{padding:10px 12px 10px 16px}::ng-deep .selected-features-wrapper .feature-row{flex-direction:column;gap:4px;margin-bottom:12px}::ng-deep .selected-features-wrapper .feature-row:before{left:4px}::ng-deep .selected-features-wrapper .feature-label{min-width:auto;font-size:12px;color:#89bbeb}::ng-deep .selected-features-wrapper .feature-value{padding-left:8px;border-left:2px solid rgba(137,187,235,.2);font-size:12px}::ng-deep .selected-features-wrapper .feature-item{padding:10px}::ng-deep .selected-features-wrapper .feature-item:hover{transform:none}::ng-deep .selected-features-wrapper img{max-height:150px}}@media (max-width: 480px){::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{font-size:14px;padding:10px 14px}::ng-deep .selected-features-wrapper .feature-item{padding:8px}}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.feature-content:not(.collapsed) .feature-item{animation:slideIn .2s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i1$2.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
2924
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SelectedFeatureInfoComponent, isStandalone: true, selector: "selected-feature-info", host: { properties: { "hidden": "this.hidden" } }, ngImport: i0, template: "\n@if(features && features.length > 0) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \n @if(item.values && item.values.length >0) {\n <div class=\"feature-section\">\n <span (click)=\"toggleCollapse(item.layerName)\" class=\"collapsible-header\">\n <mat-icon class=\"collapse-icon\">\n {{ isCollapsed(item.layerName) ? 'expand_more' : 'keyboard_arrow_up' }}\n </mat-icon>\n {{item.layerName}}\n </span>\n <div class=\"feature-content\" [class.collapsed]=\"isCollapsed(item.layerName)\">\n @for(feature of item.values; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-row\">\n <div class=\"feature-label\">\n {{ kv.value.name }}:\n </div>\n <div class=\"feature-value\">\n <ng-container [ngSwitch]=\"kv.value.kind\">\n <img *ngSwitchCase=\"'img'\" [src]=\"kv.value.data\" alt=\"{{ kv.key }}\" style=\"max-width:240px;\" />\n <a *ngSwitchCase=\"'url'\" [href]=\"kv.value.data\" target=\"_blank\" rel=\"noopener noreferrer\">\n {{ kv.key }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n <span *ngSwitchDefault>{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n}\n", styles: ["::ng-deep .selected-features-wrapper{background:#4c4d51;border-radius:5px;box-shadow:0 4px 6px #00000012,0 10px 20px #0000001a;max-width:420px;max-height:450px;overflow-y:auto;position:relative}::ng-deep .selected-features-wrapper::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper .feature-section{padding:0;margin-bottom:8px;position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.03);transition:all .2s ease}::ng-deep .selected-features-wrapper .feature-section:not(:last-child){margin-bottom:10px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{color:#fff;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;padding:14px 16px 14px 20px;background:#ffffff26;border-bottom:1px solid rgba(255,255,255,.05);transition:all .2s ease;position:relative;z-index:2;font-size:14px;letter-spacing:.3px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover{background:#ffffff0d}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover:before{opacity:1}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:22px;width:22px;height:22px;transition:transform .3s ease;color:#fff;opacity:.9}::ng-deep .selected-features-wrapper .feature-section .feature-content{max-height:350px;overflow:auto;transition:max-height .3s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:1;padding:12px 16px 12px 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content.collapsed{max-height:0;opacity:0;padding:0 16px 0 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper .feature-section .feature-item{background:#ffffff0d;border-radius:6px;padding:12px;transition:all .2s ease;position:relative;color:#fff;border:1px solid rgba(255,255,255,.02);margin-bottom:8px}::ng-deep .selected-features-wrapper .feature-section .feature-item:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-row{display:flex;align-items:flex-start;margin-bottom:10px;gap:12px;padding:2px 0}::ng-deep .selected-features-wrapper .feature-row:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-label{color:#bdc1c3cc;min-width:120px;flex-shrink:0;font-size:13px;letter-spacing:.2px}::ng-deep .selected-features-wrapper .feature-value{color:#fff;flex-grow:1;font-size:13px;word-break:break-word}::ng-deep .selected-features-wrapper img{margin-top:4px;border-radius:6px;border:1px solid rgba(255,255,255,.1);max-width:100%;max-height:180px;display:block;box-shadow:0 2px 8px #0003;transition:all .2s ease}::ng-deep .selected-features-wrapper img:hover{transform:scale(1.02);box-shadow:0 4px 12px #0000004d}::ng-deep .selected-features-wrapper a{color:#89bbeb!important;font-weight:500;transition:all .2s ease;text-decoration:none;position:relative;padding:2px 4px;border-radius:4px;display:inline-flex;align-items:center;gap:4px;background:#89bbeb0d}::ng-deep .selected-features-wrapper a:hover{color:#a8ccf0!important;background:#89bbeb1a}::ng-deep .selected-features-wrapper a .link-icon{font-size:16px;width:16px;height:16px;opacity:.7}::ng-deep .selected-features-wrapper div[ng-reflect-ng-for-of]{display:none}@media (max-width: 768px){::ng-deep .selected-features-wrapper{max-width:100%;border-radius:12px 12px 0 0;max-height:70vh}::ng-deep .selected-features-wrapper .feature-section{margin-bottom:6px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{padding:12px 16px;font-size:15px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{right:10px;font-size:20px;width:20px;height:20px}::ng-deep .selected-features-wrapper .feature-section .feature-content{padding:10px 12px 10px 16px}::ng-deep .selected-features-wrapper .feature-row{flex-direction:column;gap:4px;margin-bottom:12px}::ng-deep .selected-features-wrapper .feature-row:before{left:4px}::ng-deep .selected-features-wrapper .feature-label{min-width:auto;font-size:12px;color:#89bbeb}::ng-deep .selected-features-wrapper .feature-value{padding-left:8px;border-left:2px solid rgba(137,187,235,.2);font-size:12px}::ng-deep .selected-features-wrapper .feature-item{padding:10px}::ng-deep .selected-features-wrapper .feature-item:hover{transform:none}::ng-deep .selected-features-wrapper img{max-height:150px}}@media (max-width: 480px){::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{font-size:14px;padding:10px 14px}::ng-deep .selected-features-wrapper .feature-item{padding:8px}}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.feature-content:not(.collapsed) .feature-item{animation:slideIn .2s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i1$2.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
2918
2925
  }
2919
2926
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SelectedFeatureInfoComponent, decorators: [{
2920
2927
  type: Component,
2921
- args: [{ selector: 'selected-feature-info', imports: [CommonModule, FormsModule, AsyncPipe, JsonPipe, MatButtonModule, MatIconModule], template: "\n@if(features && features.length > 0) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \n @if(item.values && item.values.length >0) {\n <div class=\"feature-section\">\n <span (click)=\"toggleCollapse(item.layerName)\" class=\"collapsible-header\">\n <mat-icon class=\"collapse-icon\">\n {{ isCollapsed(item.layerName) ? 'keyboard_arrow_up' : 'expand_more' }}\n </mat-icon>\n {{item.layerName}}\n </span>\n <div class=\"feature-content\" [class.collapsed]=\"isCollapsed(item.layerName)\">\n @for(feature of item.values; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-row\">\n <div class=\"feature-label\">\n {{ kv.value.name }}:\n </div>\n <div class=\"feature-value\">\n <ng-container [ngSwitch]=\"kv.value.kind\">\n <img *ngSwitchCase=\"'img'\" [src]=\"kv.value.data\" alt=\"{{ kv.key }}\" style=\"max-width:240px;\" />\n <a *ngSwitchCase=\"'url'\" [href]=\"kv.value.data\" target=\"_blank\" rel=\"noopener noreferrer\">\n {{ kv.key }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n <span *ngSwitchDefault>{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n}\n", styles: ["::ng-deep .selected-features-wrapper{background:#4c4d51;border-radius:5px;box-shadow:0 4px 6px #00000012,0 10px 20px #0000001a;max-width:420px;max-height:450px;overflow-y:auto;position:relative}::ng-deep .selected-features-wrapper::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper .feature-section{padding:0;margin-bottom:8px;position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.03);transition:all .2s ease}::ng-deep .selected-features-wrapper .feature-section:not(:last-child){margin-bottom:10px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{color:#fff;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;padding:14px 16px 14px 20px;background:#ffffff26;border-bottom:1px solid rgba(255,255,255,.05);transition:all .2s ease;position:relative;z-index:2;font-size:14px;letter-spacing:.3px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover{background:#ffffff0d}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover:before{opacity:1}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:22px;width:22px;height:22px;transition:transform .3s ease;color:#fff;opacity:.9}::ng-deep .selected-features-wrapper .feature-section .feature-content{max-height:350px;overflow:auto;transition:max-height .3s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:1;padding:12px 16px 12px 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content.collapsed{max-height:0;opacity:0;padding:0 16px 0 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper .feature-section .feature-item{background:#ffffff0d;border-radius:6px;padding:12px;transition:all .2s ease;position:relative;color:#fff;border:1px solid rgba(255,255,255,.02);margin-bottom:8px}::ng-deep .selected-features-wrapper .feature-section .feature-item:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-row{display:flex;align-items:flex-start;margin-bottom:10px;gap:12px;padding:2px 0}::ng-deep .selected-features-wrapper .feature-row:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-label{color:#bdc1c3cc;min-width:120px;flex-shrink:0;font-size:13px;letter-spacing:.2px}::ng-deep .selected-features-wrapper .feature-value{color:#fff;flex-grow:1;font-size:13px;word-break:break-word}::ng-deep .selected-features-wrapper img{margin-top:4px;border-radius:6px;border:1px solid rgba(255,255,255,.1);max-width:100%;max-height:180px;display:block;box-shadow:0 2px 8px #0003;transition:all .2s ease}::ng-deep .selected-features-wrapper img:hover{transform:scale(1.02);box-shadow:0 4px 12px #0000004d}::ng-deep .selected-features-wrapper a{color:#89bbeb!important;font-weight:500;transition:all .2s ease;text-decoration:none;position:relative;padding:2px 4px;border-radius:4px;display:inline-flex;align-items:center;gap:4px;background:#89bbeb0d}::ng-deep .selected-features-wrapper a:hover{color:#a8ccf0!important;background:#89bbeb1a}::ng-deep .selected-features-wrapper a .link-icon{font-size:16px;width:16px;height:16px;opacity:.7}::ng-deep .selected-features-wrapper div[ng-reflect-ng-for-of]{display:none}@media (max-width: 768px){::ng-deep .selected-features-wrapper{max-width:100%;border-radius:12px 12px 0 0;max-height:70vh}::ng-deep .selected-features-wrapper .feature-section{margin-bottom:6px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{padding:12px 16px;font-size:15px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{right:10px;font-size:20px;width:20px;height:20px}::ng-deep .selected-features-wrapper .feature-section .feature-content{padding:10px 12px 10px 16px}::ng-deep .selected-features-wrapper .feature-row{flex-direction:column;gap:4px;margin-bottom:12px}::ng-deep .selected-features-wrapper .feature-row:before{left:4px}::ng-deep .selected-features-wrapper .feature-label{min-width:auto;font-size:12px;color:#89bbeb}::ng-deep .selected-features-wrapper .feature-value{padding-left:8px;border-left:2px solid rgba(137,187,235,.2);font-size:12px}::ng-deep .selected-features-wrapper .feature-item{padding:10px}::ng-deep .selected-features-wrapper .feature-item:hover{transform:none}::ng-deep .selected-features-wrapper img{max-height:150px}}@media (max-width: 480px){::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{font-size:14px;padding:10px 14px}::ng-deep .selected-features-wrapper .feature-item{padding:8px}}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.feature-content:not(.collapsed) .feature-item{animation:slideIn .2s ease-out}\n"] }]
2928
+ args: [{ selector: 'selected-feature-info', imports: [CommonModule, FormsModule, AsyncPipe, JsonPipe, MatButtonModule, MatIconModule], template: "\n@if(features && features.length > 0) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \n @if(item.values && item.values.length >0) {\n <div class=\"feature-section\">\n <span (click)=\"toggleCollapse(item.layerName)\" class=\"collapsible-header\">\n <mat-icon class=\"collapse-icon\">\n {{ isCollapsed(item.layerName) ? 'expand_more' : 'keyboard_arrow_up' }}\n </mat-icon>\n {{item.layerName}}\n </span>\n <div class=\"feature-content\" [class.collapsed]=\"isCollapsed(item.layerName)\">\n @for(feature of item.values; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-row\">\n <div class=\"feature-label\">\n {{ kv.value.name }}:\n </div>\n <div class=\"feature-value\">\n <ng-container [ngSwitch]=\"kv.value.kind\">\n <img *ngSwitchCase=\"'img'\" [src]=\"kv.value.data\" alt=\"{{ kv.key }}\" style=\"max-width:240px;\" />\n <a *ngSwitchCase=\"'url'\" [href]=\"kv.value.data\" target=\"_blank\" rel=\"noopener noreferrer\">\n {{ kv.key }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n <span *ngSwitchDefault>{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n}\n", styles: ["::ng-deep .selected-features-wrapper{background:#4c4d51;border-radius:5px;box-shadow:0 4px 6px #00000012,0 10px 20px #0000001a;max-width:420px;max-height:450px;overflow-y:auto;position:relative}::ng-deep .selected-features-wrapper::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}::ng-deep .selected-features-wrapper::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .selected-features-wrapper .feature-section{padding:0;margin-bottom:8px;position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.03);transition:all .2s ease}::ng-deep .selected-features-wrapper .feature-section:not(:last-child){margin-bottom:10px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{color:#fff;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;padding:14px 16px 14px 20px;background:#ffffff26;border-bottom:1px solid rgba(255,255,255,.05);transition:all .2s ease;position:relative;z-index:2;font-size:14px;letter-spacing:.3px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover{background:#ffffff0d}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header:hover:before{opacity:1}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:22px;width:22px;height:22px;transition:transform .3s ease;color:#fff;opacity:.9}::ng-deep .selected-features-wrapper .feature-section .feature-content{max-height:350px;overflow:auto;transition:max-height .3s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:1;padding:12px 16px 12px 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content.collapsed{max-height:0;opacity:0;padding:0 16px 0 20px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar{width:12px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .selected-features-wrapper .feature-section .feature-content::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .selected-features-wrapper .feature-section .feature-item{background:#ffffff0d;border-radius:6px;padding:12px;transition:all .2s ease;position:relative;color:#fff;border:1px solid rgba(255,255,255,.02);margin-bottom:8px}::ng-deep .selected-features-wrapper .feature-section .feature-item:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-row{display:flex;align-items:flex-start;margin-bottom:10px;gap:12px;padding:2px 0}::ng-deep .selected-features-wrapper .feature-row:last-child{margin-bottom:0}::ng-deep .selected-features-wrapper .feature-label{color:#bdc1c3cc;min-width:120px;flex-shrink:0;font-size:13px;letter-spacing:.2px}::ng-deep .selected-features-wrapper .feature-value{color:#fff;flex-grow:1;font-size:13px;word-break:break-word}::ng-deep .selected-features-wrapper img{margin-top:4px;border-radius:6px;border:1px solid rgba(255,255,255,.1);max-width:100%;max-height:180px;display:block;box-shadow:0 2px 8px #0003;transition:all .2s ease}::ng-deep .selected-features-wrapper img:hover{transform:scale(1.02);box-shadow:0 4px 12px #0000004d}::ng-deep .selected-features-wrapper a{color:#89bbeb!important;font-weight:500;transition:all .2s ease;text-decoration:none;position:relative;padding:2px 4px;border-radius:4px;display:inline-flex;align-items:center;gap:4px;background:#89bbeb0d}::ng-deep .selected-features-wrapper a:hover{color:#a8ccf0!important;background:#89bbeb1a}::ng-deep .selected-features-wrapper a .link-icon{font-size:16px;width:16px;height:16px;opacity:.7}::ng-deep .selected-features-wrapper div[ng-reflect-ng-for-of]{display:none}@media (max-width: 768px){::ng-deep .selected-features-wrapper{max-width:100%;border-radius:12px 12px 0 0;max-height:70vh}::ng-deep .selected-features-wrapper .feature-section{margin-bottom:6px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{padding:12px 16px;font-size:15px}::ng-deep .selected-features-wrapper .feature-section span.collapsible-header .collapse-icon{right:10px;font-size:20px;width:20px;height:20px}::ng-deep .selected-features-wrapper .feature-section .feature-content{padding:10px 12px 10px 16px}::ng-deep .selected-features-wrapper .feature-row{flex-direction:column;gap:4px;margin-bottom:12px}::ng-deep .selected-features-wrapper .feature-row:before{left:4px}::ng-deep .selected-features-wrapper .feature-label{min-width:auto;font-size:12px;color:#89bbeb}::ng-deep .selected-features-wrapper .feature-value{padding-left:8px;border-left:2px solid rgba(137,187,235,.2);font-size:12px}::ng-deep .selected-features-wrapper .feature-item{padding:10px}::ng-deep .selected-features-wrapper .feature-item:hover{transform:none}::ng-deep .selected-features-wrapper img{max-height:150px}}@media (max-width: 480px){::ng-deep .selected-features-wrapper .feature-section span.collapsible-header{font-size:14px;padding:10px 14px}::ng-deep .selected-features-wrapper .feature-item{padding:8px}}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.feature-content:not(.collapsed) .feature-item{animation:slideIn .2s ease-out}\n"] }]
2922
2929
  }], propDecorators: { hidden: [{
2923
2930
  type: HostBinding,
2924
2931
  args: ['hidden']
@@ -4951,6 +4958,7 @@ class WFSSearchService {
4951
4958
  _searcheableLayers = [];
4952
4959
  geoJsonFormat = new GeoJSON$1({ dataProjection: 'EPSG:25832', featureProjection: 'EPSG:25832' });
4953
4960
  _serializer = new XMLSerializer();
4961
+ _layerHelper = inject(LayerHelperService);
4954
4962
  search(searchValue, geometry, maxCount = 5) {
4955
4963
  const wftSearches = [];
4956
4964
  this._searcheableLayers.flatMap(layer => {
@@ -4966,6 +4974,7 @@ class WFSSearchService {
4966
4974
  filter
4967
4975
  });
4968
4976
  const fieldsToExclude = new Set(layer.fieldsToExcludeFromInfoFromInfo.split(',').map(f => f.toLowerCase().trim()));
4977
+ const headers = this._layerHelper.getParamsObject(layer);
4969
4978
  wftSearches.push(this._http.post(layer.baseUrl.replace('wms', 'wfs'), this._serializer.serializeToString(searchFeature), { headers: { 'Content-Type': 'text/xml' }, responseType: 'json' }).pipe(map$1(r => {
4970
4979
  const result = {
4971
4980
  title: layer.name,
@@ -5084,7 +5093,8 @@ class MapSearchComponent {
5084
5093
  .filter(layer => layer.wfsSearchable && visibleLayerIds.includes(layer.id))
5085
5094
  .map(layer => ({ featureType: layer.layers, baseUrl: layer.baseUrl, name: layer.name,
5086
5095
  headerField: layer.headerField, searchField: layer.searchField, geometryField: layer.geometryField,
5087
- fieldsToExcludeFromInfoFromInfo: layer.fieldsToExcludeFromInfoFromInfo }));
5096
+ fieldsToExcludeFromInfoFromInfo: layer.fieldsToExcludeFromInfoFromInfo,
5097
+ authKeyName: layer.authKeyName, wmsParameters: layer.wmsParameters, token: layer.token }));
5088
5098
  this._wfsSearch.setSearcheableLayers(searcheableLayers);
5089
5099
  }
5090
5100
  }
@@ -5325,11 +5335,11 @@ class LegendsListComponent {
5325
5335
  }
5326
5336
  return this._layerService.getByIds(layerIdsCachedToDisplay)
5327
5337
  .pipe(switchMap(layers => {
5328
- const enriched$ = layers.map(layer => this.resolveLegendImage(layer));
5338
+ const enriched$ = layers.map(layer => this._resolveLegendImage(layer));
5329
5339
  return forkJoin(enriched$); // Wait until all items are enriched
5330
5340
  }));
5331
5341
  }
5332
- resolveLegendImage(layer) {
5342
+ _resolveLegendImage(layer) {
5333
5343
  if (layer.legend?.imageName) {
5334
5344
  return of({
5335
5345
  ...layer,
@@ -5344,7 +5354,8 @@ class LegendsListComponent {
5344
5354
  }
5345
5355
  // Fallback to Geoserver legend file
5346
5356
  const fallbackUrl = `${layer.baseUrl}?service=WMS&REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&STRICT=false&layer=${layer.layers}`;
5347
- return this._http.get(fallbackUrl, { responseType: 'blob' }).pipe(map(blob => {
5357
+ const params = this._layerHelperService.getParamsObject(layer);
5358
+ return this._http.get(fallbackUrl, { responseType: 'blob', params }).pipe(map(blob => {
5348
5359
  // Blob returned as an image, so layer has a legend in Geoserver
5349
5360
  const isImage = blob.type.startsWith('image/');
5350
5361
  return {
@@ -5590,6 +5601,105 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
5590
5601
  args: [{ selector: 'document-search-info', imports: [CommonModule, FormsModule, AsyncPipe, JsonPipe, MatButtonModule, MatIconModule], template: "<div *ngIf=\"showPanel && (features$ | async) as features\" class=\"doc-info-panel\">\n <div class=\"doc-info-features\">\n <div *ngFor=\"let feature of features\" class=\"doc-info-layer\">\n <h3 class=\"doc-info-layer-title\">{{feature.layer}}</h3>\n <div *ngFor=\"let item of feature.items\" class=\"doc-info-item\">\n <mat-icon class=\"doc-info-item-icon\">{{getIcon(item.url)}}</mat-icon>\n <a [href]=\"item.url\" target=\"_blank\" rel=\"noopener\" class=\"doc-info-item-link\">\n {{ item.header }}\n </a>\n </div>\n </div>\n </div>\n</div>", styles: ["::ng-deep .doc-info-panel{display:block;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:#4c4d51;border:1px solid rgba(255,255,255,.07);padding:.75rem;border-radius:5px;box-shadow:0 2px 4px #0000004d,0 8px 24px #00000059,inset 0 1px #ffffff0f;max-width:420px;max-height:450px;overflow-y:auto;position:relative}::ng-deep .doc-info-panel::-webkit-scrollbar{width:12px}::ng-deep .doc-info-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .doc-info-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .doc-info-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .doc-info-panel::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .doc-info-panel::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}::ng-deep .doc-info-panel::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .doc-info-panel::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}::ng-deep .doc-info-panel::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .doc-info-panel .doc-info-layer{background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:5px;overflow:hidden;margin-bottom:.5rem;transition:border-color .2s ease,box-shadow .2s ease}::ng-deep .doc-info-panel .doc-info-layer:last-child{margin-bottom:0}::ng-deep .doc-info-panel .doc-info-layer:hover{border-color:#ffffff1a;box-shadow:0 2px 12px #0003}::ng-deep .doc-info-panel .doc-info-layer-title{font-size:13px;font-weight:600;color:#bdc1c3cc;padding:.6rem .875rem .5rem;margin:0;border-bottom:1px solid rgba(255,255,255,.06);background:#0000001f}::ng-deep .doc-info-panel .doc-info-item{display:flex;align-items:center;gap:.6rem;padding:.55rem .875rem;border-bottom:1px solid rgba(255,255,255,.06);border-radius:0;transition:background .15s ease}::ng-deep .doc-info-panel .doc-info-item:last-child{border-bottom:none}::ng-deep .doc-info-panel .doc-info-item:hover{background:#ffffff0d}::ng-deep .doc-info-panel .doc-info-item:hover .doc-info-item-icon{transform:scale(1.12);opacity:1}::ng-deep .doc-info-panel .doc-info-item:hover .doc-info-item-link{color:#5cb8ff!important}::ng-deep .doc-info-panel .doc-info-item-icon{font-size:1rem;width:1rem;height:1rem;flex-shrink:0;opacity:.65;color:#8a8a94;transition:transform .15s ease,opacity .15s ease}::ng-deep .doc-info-panel .doc-info-item-link{font-size:12.5px;font-weight:450;color:#4da6f5!important;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:330px;letter-spacing:.01em;transition:color .15s ease;background:none}::ng-deep .doc-info-panel .doc-info-item-link:hover{text-decoration:underline;text-underline-offset:2px;text-decoration-color:#4da6f566;color:#5cb8ff!important;background:none!important}::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".pdf\"]){color:#e06c75;opacity:.85}::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".docx\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".doc\"]){color:#4da6f5;opacity:.85}::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".xlsx\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".xls\"]){color:#56c784;opacity:.85}::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".jpg\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".jpeg\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".png\"]),::ng-deep .doc-info-panel .doc-info-item-icon:has(+.doc-info-item-link[href$=\".gif\"]){color:#b07ce8;opacity:.85}\n"] }]
5591
5602
  }] });
5592
5603
 
5604
+ class FastSwitchSelectorComponent {
5605
+ _http = inject(HttpClient);
5606
+ _layerService = inject(LayerService);
5607
+ _layerHelper = inject(LayerHelperService);
5608
+ config = inject(GISKOMPONENT_CONFIG);
5609
+ map;
5610
+ profile;
5611
+ collapsed = true;
5612
+ selectedLayer;
5613
+ layerGroup = [];
5614
+ fastSwitchLayers = [];
5615
+ _baseUrl = this.config.apiBaseUrl;
5616
+ ngOnChanges(changes) {
5617
+ if (changes['profile'] && this.profile) {
5618
+ this.fastSwitchLayers = this.profile.fastSwitchLayerGroup?.layers ? this.profile.fastSwitchLayerGroup?.layers : [];
5619
+ this._setFilteredLegends().subscribe(result => {
5620
+ this.layerGroup = result.filter(lg => this.profile.fastSwitchLayerGroup?.layers.find(l => l.id === lg.id)?.activeInSelector);
5621
+ // Turn them all off (except for first one)
5622
+ this.layerGroup.forEach((layer, index) => {
5623
+ if (index > 0) {
5624
+ this._layerHelper.toggleLayerInMap(this.map, layer.id, false);
5625
+ }
5626
+ else {
5627
+ this._layerHelper.toggleLayerInMap(this.map, layer.id, true);
5628
+ }
5629
+ });
5630
+ if (this.layerGroup.length > 0)
5631
+ this.selectedLayer = this.layerGroup[0];
5632
+ });
5633
+ }
5634
+ }
5635
+ toggleCollapsed() {
5636
+ this.collapsed = !this.collapsed;
5637
+ }
5638
+ layerChanged(layer) {
5639
+ // Turn off current layer
5640
+ if (this.selectedLayer?.id)
5641
+ this._layerHelper.toggleLayerInMap(this.map, this.selectedLayer?.id, false);
5642
+ this.selectedLayer = layer;
5643
+ // Turn on new layer
5644
+ this._layerHelper.toggleLayerInMap(this.map, layer.id, true);
5645
+ this.collapsed = true;
5646
+ }
5647
+ _getImageUrl(fileName) {
5648
+ return `${this._baseUrl}/api/image/${fileName}`;
5649
+ }
5650
+ _setFilteredLegends() {
5651
+ if (!this.profile?.id) {
5652
+ return of([]);
5653
+ }
5654
+ return this._layerService.getByIds(this.fastSwitchLayers.map(layer => layer.id))
5655
+ .pipe(switchMap(layers => {
5656
+ const enriched$ = layers.map(layer => this._resolveLegendImage(layer));
5657
+ return forkJoin(enriched$); // Wait until all items are enriched
5658
+ }));
5659
+ }
5660
+ _resolveLegendImage(layer) {
5661
+ if (layer.legend?.imageName) {
5662
+ return of({
5663
+ ...layer,
5664
+ imageUrl: this._getImageUrl(layer.legend.imageName)
5665
+ });
5666
+ }
5667
+ if (layer.legend?.imageExternalURL) {
5668
+ return of({
5669
+ ...layer,
5670
+ imageUrl: layer.legend.imageExternalURL
5671
+ });
5672
+ }
5673
+ // Fallback to Geoserver legend file
5674
+ const fallbackUrl = `${layer.baseUrl}?service=WMS&REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&STRICT=false&layer=${layer.layers}`;
5675
+ return this._http.get(fallbackUrl, { responseType: 'blob' }).pipe(map(blob => {
5676
+ // Blob returned as an image, so layer has a legend in Geoserver
5677
+ const isImage = blob.type.startsWith('image/');
5678
+ return {
5679
+ ...layer,
5680
+ imageUrl: isImage ? fallbackUrl : ''
5681
+ };
5682
+ }), catchError((err) => {
5683
+ console.error(`Signatur kunne ikke indlæses for ${layer.name}`, err);
5684
+ return of({
5685
+ ...layer,
5686
+ imageUrl: '' // fallback failed, layer has no legend on Geoserver
5687
+ });
5688
+ }));
5689
+ }
5690
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FastSwitchSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5691
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: FastSwitchSelectorComponent, isStandalone: true, selector: "lib-fast-switch-selector", inputs: { map: "map", profile: "profile" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fast-switch-body-wrapper\" \n [class.collapsed]=\"collapsed\">\n @if(collapsed) {\n <div class=\"fast-switch-collapsed\">\n <div class=\"legend\">\n <img [src]=\"selectedLayer?.imageUrl\" class=\"legend-thumbnail\" (click)=\"toggleCollapsed()\"/>\n </div>\n </div>\n }\n @if(!collapsed) {\n <div class=\"fast-switch-expanded global-wrapper-container\">\n \n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"item-list\">\n @for (layer of layerGroup; track layer.id; let i = $index) {\n @if (layer.imageUrl) {\n <mat-expansion-panel [expanded]=\"true\"> \n <div class=\"legend\">\n <img [src]=\"layer.imageUrl\" class=\"legend-thumbnail\" (click)=\"layerChanged(layer)\"/>\n </div>\n </mat-expansion-panel>\n }\n }\n </div>\n </div>\n </div>\n }\n</div>", styles: [".fast-switch-body-wrapper{position:absolute;bottom:100px;left:20px}.fast-switch-body-wrapper .fast-switch-collapsed{width:100px;max-height:100px}.fast-switch-body-wrapper .fast-switch-expanded{width:145px;max-height:610px;position:absolute;bottom:0}.fast-switch-body-wrapper .legends-list-body{bottom:0}.fast-switch-body-wrapper .legend-thumbnail{width:100px;height:100px;border:5px solid white;border-radius:6px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }] });
5692
+ }
5693
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FastSwitchSelectorComponent, decorators: [{
5694
+ type: Component,
5695
+ args: [{ selector: 'lib-fast-switch-selector', imports: [MatFormFieldModule, CommonModule, MatIconModule, FormsModule, DragDropModule,
5696
+ MatExpansionModule, MatInputModule, MatTooltipModule], template: "<div class=\"fast-switch-body-wrapper\" \n [class.collapsed]=\"collapsed\">\n @if(collapsed) {\n <div class=\"fast-switch-collapsed\">\n <div class=\"legend\">\n <img [src]=\"selectedLayer?.imageUrl\" class=\"legend-thumbnail\" (click)=\"toggleCollapsed()\"/>\n </div>\n </div>\n }\n @if(!collapsed) {\n <div class=\"fast-switch-expanded global-wrapper-container\">\n \n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"item-list\">\n @for (layer of layerGroup; track layer.id; let i = $index) {\n @if (layer.imageUrl) {\n <mat-expansion-panel [expanded]=\"true\"> \n <div class=\"legend\">\n <img [src]=\"layer.imageUrl\" class=\"legend-thumbnail\" (click)=\"layerChanged(layer)\"/>\n </div>\n </mat-expansion-panel>\n }\n }\n </div>\n </div>\n </div>\n }\n</div>", styles: [".fast-switch-body-wrapper{position:absolute;bottom:100px;left:20px}.fast-switch-body-wrapper .fast-switch-collapsed{width:100px;max-height:100px}.fast-switch-body-wrapper .fast-switch-expanded{width:145px;max-height:610px;position:absolute;bottom:0}.fast-switch-body-wrapper .legends-list-body{bottom:0}.fast-switch-body-wrapper .legend-thumbnail{width:100px;height:100px;border:5px solid white;border-radius:6px}\n"] }]
5697
+ }], propDecorators: { map: [{
5698
+ type: Input
5699
+ }], profile: [{
5700
+ type: Input
5701
+ }] } });
5702
+
5593
5703
  class GisKomponentComponent {
5594
5704
  _profileService = inject(ProfileService);
5595
5705
  _http = inject(HttpClient);
@@ -5605,6 +5715,7 @@ class GisKomponentComponent {
5605
5715
  settings;
5606
5716
  toolbarRef;
5607
5717
  legendsListRef;
5718
+ fastSwitchSelectorRef;
5608
5719
  layerSelectorRef;
5609
5720
  activeObjectsRef;
5610
5721
  documentInfoRef;
@@ -5667,14 +5778,18 @@ class GisKomponentComponent {
5667
5778
  this.currentZoomLevel = profile.zoom ?? 8;
5668
5779
  this._getCapabilitiesObject(profile).subscribe({
5669
5780
  next: capabilityObject => {
5670
- const layers = [...profile.layerGroups.map((lg) => new OLLayerGroup({
5671
- layers: lg.layers
5672
- .filter(layer => layer.activeInSelector)
5673
- .sort((a, b) => a.sortOrder - b.sortOrder)
5674
- .map((l, index) => this._mapLayer(l, capabilityObject, 'EPSG:25832', lg.id, index)), // for now, we default to EPSG:25832.
5675
- properties: { id: lg.id }
5676
- }))
5677
- ];
5781
+ let allLayergroups = [...profile.layerGroups];
5782
+ if (profile.fastSwitchLayerGroup) {
5783
+ const mappedFastSwitchGroup = { ...profile.fastSwitchLayerGroup, sortOrder: -1, fastSwitchLayerGroup: true };
5784
+ allLayergroups = allLayergroups.concat(mappedFastSwitchGroup);
5785
+ }
5786
+ const layers = allLayergroups.map((lg) => new OLLayerGroup({
5787
+ layers: lg.layers
5788
+ .filter(layer => layer.activeInSelector)
5789
+ .sort((a, b) => a.sortOrder - b.sortOrder)
5790
+ .map((l, index) => this._mapLayer(l, capabilityObject, 'EPSG:25832', lg.id, lg.fastSwitchLayerGroup === true ? -1 : index)), // for now, we default to EPSG:25832.
5791
+ properties: { id: lg.id }
5792
+ }));
5678
5793
  this.map.setLayers(layers);
5679
5794
  if (this.settings) {
5680
5795
  this._featureLoader.loadFeaturesSettings(this.settings);
@@ -5697,6 +5812,13 @@ class GisKomponentComponent {
5697
5812
  //Toolbox is hidden, but needed for default tool, so expand it
5698
5813
  this.toolbarCollapsed = false;
5699
5814
  }
5815
+ if (profile.fastSwitchLayerGroup?.layers &&
5816
+ profile.fastSwitchLayerGroup?.layers.length > 0) {
5817
+ const fastSwitchControl = new Control({
5818
+ element: this.fastSwitchSelectorRef?.nativeElement
5819
+ });
5820
+ this.map.addControl(fastSwitchControl);
5821
+ }
5700
5822
  if (profile.showLegends) {
5701
5823
  const legendsListControl = new Control({
5702
5824
  element: this.legendsListRef?.nativeElement
@@ -5762,15 +5884,18 @@ class GisKomponentComponent {
5762
5884
  }
5763
5885
  _getCapabilitiesObject(profile) {
5764
5886
  // Find all WMTS-layers and get their base url's for retrieving the capabilities. Make sure every url is only called once by removing duplicates
5765
- const layerGroupLayers = [...new Set(profile.layerGroups.flatMap(lg => lg.layers).filter(lg => lg.layerType === 'WMTS'))];
5887
+ let layerGroupLayers = [...new Set(profile.layerGroups.flatMap(lg => lg.layers).filter(lg => lg.layerType === 'WMTS'))];
5888
+ if (profile.fastSwitchLayerGroup)
5889
+ layerGroupLayers = layerGroupLayers.concat(profile.fastSwitchLayerGroup.layers.filter(lg => lg.layerType === 'WMTS'));
5766
5890
  const parser = new WMTSCapabilities();
5767
5891
  const capabilities$ = layerGroupLayers
5768
5892
  .map(layer => {
5769
5893
  let getCapabilitiesUrl = `${layer.baseUrl}?SERVICE=WMTS&REQUEST=GetCapabilities`;
5894
+ const params = this._layerHelper.getParamsObject(layer);
5770
5895
  layer.wmsParameters.forEach((keyValue) => {
5771
5896
  getCapabilitiesUrl = `${getCapabilitiesUrl}&${keyValue.key}=${keyValue.value}`;
5772
5897
  });
5773
- return this._http.get(getCapabilitiesUrl, { responseType: 'text' })
5898
+ return this._http.get(getCapabilitiesUrl, { responseType: 'text', params })
5774
5899
  .pipe(map(result => {
5775
5900
  let item = new CapabilitiesItem();
5776
5901
  item.url = layer.baseUrl;
@@ -5881,18 +6006,41 @@ class GisKomponentComponent {
5881
6006
  }
5882
6007
  // Added custom north-arrow with a compass one
5883
6008
  _addRotateControl() {
5884
- const iconElement = document.createElement('span');
6009
+ const button = document.createElement('button');
6010
+ button.className = 'ol-rotate-reset';
6011
+ button.setAttribute('type', 'button');
6012
+ button.setAttribute('aria-label', 'Nulstil mod Nord');
6013
+ const hoverText = document.createElement('span');
6014
+ hoverText.className = 'hover-text';
6015
+ hoverText.textContent = 'Nulstil mod Nord';
6016
+ const compassSpan = document.createElement('span');
6017
+ compassSpan.className = 'ol-compass';
5885
6018
  const img = document.createElement('img');
5886
6019
  img.src = IconsConstants.tooltipObjBase64;
5887
6020
  img.width = 22;
5888
6021
  img.height = 22;
5889
- iconElement.appendChild(img);
5890
- const rotateControl = new Rotate$1({
5891
- label: iconElement,
5892
- tipLabel: 'Nulstil mod Nord',
5893
- autoHide: false
6022
+ img.alt = '';
6023
+ img.setAttribute('aria-hidden', 'true');
6024
+ compassSpan.appendChild(img);
6025
+ button.appendChild(hoverText);
6026
+ button.appendChild(compassSpan);
6027
+ const controlDiv = document.createElement('div');
6028
+ controlDiv.className = 'ol-rotate ol-unselectable ol-control';
6029
+ controlDiv.appendChild(button);
6030
+ const customRotateControl = new Control({
6031
+ element: controlDiv,
6032
+ });
6033
+ button.addEventListener('click', (e) => {
6034
+ e.preventDefault();
6035
+ this.map.getView().setRotation(0);
5894
6036
  });
5895
- this.map.addControl(rotateControl);
6037
+ const updateCompassRotation = () => {
6038
+ const rotation = this.map.getView().getRotation();
6039
+ compassSpan.style.transform = `rotate(${-rotation}rad)`;
6040
+ };
6041
+ this.map.on('moveend', updateCompassRotation);
6042
+ updateCompassRotation();
6043
+ this.map.addControl(customRotateControl);
5896
6044
  }
5897
6045
  _applyCustomTooltips() {
5898
6046
  const targets = [
@@ -5926,15 +6074,15 @@ class GisKomponentComponent {
5926
6074
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: GisKomponentComponent, isStandalone: true, selector: "gis-komponent", inputs: { identifier: "identifier", settings: "settings" }, outputs: { sessionDone: "sessionDone", featuresChanged: "featuresChanged" }, providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
5927
6075
  HighlightService, ShowInfoService, InfoSearchProvider, InteractionHelperService, ConflictAnalysisSearchProvider,
5928
6076
  MergeFeaturesService, OverlapService, CowiService, SearchProviderService, AddressSearchService, CadastreSearchService, ShowDocumentInfoService, DocumentSearchService,
5929
- DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService, PolygonCleanupService], viewQueries: [{ propertyName: "toolbarRef", first: true, predicate: ["toolbarRef"], descendants: true, static: true }, { propertyName: "legendsListRef", first: true, predicate: ["legendsListRef"], descendants: true, static: true }, { propertyName: "layerSelectorRef", first: true, predicate: ["layerSelectorRef"], descendants: true, static: true }, { propertyName: "activeObjectsRef", first: true, predicate: ["activeObjectsRef"], descendants: true, static: true }, { propertyName: "documentInfoRef", first: true, predicate: ["documentInfoRef"], descendants: true, static: true }], ngImport: i0, template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out{background:#4c4d51!important;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover{color:#e9e3e3;outline:none}::ng-deep button.ol-rotate-reset{border:none}::ng-deep button.ol-rotate-reset:hover{outline:none}::ng-deep [data-tooltip]{position:relative}::ng-deep [data-tooltip]:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-size:12px;pointer-events:none;opacity:0;transition:opacity .2s}::ng-deep [data-tooltip]:hover:after{opacity:1}::ng-deep mat-expansion-panel .mat-expansion-panel-header{height:40px!important;min-height:40px!important;background:#ffffff0d;transition:background .2s ease;border-top-left-radius:4px!important;border-top-right-radius:4px!important;padding:0 16px;margin-bottom:2px}::ng-deep mat-expansion-panel .mat-expansion-panel-header:hover{background:#ffffff14!important}::ng-deep mat-expansion-panel .mat-expansion-panel-header .panel-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px;margin-right:10px;color:#fff;font-weight:600;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px}::ng-deep mat-expansion-panel .mat-expansion-panel-header-title{color:#fff}::ng-deep .custom-image-icon,.compact-icon{background:none}::ng-deep .custom-image-icon img,.compact-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease}::ng-deep .custom-image-icon.active,.compact-icon.active{background:#f7b528!important;border-color:transparent;box-shadow:0 4px 12px #0ea5e966}::ng-deep .custom-image-icon.active img,.compact-icon.active img{filter:brightness(0) invert(1)}::ng-deep .custom-image-icon.active:hover,.compact-icon.active:hover{box-shadow:0 6px 20px #0ea5e980}::ng-deep .custom-image-icon:hover:not(.active),.compact-icon:hover:not(.active){background:#ffffff1a!important;border-color:none;box-shadow:none}::ng-deep .custom-image-icon:hover:not(.active) img,.compact-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}::ng-deep .layer-selector-body .search-section mat-form-field input{color:#fff!important}::ng-deep .search-field .mat-mdc-input-element{color:#fff!important}::ng-deep .mat-mdc-text-field-wrapper{background:#878787!important}::ng-deep .mat-mdc-select-panel{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .active-objects-wrapper.collapsed,::ng-deep .layer-selector-body-wrapper.collapsed,::ng-deep .legends-list-body-wrapper.collapsed,::ng-deep .search-container.collapsed,::ng-deep .toolbox-wrapper.collapsed{width:90px;max-width:90px;min-width:90px}::ng-deep .drag-handle-active-objects,::ng-deep .drag-handle-legends,::ng-deep .drag-handle,::ng-deep .drag-handle-selector,::ng-deep .drag-handle-toolbox{display:flex;align-items:center;justify-content:space-between;padding:0 2px;cursor:move;color:#fff;border-radius:5px;width:100%;box-sizing:border-box}:host{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#d1d5db!important;border-width:1px!important;box-shadow:0 0 0 3px #d1d5db40!important}::ng-deep .mat-mdc-form-field-flex{height:40px!important;display:flex!important;align-items:center!important}::ng-deep .mat-expansion-indicator svg{fill:#fff!important}::ng-deep .ol-control{background-color:transparent!important}::ng-deep .search-result-option{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .mat-mdc-autocomplete-panel .mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-autocomplete-panel .mdc-list-item__end{display:none!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:250px;display:flex;justify-content:end;right:5px}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important;left:45px;top:9px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: LayerSelectorComponent, selector: "lib-layer-selector", inputs: ["map", "profile", "currentZoomLevel"] }, { kind: "component", type: MapSearchComponent, selector: "lib-map-search", inputs: ["profile"] }, { kind: "component", type: ToolboxComponent, selector: "map-toolbox", inputs: ["map", "showMeasureDistance", "showMeasureArea", "collapsed", "settings", "profile", "WKTInputEnabled", "deleteEnabled"] }, { kind: "component", type: ActiveObjectsComponent, selector: "activeObjects", inputs: ["settings", "profile"], outputs: ["sessionDone"] }, { kind: "component", type: LegendsListComponent, selector: "lib-legends-list", inputs: ["map", "profile"] }, { kind: "component", type: DocumentSearchInfoComponent, selector: "document-search-info" }] });
6077
+ DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService, PolygonCleanupService], viewQueries: [{ propertyName: "toolbarRef", first: true, predicate: ["toolbarRef"], descendants: true, static: true }, { propertyName: "legendsListRef", first: true, predicate: ["legendsListRef"], descendants: true, static: true }, { propertyName: "fastSwitchSelectorRef", first: true, predicate: ["fastSwitchSelectorRef"], descendants: true, static: true }, { propertyName: "layerSelectorRef", first: true, predicate: ["layerSelectorRef"], descendants: true, static: true }, { propertyName: "activeObjectsRef", first: true, predicate: ["activeObjectsRef"], descendants: true, static: true }, { propertyName: "documentInfoRef", first: true, predicate: ["documentInfoRef"], descendants: true, static: true }], ngImport: i0, template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #fastSwitchSelectorRef class=\"fast-switch-container\">\n @if (selectedProfile && selectedProfile.fastSwitchLayerGroup\n && selectedProfile.fastSwitchLayerGroup.layers \n && selectedProfile.fastSwitchLayerGroup.layers.length > 0) {\n <lib-fast-switch-selector [map]=\"map\" [profile]=\"selectedProfile\"></lib-fast-switch-selector>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep .ol-rotate.ol-control{position:absolute;top:10px;right:10px;background:transparent}@media (max-width: 768px){::ng-deep .ol-rotate.ol-control{top:5px;right:5px}}::ng-deep .ol-rotate-reset{position:relative;background:#4c4d51;color:#fff;border-radius:5px;border:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;margin:0;padding:0}::ng-deep .ol-rotate-reset .hover-text{position:absolute;right:calc(100% + 12px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:12px;font-weight:500;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:9999}::ng-deep .ol-rotate-reset:hover .hover-text{opacity:1;visibility:visible}::ng-deep .ol-rotate-reset .ol-compass{display:inline-block;transition:transform .3s ease;line-height:0}::ng-deep .ol-rotate.ol-control{background:transparent!important;border-radius:0!important;padding:0!important;margin:0!important}::ng-deep .ol-rotate.ol-control button{margin:0}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out{background:#4c4d51!important;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover{color:#e9e3e3;outline:none}::ng-deep button.ol-rotate-reset{border:none}::ng-deep button.ol-rotate-reset:hover{outline:none}::ng-deep [data-tooltip]{position:relative}::ng-deep [data-tooltip]:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-size:12px;pointer-events:none;opacity:0;transition:opacity .2s}::ng-deep [data-tooltip]:hover:after{opacity:1}::ng-deep mat-expansion-panel .mat-expansion-panel-header{height:40px!important;min-height:40px!important;background:#ffffff0d;transition:background .2s ease;border-top-left-radius:4px!important;border-top-right-radius:4px!important;padding:0 16px;margin-bottom:2px}::ng-deep mat-expansion-panel .mat-expansion-panel-header:hover{background:#ffffff14!important}::ng-deep mat-expansion-panel .mat-expansion-panel-header .panel-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px;margin-right:10px;color:#fff;font-weight:600;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px}::ng-deep mat-expansion-panel .mat-expansion-panel-header-title{color:#fff}::ng-deep .custom-image-icon,.compact-icon{background:none}::ng-deep .custom-image-icon img,.compact-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease}::ng-deep .custom-image-icon.active,.compact-icon.active{background:#f7b528!important;border-color:transparent;box-shadow:0 4px 12px #0ea5e966}::ng-deep .custom-image-icon.active img,.compact-icon.active img{filter:brightness(0) invert(1)}::ng-deep .custom-image-icon.active:hover,.compact-icon.active:hover{box-shadow:0 6px 20px #0ea5e980}::ng-deep .custom-image-icon:hover:not(.active),.compact-icon:hover:not(.active){background:#ffffff1a!important;border-color:none;box-shadow:none}::ng-deep .custom-image-icon:hover:not(.active) img,.compact-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}::ng-deep .layer-selector-body .search-section mat-form-field input{color:#fff!important}::ng-deep .search-field .mat-mdc-input-element{color:#fff!important}::ng-deep .mat-mdc-text-field-wrapper{background:#878787!important}::ng-deep .mat-mdc-select-panel{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .active-objects-wrapper.collapsed,::ng-deep .layer-selector-body-wrapper.collapsed,::ng-deep .legends-list-body-wrapper.collapsed,::ng-deep .search-container.collapsed,::ng-deep .toolbox-wrapper.collapsed{width:90px;max-width:90px;min-width:90px}::ng-deep .drag-handle-active-objects,::ng-deep .drag-handle-legends,::ng-deep .drag-handle,::ng-deep .drag-handle-selector,::ng-deep .drag-handle-toolbox{display:flex;align-items:center;justify-content:space-between;padding:0 2px;cursor:move;color:#fff;border-radius:5px;width:100%;box-sizing:border-box}:host{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#d1d5db!important;border-width:1px!important;box-shadow:0 0 0 3px #d1d5db40!important}::ng-deep .mat-mdc-form-field-flex{height:40px!important;display:flex!important;align-items:center!important}::ng-deep .mat-expansion-indicator svg{fill:#fff!important}::ng-deep .ol-control{background-color:transparent!important}::ng-deep .search-result-option{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .mat-mdc-autocomplete-panel .mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-autocomplete-panel .mdc-list-item__end{display:none!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-option .mat-pseudo-checkbox-minimal{display:none}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:250px;display:flex;justify-content:end;right:5px}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important;left:45px;top:9px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: LayerSelectorComponent, selector: "lib-layer-selector", inputs: ["map", "profile", "currentZoomLevel"] }, { kind: "component", type: MapSearchComponent, selector: "lib-map-search", inputs: ["profile"] }, { kind: "component", type: ToolboxComponent, selector: "map-toolbox", inputs: ["map", "showMeasureDistance", "showMeasureArea", "collapsed", "settings", "profile", "WKTInputEnabled", "deleteEnabled"] }, { kind: "component", type: ActiveObjectsComponent, selector: "activeObjects", inputs: ["settings", "profile"], outputs: ["sessionDone"] }, { kind: "component", type: LegendsListComponent, selector: "lib-legends-list", inputs: ["map", "profile"] }, { kind: "component", type: DocumentSearchInfoComponent, selector: "document-search-info" }, { kind: "component", type: FastSwitchSelectorComponent, selector: "lib-fast-switch-selector", inputs: ["map", "profile"] }] });
5930
6078
  }
5931
6079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GisKomponentComponent, decorators: [{
5932
6080
  type: Component,
5933
6081
  args: [{ selector: 'gis-komponent', imports: [CommonModule, MatIconModule, MatListModule, MatSelectModule, LayerSelectorComponent, MapSearchComponent, ToolboxComponent, ActiveObjectsComponent,
5934
- LegendsListComponent, DocumentSearchInfoComponent], providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
6082
+ LegendsListComponent, DocumentSearchInfoComponent, FastSwitchSelectorComponent], providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
5935
6083
  HighlightService, ShowInfoService, InfoSearchProvider, InteractionHelperService, ConflictAnalysisSearchProvider,
5936
6084
  MergeFeaturesService, OverlapService, CowiService, SearchProviderService, AddressSearchService, CadastreSearchService, ShowDocumentInfoService, DocumentSearchService,
5937
- DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService, PolygonCleanupService], template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out{background:#4c4d51!important;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover{color:#e9e3e3;outline:none}::ng-deep button.ol-rotate-reset{border:none}::ng-deep button.ol-rotate-reset:hover{outline:none}::ng-deep [data-tooltip]{position:relative}::ng-deep [data-tooltip]:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-size:12px;pointer-events:none;opacity:0;transition:opacity .2s}::ng-deep [data-tooltip]:hover:after{opacity:1}::ng-deep mat-expansion-panel .mat-expansion-panel-header{height:40px!important;min-height:40px!important;background:#ffffff0d;transition:background .2s ease;border-top-left-radius:4px!important;border-top-right-radius:4px!important;padding:0 16px;margin-bottom:2px}::ng-deep mat-expansion-panel .mat-expansion-panel-header:hover{background:#ffffff14!important}::ng-deep mat-expansion-panel .mat-expansion-panel-header .panel-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px;margin-right:10px;color:#fff;font-weight:600;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px}::ng-deep mat-expansion-panel .mat-expansion-panel-header-title{color:#fff}::ng-deep .custom-image-icon,.compact-icon{background:none}::ng-deep .custom-image-icon img,.compact-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease}::ng-deep .custom-image-icon.active,.compact-icon.active{background:#f7b528!important;border-color:transparent;box-shadow:0 4px 12px #0ea5e966}::ng-deep .custom-image-icon.active img,.compact-icon.active img{filter:brightness(0) invert(1)}::ng-deep .custom-image-icon.active:hover,.compact-icon.active:hover{box-shadow:0 6px 20px #0ea5e980}::ng-deep .custom-image-icon:hover:not(.active),.compact-icon:hover:not(.active){background:#ffffff1a!important;border-color:none;box-shadow:none}::ng-deep .custom-image-icon:hover:not(.active) img,.compact-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}::ng-deep .layer-selector-body .search-section mat-form-field input{color:#fff!important}::ng-deep .search-field .mat-mdc-input-element{color:#fff!important}::ng-deep .mat-mdc-text-field-wrapper{background:#878787!important}::ng-deep .mat-mdc-select-panel{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .active-objects-wrapper.collapsed,::ng-deep .layer-selector-body-wrapper.collapsed,::ng-deep .legends-list-body-wrapper.collapsed,::ng-deep .search-container.collapsed,::ng-deep .toolbox-wrapper.collapsed{width:90px;max-width:90px;min-width:90px}::ng-deep .drag-handle-active-objects,::ng-deep .drag-handle-legends,::ng-deep .drag-handle,::ng-deep .drag-handle-selector,::ng-deep .drag-handle-toolbox{display:flex;align-items:center;justify-content:space-between;padding:0 2px;cursor:move;color:#fff;border-radius:5px;width:100%;box-sizing:border-box}:host{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#d1d5db!important;border-width:1px!important;box-shadow:0 0 0 3px #d1d5db40!important}::ng-deep .mat-mdc-form-field-flex{height:40px!important;display:flex!important;align-items:center!important}::ng-deep .mat-expansion-indicator svg{fill:#fff!important}::ng-deep .ol-control{background-color:transparent!important}::ng-deep .search-result-option{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .mat-mdc-autocomplete-panel .mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-autocomplete-panel .mdc-list-item__end{display:none!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:250px;display:flex;justify-content:end;right:5px}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important;left:45px;top:9px}\n"] }]
6085
+ DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService, PolygonCleanupService], template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #fastSwitchSelectorRef class=\"fast-switch-container\">\n @if (selectedProfile && selectedProfile.fastSwitchLayerGroup\n && selectedProfile.fastSwitchLayerGroup.layers \n && selectedProfile.fastSwitchLayerGroup.layers.length > 0) {\n <lib-fast-switch-selector [map]=\"map\" [profile]=\"selectedProfile\"></lib-fast-switch-selector>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep .ol-rotate.ol-control{position:absolute;top:10px;right:10px;background:transparent}@media (max-width: 768px){::ng-deep .ol-rotate.ol-control{top:5px;right:5px}}::ng-deep .ol-rotate-reset{position:relative;background:#4c4d51;color:#fff;border-radius:5px;border:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;margin:0;padding:0}::ng-deep .ol-rotate-reset .hover-text{position:absolute;right:calc(100% + 12px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:12px;font-weight:500;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:9999}::ng-deep .ol-rotate-reset:hover .hover-text{opacity:1;visibility:visible}::ng-deep .ol-rotate-reset .ol-compass{display:inline-block;transition:transform .3s ease;line-height:0}::ng-deep .ol-rotate.ol-control{background:transparent!important;border-radius:0!important;padding:0!important;margin:0!important}::ng-deep .ol-rotate.ol-control button{margin:0}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out{background:#4c4d51!important;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover{color:#e9e3e3;outline:none}::ng-deep button.ol-rotate-reset{border:none}::ng-deep button.ol-rotate-reset:hover{outline:none}::ng-deep [data-tooltip]{position:relative}::ng-deep [data-tooltip]:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#4c4d51;color:#fff;padding:8px;border-radius:5px;white-space:nowrap;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-size:12px;pointer-events:none;opacity:0;transition:opacity .2s}::ng-deep [data-tooltip]:hover:after{opacity:1}::ng-deep mat-expansion-panel .mat-expansion-panel-header{height:40px!important;min-height:40px!important;background:#ffffff0d;transition:background .2s ease;border-top-left-radius:4px!important;border-top-right-radius:4px!important;padding:0 16px;margin-bottom:2px}::ng-deep mat-expansion-panel .mat-expansion-panel-header:hover{background:#ffffff14!important}::ng-deep mat-expansion-panel .mat-expansion-panel-header .panel-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px;margin-right:10px;color:#fff;font-weight:600;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px}::ng-deep mat-expansion-panel .mat-expansion-panel-header-title{color:#fff}::ng-deep .custom-image-icon,.compact-icon{background:none}::ng-deep .custom-image-icon img,.compact-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease}::ng-deep .custom-image-icon.active,.compact-icon.active{background:#f7b528!important;border-color:transparent;box-shadow:0 4px 12px #0ea5e966}::ng-deep .custom-image-icon.active img,.compact-icon.active img{filter:brightness(0) invert(1)}::ng-deep .custom-image-icon.active:hover,.compact-icon.active:hover{box-shadow:0 6px 20px #0ea5e980}::ng-deep .custom-image-icon:hover:not(.active),.compact-icon:hover:not(.active){background:#ffffff1a!important;border-color:none;box-shadow:none}::ng-deep .custom-image-icon:hover:not(.active) img,.compact-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}::ng-deep .layer-selector-body .search-section mat-form-field input{color:#fff!important}::ng-deep .search-field .mat-mdc-input-element{color:#fff!important}::ng-deep .mat-mdc-text-field-wrapper{background:#878787!important}::ng-deep .mat-mdc-select-panel{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .active-objects-wrapper.collapsed,::ng-deep .layer-selector-body-wrapper.collapsed,::ng-deep .legends-list-body-wrapper.collapsed,::ng-deep .search-container.collapsed,::ng-deep .toolbox-wrapper.collapsed{width:90px;max-width:90px;min-width:90px}::ng-deep .drag-handle-active-objects,::ng-deep .drag-handle-legends,::ng-deep .drag-handle,::ng-deep .drag-handle-selector,::ng-deep .drag-handle-toolbox{display:flex;align-items:center;justify-content:space-between;padding:0 2px;cursor:move;color:#fff;border-radius:5px;width:100%;box-sizing:border-box}:host{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,:host.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#d1d5db!important;border-width:1px!important;box-shadow:0 0 0 3px #d1d5db40!important}::ng-deep .mat-mdc-form-field-flex{height:40px!important;display:flex!important;align-items:center!important}::ng-deep .mat-expansion-indicator svg{fill:#fff!important}::ng-deep .ol-control{background-color:transparent!important}::ng-deep .search-result-option{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .mat-mdc-autocomplete-panel .mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-autocomplete-panel .mdc-list-item__end{display:none!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-option .mat-pseudo-checkbox-minimal{display:none}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:250px;display:flex;justify-content:end;right:5px}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important;left:45px;top:9px}\n"] }]
5938
6086
  }], ctorParameters: () => [], propDecorators: { identifier: [{
5939
6087
  type: Input,
5940
6088
  args: [{ required: true }]
@@ -5946,6 +6094,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
5946
6094
  }], legendsListRef: [{
5947
6095
  type: ViewChild,
5948
6096
  args: ['legendsListRef', { static: true }]
6097
+ }], fastSwitchSelectorRef: [{
6098
+ type: ViewChild,
6099
+ args: ['fastSwitchSelectorRef', { static: true }]
5949
6100
  }], layerSelectorRef: [{
5950
6101
  type: ViewChild,
5951
6102
  args: ['layerSelectorRef', { static: true }]