@regionerne/gis-komponent 0.0.77 → 0.0.79

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.
@@ -1,7 +1,7 @@
1
1
  import * as i1$2 from '@angular/common';
2
2
  import { CommonModule, DOCUMENT, AsyncPipe, JsonPipe } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, inject, Injectable, Component, Input, ViewChild, EventEmitter, Output } from '@angular/core';
4
+ import { InjectionToken, inject, Injectable, Component, Input, ViewChild, HostBinding, EventEmitter, Output } from '@angular/core';
5
5
  import * as i2 from '@angular/material/icon';
6
6
  import { MatIconModule } from '@angular/material/icon';
7
7
  import Map$1 from 'ol/Map';
@@ -50,7 +50,7 @@ import WMSCapabilities from 'ol/format/WMSCapabilities';
50
50
  import * as i1$4 from '@angular/material/dialog';
51
51
  import { MatDialog, MatDialogModule, MatDialogContent, MatDialogActions, MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';
52
52
  import 'ol/ol.css';
53
- import { Point as Point$1, LineString, MultiPolygon } from 'ol/geom';
53
+ import { MultiPolygon, Polygon, Point as Point$1, LineString } from 'ol/geom';
54
54
  import { getArea, getLength } from 'ol/sphere';
55
55
  import Draw, { createBox, createRegularPolygon } from 'ol/interaction/Draw';
56
56
  import { Draw as Draw$1, Snap, Select as Select$1, Modify } from 'ol/interaction';
@@ -59,7 +59,7 @@ import * as SLDReader from '@nieuwlandgeo/sldreader';
59
59
  import WKT from 'ol/format/WKT';
60
60
  import Feature$1 from 'ol/Feature';
61
61
  import { never, always } from 'ol/events/condition';
62
- import { buffer, lineIntersect, lineSplit, featureCollection, difference, booleanIntersects, union, point, booleanPointInPolygon, area, feature, booleanWithin, intersect, bboxPolygon } from '@turf/turf';
62
+ import { buffer, lineIntersect, lineSplit, featureCollection, difference, booleanIntersects, union, point, booleanPointInPolygon, area, flatten, feature, booleanWithin, intersect, bboxPolygon } from '@turf/turf';
63
63
  import GeoJSON$1 from 'ol/format/GeoJSON';
64
64
  import { Feature } from 'ol';
65
65
  import { extend, createEmpty, buffer as buffer$1 } from 'ol/extent';
@@ -1117,10 +1117,6 @@ class LayerSelectorComponent {
1117
1117
  }
1118
1118
  async toggleLayerSelector() {
1119
1119
  this.collapsed = !this.collapsed;
1120
- if (this.collapsed) {
1121
- this.searchText = '';
1122
- this.filterChanged();
1123
- }
1124
1120
  if (!this.collapsed) {
1125
1121
  //Expanding, make sure it stays in viewport
1126
1122
  this.layerSelectorDragPosition = await this._layoutService.keepWidgetInViewPort(this.layerSelectorDragPosition, this.POSITION_STORAGE_KEY, WidgetConstants.layerSelectorHeight, WidgetConstants.layerSelectorWidth);
@@ -1484,6 +1480,19 @@ class FeatureHelperService {
1484
1480
  setId(feature) {
1485
1481
  feature.setId(this._idCounter++);
1486
1482
  }
1483
+ splitMultiPolygonFeature(geom) {
1484
+ if (!(geom instanceof MultiPolygon)) {
1485
+ // Already a Polygon → return as-is
1486
+ return [geom];
1487
+ }
1488
+ const polygons = [];
1489
+ const coords = geom.getCoordinates();
1490
+ coords.forEach(polyCoords => {
1491
+ const polyGeom = new Polygon(polyCoords);
1492
+ polygons.push(polyGeom);
1493
+ });
1494
+ return polygons;
1495
+ }
1487
1496
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FeatureHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1488
1497
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FeatureHelperService, providedIn: 'root' });
1489
1498
  }
@@ -2107,7 +2116,7 @@ class OverlapService {
2107
2116
  return clonedFeature;
2108
2117
  }
2109
2118
  _handleUnlockedFeaturesOverlapping(features, msg, isPreview) {
2110
- const featuresToHideInPreview = []; // Holds features from the map that are completely within the new feature.
2119
+ const featuresToAddToOutput = []; // Holds features from the map that are completely within the new feature or extra features when overlap leads to multipolys
2111
2120
  features.forEach(feature => {
2112
2121
  const overlappingUnlockedFeatures = this._drawLayerService.source.getFeatures().filter(f => !this._featureHelper.isLocked(f) && f.getGeometry()?.intersectsExtent(feature.getGeometry().getExtent()));
2113
2122
  if (overlappingUnlockedFeatures.length > 0) {
@@ -2137,12 +2146,34 @@ class OverlapService {
2137
2146
  if (Math.abs(featureArea - featureDiffArea) > this.EPSILON) {
2138
2147
  // If preview mode, then modify the geomery of overlapping objects only in the resulting array
2139
2148
  // not in the actual draw layer
2140
- const existingFeature = isPreview === true ? features.find(feature => feature.getId() === f.id) :
2141
- this._drawLayerService.source.getFeatureById(f.id);
2142
- if (existingFeature) {
2149
+ if (isPreview) {
2143
2150
  const newGeometry = this._geoJsonFormat.readGeometry(featureDiff?.geometry);
2144
- existingFeature.setGeometry(newGeometry);
2151
+ features.find(feature => feature.getId() === f.id)?.setGeometry(newGeometry);
2152
+ }
2153
+ else {
2154
+ const existing = this._drawLayerService.source.getFeatureById(f.id);
2155
+ if (existing) {
2156
+ const allPolys = flatten(featureDiff);
2157
+ allPolys.features.forEach((newPoly, idx) => {
2158
+ const newGeometry = this._geoJsonFormat.readGeometry(newPoly.geometry);
2159
+ if (idx === 0) {
2160
+ existing.setGeometry(newGeometry);
2161
+ }
2162
+ else {
2163
+ const newFeature = existing.clone();
2164
+ this._featureHelper.setId(newFeature);
2165
+ newFeature.setGeometry(newGeometry);
2166
+ this._drawLayerService.source.addFeature(newFeature);
2167
+ }
2168
+ });
2169
+ }
2145
2170
  }
2171
+ // const existingFeature = isPreview === true ? features.find(feature => feature.getId() === f.id!) :
2172
+ // this._drawLayerService.source.getFeatureById(f.id!);
2173
+ // if (existingFeature) {
2174
+ // const newGeometry = this._geoJsonFormat.readGeometry(featureDiff?.geometry);
2175
+ // existingFeature.setGeometry(newGeometry);
2176
+ // }
2146
2177
  }
2147
2178
  }
2148
2179
  else {
@@ -2157,7 +2188,7 @@ class OverlapService {
2157
2188
  if (isPreview) {
2158
2189
  const featureToHide = new Feature(f.geometry);
2159
2190
  featureToHide.setId(f.id);
2160
- featuresToHideInPreview.push(featureToHide);
2191
+ featuresToAddToOutput.push(featureToHide);
2161
2192
  const overlappedFeature = features.find(existingFeature => existingFeature.getId() === f.id);
2162
2193
  if (overlappedFeature) {
2163
2194
  overlappedFeature.setGeometry(undefined);
@@ -2177,7 +2208,7 @@ class OverlapService {
2177
2208
  }
2178
2209
  });
2179
2210
  features = features.filter(feature => feature.getGeometry() !== undefined);
2180
- return [...features, ...featuresToHideInPreview];
2211
+ return [...features, ...featuresToAddToOutput];
2181
2212
  }
2182
2213
  _handleLockedFeaturesOverlapping(overlappingFeatures, orgFeature) {
2183
2214
  let newFeatureGeoJson = this._geoJsonFormat.writeFeatureObject(orgFeature);
@@ -2697,13 +2728,20 @@ class CowiService {
2697
2728
  const streetViewUrl = `https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=${lat},${lon}`;
2698
2729
  window.open(streetViewUrl);
2699
2730
  }
2700
- openGoogleStreetViewFromPoint(coordinate) {
2731
+ openGoogleStreetViewFromPoint(googleUrl, coordinate) {
2701
2732
  if (!coordinate) {
2702
2733
  return;
2703
2734
  }
2704
2735
  const [lon, lat] = toLonLat(coordinate, 'EPSG:25832');
2705
- const streetViewUrl = `https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=${lat},${lon}`;
2706
- window.open(streetViewUrl);
2736
+ const regExp = /(?:@x.*?@y)/gi;
2737
+ const doReplace = (match) => {
2738
+ if (match.startsWith('@x')) {
2739
+ return match.replace('@x', `${lat}`).replace('@y', `${lon}`);
2740
+ }
2741
+ return match;
2742
+ };
2743
+ const convertedUrl = googleUrl.replace(regExp, doReplace);
2744
+ window.open(convertedUrl);
2707
2745
  }
2708
2746
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: CowiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2709
2747
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: CowiService });
@@ -2831,6 +2869,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
2831
2869
  type: Injectable
2832
2870
  }] });
2833
2871
 
2872
+ class SelectedFeatureInfoComponent {
2873
+ _infoService = inject(ShowInfoService);
2874
+ features = null;
2875
+ collapsedStates = {};
2876
+ get hidden() {
2877
+ return !this.features || this.features.length === 0;
2878
+ }
2879
+ ngOnInit() {
2880
+ this._infoService.features$.subscribe({
2881
+ next: f => {
2882
+ this.features = f ? [...f] : null;
2883
+ if (this.features) {
2884
+ this.features.forEach(item => {
2885
+ if (this.collapsedStates[item.layerName] === undefined) {
2886
+ this.collapsedStates[item.layerName] = true;
2887
+ }
2888
+ });
2889
+ }
2890
+ }
2891
+ });
2892
+ }
2893
+ toggleCollapse(layerName) {
2894
+ this.collapsedStates[layerName] = !this.collapsedStates[layerName];
2895
+ }
2896
+ isCollapsed(layerName) {
2897
+ return this.collapsedStates[layerName] || false;
2898
+ }
2899
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SelectedFeatureInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2900
+ 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"] }] });
2901
+ }
2902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SelectedFeatureInfoComponent, decorators: [{
2903
+ type: Component,
2904
+ 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"] }]
2905
+ }], propDecorators: { hidden: [{
2906
+ type: HostBinding,
2907
+ args: ['hidden']
2908
+ }] } });
2909
+
2834
2910
  class ToolboxComponent {
2835
2911
  // Inputs
2836
2912
  map;
@@ -2871,6 +2947,9 @@ class ToolboxComponent {
2871
2947
  pointClickKey;
2872
2948
  _geometrySearchService = inject(GeometrySearchService);
2873
2949
  drawInteraction;
2950
+ get showDocumentSearch() {
2951
+ return this.settings?.showDocumentSearch !== false;
2952
+ }
2874
2953
  mapWidth = 0;
2875
2954
  mapHeight = 0;
2876
2955
  format = "image/png";
@@ -3095,7 +3174,7 @@ class ToolboxComponent {
3095
3174
  this._clearAllInteractions();
3096
3175
  this.activeMode = 'streetview';
3097
3176
  this.pointClickKey = this.map.on('click', evt => {
3098
- this._cowiService.openGoogleStreetViewFromPoint(evt.coordinate);
3177
+ this._cowiService.openGoogleStreetViewFromPoint(this.settings.googleStreetUrlTemplate, evt.coordinate);
3099
3178
  });
3100
3179
  }
3101
3180
  else {
@@ -3409,8 +3488,20 @@ class ToolboxComponent {
3409
3488
  const features = featureCollection([overlappingFeatureGeoJson, holeGeoJson]);
3410
3489
  const clipped = difference(features);
3411
3490
  if (clipped) {
3412
- const geom = geoJsonFormat.readGeometry(clipped.geometry);
3413
- f.setGeometry(geom);
3491
+ // Ensures that the clipped feature is split into an array of features. Handles possible MultiPolygon
3492
+ const allPolys = flatten(clipped);
3493
+ allPolys.features.forEach((poly, idx) => {
3494
+ const geom = geoJsonFormat.readGeometry(poly.geometry);
3495
+ if (idx === 0) {
3496
+ f.setGeometry(geom);
3497
+ }
3498
+ else {
3499
+ const newFeature = f.clone();
3500
+ newFeature.setGeometry(geom);
3501
+ this._featureHelper.setId(newFeature);
3502
+ this._drawLayerService.source.addFeature(newFeature);
3503
+ }
3504
+ });
3414
3505
  }
3415
3506
  });
3416
3507
  });
@@ -3673,9 +3764,20 @@ class ToolboxComponent {
3673
3764
  this._overlap.handleOverlaps(result).pipe(filter(f => !!f)).subscribe({
3674
3765
  next: f => {
3675
3766
  if (f) {
3767
+ this._undoRedo.enable();
3676
3768
  f.forEach(feature => {
3677
- this._undoRedo.enable();
3678
- this._drawLayerService.source.addFeature(feature);
3769
+ if (feature.getGeometry()?.getType() !== 'MultiPolygon') {
3770
+ this._drawLayerService.source.addFeature(feature);
3771
+ }
3772
+ else {
3773
+ const polys = this._featureHelper.splitMultiPolygonFeature(feature.getGeometry());
3774
+ polys.forEach(poly => {
3775
+ const newFeature = feature.clone();
3776
+ this._featureHelper.setId(newFeature);
3777
+ newFeature.setGeometry(poly);
3778
+ this._drawLayerService.source.addFeature(newFeature);
3779
+ });
3780
+ }
3679
3781
  });
3680
3782
  if (f.length > 1) {
3681
3783
  this._confirmService.open({ message: `Den indtegnede flade var ikke gyldig, men rettet til ${f.length} nye flader`, primaryText: 'OK', title: 'Advarsel' }).subscribe();
@@ -4319,11 +4421,11 @@ class ToolboxComponent {
4319
4421
  }));
4320
4422
  }
4321
4423
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ToolboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4322
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: ToolboxComponent, isStandalone: true, selector: "map-toolbox", inputs: { map: "map", showMeasureDistance: "showMeasureDistance", showMeasureArea: "showMeasureArea", collapsed: "collapsed", settings: "settings", profile: "profile", WKTInputEnabled: "WKTInputEnabled", deleteEnabled: "deleteEnabled" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"toolbox-wrapper global-wrapper-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-toolbox\" cdkDragHandle>\n <mat-icon \n class=\"icon-left\" \n matTooltip=\"V\u00E6rkt\u00F8jskasse\" \n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n handyman\n </mat-icon> \n <div class=\"right-icons\"> \n <mat-icon class=\"toggle-icon\" (click)=\"toggleCollapsed($event)\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n \n <div class=\"toolbox-container\">\n @if(!collapsed) {\n <div class=\"toolbox-content\">\n <div class=\"all-tools-container\">\n <div class=\"main-tools\">\n @if(!settings?.undoDisabled) {\n <img \n [src]=\"undoIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"undo()\" \n matTooltip=\"Fortryd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Undo\">\n\n <img \n [src]=\"redoIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"redo()\" \n matTooltip=\"Gendan\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Redo\">\n }\n @if (settings.externalHelpUrl) {\n <img \n [src]=\"infoBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"openUrl(settings.externalHelpUrl, $event)\"\n matTooltip=\"Vejledning til anvendelse af systemet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Vejledning til anvendelse af systemet\">\n } \n <img \n [src]=\"showInfoObjBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleShowInfo()\" \n [class.active]=\"activeMode === 'show-info'\"\n matTooltip=\"V\u00E6lg og vis objektdata i tr\u00E6struktur\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg og vis objektdata i tr\u00E6 struktur\">\n <img \n [src]=\"downloadFileBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDownloadAddresses()\" \n [class.active]=\"activeMode === 'download-addresses'\"\n matTooltip=\"Download adresser\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Download adresser\">\n <img \n [src]=\"downloadMatriklerBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDownloadCasdatres()\" \n [class.active]=\"activeMode === 'download-cadastres'\"\n matTooltip=\"Download matrikler\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Download matrikler\">\n\n <img \n [src]=\"splitIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"togglePointPolygonSearch()\"\n [class.active]=\"activeMode === 'search-point' || activeMode === 'search-polygon'\"\n matTooltip=\"V\u00E6lg Lokaliteter ved udpegning i kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg Lokaliteter ved udpegning i kortet\">\n @if (settings.showDocumentSearch) {\n\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDocumentPointSearch()\"\n [class.active]=\"activeMode === 'document-search-by-point'\"\n matTooltip=\"Dokument fra punkt\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Dokument fra punkt\">\n\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDocumentPolygonSearch()\"\n [class.active]=\"activeMode === 'document-search-by-polygon'\"\n matTooltip=\"Dokumenter fra polygon\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Dokumenter fra polygon\">\n }\n @if (settings.cowiUrlTemplate) {\n <img \n [src]=\"openCowiPageBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'cowi'\"\n (click)=\"toggleCowiPage()\" \n matTooltip=\"COWI\u00B4s Gadefoto\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"COWI\u00B4s Gadefoto\">\n }\n @if (settings.skraaFotoUrlTemplate) {\n <img \n [src]=\"skrafotoBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'skrafoto'\"\n (click)=\"toggleSkraafotoPage()\" \n matTooltip=\"Opslag p\u00E5 Skr\u00E5fotos\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Skr\u00E5foto\">\n }\n <img \n [src]=\"streetViewBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'streetview'\"\n (click)=\"toggleGoogleStreetviewPage()\" \n matTooltip=\"Google Streetview\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Google Streetview\">\n <img \n [src]=\"fremhaevBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'select-highlight'\"\n (click)=\"startSelectFeatureHighlight()\" \n matTooltip=\"Fremh\u00E6v aktivt objekt i listen\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Fremh\u00E6v\">\n @if (activeMode === 'draw' || activeMode === 'edit' || activeMode === 'edit-remove' || activeMode === 'search-feature' ||\n activeMode === 'clip-hole' || activeMode === 'split' || activeMode === 'merge-features') {\n <label class=\"snap-toggle\">\n <input type=\"checkbox\" [checked]=\"snap\" (change)=\"onSnapChange($event)\">\n Snap\n </label> \n } \n @if(settings.editEnabled) {\n <img \n [src]=\"editBase64\" \n [class.active]=\"activeMode === 'edit'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startEdit()\" \n matTooltip=\"Inds\u00E6t eller flyt punkter i flade/linje\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Inds\u00E6t eller flyt punkter i flade/linje\">\n <img \n [src]=\"deleteIconBase64\" \n [class.active]=\"activeMode === 'edit-remove'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startEditRemovePoints()\" \n matTooltip=\"Slet punkter i flade/linje\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Slet punkter i flade/linje\">\n }\n @if(settings.cutHoleEnabled) {\n <img \n [src]=\"clipHoleBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'clip-hole'\" \n (click)=\"clipHole()\" \n matTooltip=\"Klip hul i flade\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Klip hul i flade\">\n }\n @if(settings.splitEnabled) {\n <img \n [src]=\"splitBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'split'\"\n (click)=\"split()\" \n matTooltip=\"Del et element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Del et element\">\n }\n @if(settings.changeTypeEnabled) {\n <img \n [src]=\"changeTypeBase64\" \n class=\"compact-icon custom-image-icon\" \n [class.active]=\"activeMode === 'change-type'\" \n (click)=\"startChangeType()\"\n [matTooltipShowDelay]=\"200\"\n matTooltipClass=\"custom-tooltip\"\n [matTooltipHideDelay]=\"300\" \n matTooltip=\"Skift status p\u00E5 element\" \n alt=\"Skift status p\u00E5 element\" \n matTooltipPosition=\"below\">\n }\n @if(settings.mergeEnabled) {\n <img \n [src]=\"mergeBase64\"\n class=\"compact-icon custom-image-icon\" \n (click)=\"startMergeFeatures()\" \n matTooltipPosition=\"below\"\n [matTooltipShowDelay]=\"200\"\n matTooltipClass=\"custom-tooltip\"\n [matTooltipHideDelay]=\"300\" \n matTooltip=\"Saml flader\" \n [class.active]=\"activeMode === 'merge-features'\">\n }\n @if(settings.centerPoint) {\n <img \n [src]=\"setCenterBase64\" \n [class.active]=\"activeMode === 'center-point'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"setCenterPoint()\" \n matTooltip=\"S\u00E6t centerpunkt\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"S\u00E6t centerpunkt\">\n }\n </div>\n <div class=\"geometry-tools\">\n <img \n [src]=\"sogPolygonBase64\" \n [class.active]=\"activeMode === 'search-feature'\"\n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleFeatureSearch()\" \n matTooltip=\"V\u00E6lg og vis emner i listen\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg og vis emner i listen\">\n\n <img \n [src]=\"drawBase64\" \n [class.active]=\"activeMode === 'draw'\"\n class=\"compact-icon custom-image-icon\"\n (click)=\"startDraw()\"\n matTooltip=\"Tegn element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Tegn element\">\n @if(settings.WKTInputEnabled) {\n <img \n [src]=\"wktIconBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'wkt-input'\"\n (click)=\"activateShowInputWKT()\" \n matTooltip=\"Inds\u00E6t WKT streng for at importere elementet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Inds\u00E6t WKT streng for at importere elementet\">\n }\n </div>\n <div class=\"tool-separator\" *ngIf=\"deleteEnabled || showMeasureDistance || showMeasureArea || profile.showPrint\"></div>\n <div class=\"measurement-print-tools\">\n <div class=\"measurement-tools\">\n @if (deleteEnabled) {\n <img \n [src]=\"deleteIconBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'delete'\"\n (click)=\"startDelete()\" \n matTooltip=\"Slet element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Slet element\">\n }\n <img \n [src]=\"measureDistanceIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleMeasure()\"\n [class.active]=\"activeMode === 'measure-distance' || activeMode === 'measure-area'\"\n matTooltip=\"M\u00E5l afstand / areal\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"M\u00E5l\">\n </div>\n @if(profile.showPrint) {\n <div class=\"tool-separator print-separator\"></div>\n <div class=\"print-tools\">\n <img \n [src]=\"printBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"active === 'Print'\"\n (click)=\"startPrintMode()\" \n matTooltip=\"Sk\u00E6rmprint af kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Sk\u00E6rmprint af kortet\">\n <img \n [src]=\"drawPrintBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"active === 'PrintDraw'\"\n (click)=\"startDrawMode()\" \n matTooltip=\"Tegnev\u00E6rkt\u00F8j til print\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Tegnev\u00E6rkt\u00F8j til print\">\n </div>\n }\n </div>\n </div>\n @if (activeMode === 'draw' || activeMode === 'search-feature' || activeMode === 'wkt-input'\n || activeMode === 'change-type' || activeMode === 'merge-features') {\n <mat-select class=\"geometry-selector\" (selectionChange)=\"drawItemChanged($event)\" [(ngModel)]=\"selectedDrawItem\"> \n @for (drawItem of drawItems; track drawItem) {\n @if(activeMode !== 'merge-features' || drawItem.geomType === 'Polygon') {\n <mat-option [value]=\"drawItem\">{{drawItem.name}} <img *ngIf=\"drawItem.iconUrl\" class=\"compact-icon custom-image-icon\" [src]=\"drawItem.iconUrl\"></mat-option>\n }\n }\n </mat-select> \n }\n @if(showInputWKT && activeMode === 'wkt-input') {\n <div class=\"wkt-section\">\n <input matInput class=\"compact-input\" placeholder=\"Inds\u00E6t WKT-streng\" [(ngModel)]=\"WKTString\">\n <div class=\"wkt-actions\">\n <button class=\"compact-button primary\" (click)=\"ReadWKT()\">Indl\u00E6s WKT</button>\n <button class=\"compact-button\" (click)=\"cancelWKT()\">Annuller</button>\n </div>\n </div>\n }\n @if(profile.showPrint) {\n @if(active === \"Print\") {\n <div class=\"print-config\">\n <img \n matTooltip=\"Sk\u00E6rmprint af kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n [src]=\"printBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"doPrint()\" \n alt=\"Udskriv\"> \n <span class=\"icon-separator\">i</span>\n <select id=\"formatSelector\" [(ngModel)]=\"format\">\n <option value=\"image/png\" selected>.PNG</option>\n <option value=\"image/jpeg\">.JPG</option>\n </select>\n <select id=\"dimensionSelector\" [(ngModel)]=\"dimId\" (change)=\"handleDimensionSelected()\">\n <option value=\"99\" selected></option>\n <option value=\"0\">1920 X 1080</option>\n <option value=\"1\">1680 X 1050</option>\n <option value=\"2\">1280 X 800</option>\n <option value=\"3\">800 X 600</option>\n </select>\n <input type=\"text\" [(ngModel)]=\"mapWidth\"/> \n <span class=\"icon-separator\">x</span>\n <input type=\"text\" [(ngModel)]=\"mapHeight\"/>\n <button (click)=\"setNewMapDimensions()\">V\u00E6lg</button>\n </div>\n }\n @if(active === \"PrintDraw\") {\n <div class=\"print-draw-config\">\n <span class=\"icon-separator\">Label</span>\n <input type=\"text\" [(ngModel)]=\"printDrawLabel\"/>\n <select id=\"drawToolSelector\" [(ngModel)]=\"printDrawTool\" (change)=\"handlePrintDrawToolChanged()\">\n <option value=\"Arrow\" selected>Pil</option>\n <option value=\"Point\">Punkt</option>\n <option value=\"LineString\">Linje</option>\n <option value=\"Polygon\">Polygon</option>\n <option value=\"Circle\">Cirkel</option>\n <option value=\"Square\">Kvadrat</option>\n <option value=\"Rectangle\">Firkant</option>\n </select>\n <button class=\"compact-button\" (click)=\"handleClearPrintDrawFeatures()\">Ryd</button>\n </div>\n }\n }\n </div>\n @if (activeMode === 'search-point' || activeMode === 'search-polygon') {\n <mat-select \n class=\"search-point-polygon-selector\" \n [(ngModel)]=\"selectedSearchMode\"\n (selectionChange)=\"onSearchModeChanged($event)\">\n <mat-option value=\"search-point\">S\u00F8g med punkt</mat-option>\n <mat-option value=\"search-polygon\">S\u00F8g med polygon</mat-option>\n </mat-select>\n }\n \n @if (activeMode === 'measure-distance' || activeMode === 'measure-area') {\n <mat-select \n class=\"geometry-selector\"\n [(ngModel)]=\"selectedMeasureMode\"\n (selectionChange)=\"onMeasureModeChanged($event)\">\n <mat-option value=\"measure-distance\">M\u00E5l afstand</mat-option>\n <mat-option value=\"measure-area\">M\u00E5l areal</mat-option>\n </mat-select>\n }\n }\n </div>\n @if (activeMode === 'search-feature' && filteredResults.length > 0) {\n <div class=\"geometry-search-panel\">\n <div class=\"buffer-item\">\n <mat-label>Buffer</mat-label>\n <input matInput type=\"number\" name=\"buffer\" [(ngModel)]=\"bufferInMeters\">\n <mat-label>m</mat-label>\n </div>\n <mat-option *ngFor=\"let result of filteredResults\" [value]=\"result\" class=\"search-result-option\">\n <span class=\"result-title\">\n {{ result.title }} ({{result.items.length}} af {{ result.total }})\n </span>\n <div (click)=\"highlight(item.wkt, $event)\" *ngFor=\"let item of result.items\" class=\"search-result-item\">\n <div class=\"item-left\">\n <span class=\"item-header\"> {{item.header}} </span> \n </div>\n <div class=\"item-right\">\n <img \n [src]=\"objectSearchCopyIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"addToActiveObjectsList(item, $event)\" \n matTooltip=\"Kopier\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Kopier\">\n <img \n [src]=\"objectSearchCutIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"cutBySearchedObject(item, $event)\" \n matTooltip=\"Fjern\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Fjern\">\n <img \n [src]=\"objectSearchCutIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"splitBySearchedObject(item, $event)\" \n matTooltip=\"Opsk\u00E6r\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Opsk\u00E6r\">\n <img \n [src]=\"objectSearchCopyWithBufferIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"addToActiveObjectsList(item, $event, true)\" \n matTooltip=\"Kopier med buffer\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Kopier med buffer\">\n <img \n [src]=\"objectSearchZoomIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"zoomSearchedObject(item, $event)\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Zoom\">\n <img \n [src]=\"infoBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleItemInfo(item, $event)\" \n matTooltip=\"Info\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Info\">\n </div> \n @if (item.showMetadata) {\n <div class=\"metadata-panel\">\n @for(feature of item.metadata; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-title\">\n {{ kv.value.name }}:\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 class=\"secondary-item\">{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </mat-option>\n </div>\n }\n @if ((activeMode === \"search-point\" || activeMode === \"search-polygon\") && geometrySearchResult.length > 0) {\n <div class=\"geometry-search-panel\">\n <mat-icon (click)=\"deleteAllGeometrySearchItem()\" class=\"delete-all-icon\" matTooltip=\"Ryd\">delete</mat-icon>\n <mat-option *ngFor=\"let result of geometrySearchResult\" [value]=\"result\" class=\"search-result-option\">\n <span class=\"result-title\">\n {{ result.title }} ({{result.items.length}} af {{ result.total }})\n </span>\n <div (click)=\"highlight(item.wkt, $event)\" *ngFor=\"let item of result.items\" class=\"geometry-search-result-item\">\n <div class=\"item-left\">\n <span class=\"item-header\"> {{item.header}} </span> \n </div>\n <div class=\"item-right\">\n @if (item.url) {\n <mat-icon \n class=\"search-item-external\"\n matTooltip=\"\u00C5bn i ny tab\"\n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n (click)=\"openUrl(item.url, $event)\"\n matTooltipPosition=\"above\"\n >info</mat-icon>\n }\n <mat-icon (click)=\"deleteGeometrySearchItem(result, item.id, $event)\" >delete</mat-icon>\n </div>\n </div>\n </mat-option>\n </div>\n }\n</div>\n", styles: [".toolbox-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:10;max-width:95vw;box-shadow:0 2px 10px #0000001a;border-radius:5px;transition:width .3s ease,max-width .3s ease}.toolbox-wrapper.cdk-drag-dragging{opacity:.8;z-index:1001}.search-item-external{cursor:pointer}.drag-handle-toolbox mat-icon{font-size:18px}.drag-handle-toolbox mat-icon:first-child{display:flex;align-items:center;justify-content:center}.drag-handle-toolbox .icon-left{cursor:default!important}.right-icons{display:flex;align-items:center;gap:6px}.toggle-icon{cursor:pointer!important;transition:all .2s ease;-webkit-user-select:none;user-select:none;font-size:18px!important;display:flex;align-items:center;justify-content:center;flex-shrink:0}.toggle-icon:hover{color:#d3d3d3}:host{position:relative;display:flex;justify-content:center}:host.expanded{width:auto;min-width:320px;padding:12px}.toolbox-container{display:flex;flex-direction:column;align-items:center;width:100%;min-width:32px;transition:all .3s ease;cursor:default;border-radius:0 0 5px 5px}.toolbox-content{display:flex;flex-direction:column;width:100%;gap:3px;animation:slideDown .3s cubic-bezier(.4,0,.2,1)}.all-tools-container{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap;width:100%;justify-content:flex-start;overflow-x:hidden;padding:2px 8px}.all-tools-container::-webkit-scrollbar{height:4px}.all-tools-container::-webkit-scrollbar-thumb{background:#ccc;border-radius:2px}.main-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.main-tools .snap-toggle{display:flex;align-items:center;gap:5px;color:#fff;font-size:12px;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none}.main-tools .snap-toggle input[type=checkbox]{appearance:none;width:18px;height:18px;border:1.5px solid rgba(255,255,255,.6);border-radius:3px;background:transparent;cursor:pointer;position:relative;flex-shrink:0}.main-tools .snap-toggle input[type=checkbox]:checked{background:#f7b528;border-color:#f7b528}.main-tools .snap-toggle input[type=checkbox]:checked:after{content:\"\";position:absolute;left:4px;top:0;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg)}.geometry-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.measurement-print-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap;background:none;border-radius:8px;padding:3px 0}.measurement-tools,.print-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.measurement-tools .compact-icon,.print-tools .compact-icon{transition:all .3s cubic-bezier(.4,0,.2,1)}.print-tools .compact-icon{background:none;color:#fff}.print-tools .compact-icon.active{background:#f7b528!important;border-color:transparent}.print-tools .compact-icon.active:hover{background:#ffffff1a}.print-tools .compact-icon:hover:not(.active){box-shadow:0 4px 12px #0000004d;opacity:.9}.tool-separator{width:1px;height:24px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent)}.tool-separator.print-separator{height:28px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.5),transparent)}.compact-icon{cursor:pointer;color:#fff;transition:all .3s cubic-bezier(.4,0,.2,1);width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:6px;flex-shrink:0}.compact-icon.active{color:#fff;background:#f7b528!important;border-color:transparent;box-shadow:0 8px 25px #667eea4d}.compact-icon.active:hover{box-shadow:0 12px 35px #667eea66}.compact-icon:hover:not(.active){color:#fff;box-shadow:0 4px 12px #0003}.compact-icon.custom-image-icon{padding:2px;background:none;border:none}.compact-icon.custom-image-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease,transform .2s ease}.compact-icon.custom-image-icon.active{background:#ffffff1a;border-color:none;box-shadow:none}.compact-icon.custom-image-icon.active img{filter:brightness(0) invert(1)}.compact-icon.custom-image-icon.active:hover{box-shadow:0 12px 35px #667eea66}.compact-icon.custom-image-icon:hover:not(.active){box-shadow:0 4px 12px #0003}.compact-icon.custom-image-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}.search-point-polygon-selector{width:24%;margin-right:auto;padding:6px}.search-point-polygon-selector ::ng-deep .mat-mdc-select{font-size:14px;line-height:1.4;border-radius:5px}.search-point-polygon-selector ::ng-deep .mat-mdc-select-trigger{height:32px;min-height:32px;padding:0 10px;border:none;border-radius:6px;background:#6d6f73;transition:all .2s ease}.search-point-polygon-selector ::ng-deep .mat-mdc-select-trigger:hover{background:#6d6f73}.search-point-polygon-selector ::ng-deep .mat-mdc-select-value{font-size:14px;font-weight:500;color:#fff}.search-point-polygon-selector ::ng-deep .mat-mdc-select-arrow-wrapper{height:16px}.search-point-polygon-selector ::ng-deep .mat-mdc-form-field-infix{min-height:32px;padding:6px 0}.search-point-polygon-selector ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.geometry-selector{width:34%;margin-left:15em;padding:6px}.geometry-selector ::ng-deep .mat-mdc-select{font-size:14px;line-height:1.4;border-radius:5px}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:32px;min-height:32px;padding:0 10px;border:none;border-radius:6px;background:#6d6f73;transition:all .2s ease}.geometry-selector ::ng-deep .mat-mdc-select-trigger:hover{background:#6d6f73}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:14px;font-weight:500;color:#fff}.geometry-selector ::ng-deep .mat-mdc-select-arrow-wrapper{height:16px}.geometry-selector ::ng-deep .mat-mdc-form-field-infix{min-height:32px;padding:6px 0}.geometry-selector ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-select-panel{min-width:fit-content!important;max-width:320px!important;background:#4c4d51!important;border:none!important;border-radius:8px!important;box-shadow:0 8px 24px #0000001f,0 2px 6px #00000014!important;margin-top:6px!important;padding:4px 0!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:14px!important;min-height:30px!important;padding:0 14px!important;transition:all .15s ease!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option:hover:not(.mat-mdc-option-disabled){background:#444849!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option.mat-active{background:color-mix(in srgb,#000 60%,transparent)!important;color:#fff!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option .mdc-list-item__primary-text{font-weight:500!important;color:#fff!important}::ng-deep .cdk-overlay-pane{z-index:1001}::ng-deep .cdk-overlay-backdrop{z-index:1000}.wkt-section{display:flex;flex-direction:column;gap:8px;border-top:1px solid rgba(255,255,255,.1);animation:fadeIn .2s ease;padding:10px 8px}.wkt-actions{display:flex;gap:6px;justify-content:space-between}.compact-button{padding:6px 10px;border:none;border-radius:5px;background:#6d6f73;color:#fff;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);text-transform:uppercase;min-height:32px;display:flex;align-items:center;justify-content:center;flex:1;box-shadow:0 1px 2px #0000000d}.compact-button.primary.active{background:#f7b528;box-shadow:0 8px 25px #667eea4d;color:#fff}.compact-button.primary.active:hover{box-shadow:0 12px 35px #667eea66}.compact-button.secondary{background:color-mix(in srgb,#000 20%,transparent);color:#fff}.compact-button.secondary:hover{background:color-mix(in srgb,#5a6268 60%,transparent)}.compact-input{padding:8px 10px;border-radius:5px;font-size:13px;transition:all .2s ease;background:#6d6f73;border:none;color:#fff}.compact-input::placeholder{color:#ffffffb3}.compact-input:focus{outline:none;background:#6d6f73;border:1px solid #97989b}.print-config,.print-draw-config{display:flex;align-items:center;gap:8px;padding:5px;background:transparent;border:none;border-radius:8px;animation:slideDown .3s ease}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{background:#6d6f73;border:none;color:#fff;border-radius:6px;font-size:12px;height:32px;min-height:32px;padding:0 10px}.print-config select:focus,.print-config input:focus,.print-draw-config select:focus,.print-draw-config input:focus{outline:none}.print-config select,.print-draw-config select{cursor:pointer}.print-config option,.print-draw-config option{background:#6d6f73!important;border:none!important}.print-config input,.print-draw-config input{width:60px;text-align:center}.print-config button,.print-draw-config button{background:#6ccb78;color:#fff;border:none;padding:6px 12px;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s ease}.print-config button:hover,.print-draw-config button:hover{box-shadow:0 4px 12px #10b9814d}.print-config .icon-separator,.print-draw-config .icon-separator{color:#fff}.geometry-search-panel{position:absolute;right:0;z-index:1000;width:380px}.geometry-search-panel .delete-all-icon{color:#fff;margin-left:315px}.geometry-search-panel::-webkit-scrollbar{width:12px}.geometry-search-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}.geometry-search-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.geometry-search-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}.search-result-option{display:block!important;padding:0!important;margin:0!important;background:transparent!important}.search-result-option:last-child{border-bottom:none}.search-result-option .mdc-list-item__primary-text{width:100%!important;margin:0!important;padding:0!important}.result-title{display:block;top:0;z-index:1;font-weight:600;color:#bdc1c3cc}.search-result-item{display:flex;align-items:center;padding:4px 14px;cursor:pointer;transition:background-color .15s ease;border-radius:5px}.item-left{flex:1;width:100%}.item-header{color:#fff;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.search-empty-state{padding:32px 16px;text-align:center;color:#757575}.search-empty-state .empty-icon{font-size:40px;width:40px;height:40px;color:#bdbdbd;margin-bottom:12px}.search-empty-state .empty-title{font-size:14px;font-weight:500;margin-bottom:4px}.search-empty-state .empty-subtitle{font-size:12px;color:#9e9e9e}::ng-deep .metadata-panel{margin-top:5px;margin-bottom:5px}::ng-deep .metadata-panel .feature-item{padding:8px 12px;margin:4px 0;background:#ffffff0d;border-radius:5px;transition:all .2s ease}::ng-deep .metadata-panel .feature-item:hover{background:#ffffff1a;box-shadow:0 2px 8px #00000026}::ng-deep .metadata-panel .feature-item:first-child{margin-top:0}::ng-deep .metadata-panel .feature-item:last-child{margin-bottom:0}::ng-deep .metadata-panel .feature-title{color:#bdc1c3cc;font-size:13px;line-height:1.6;display:flex;align-items:center;gap:6px;letter-spacing:.2px}::ng-deep .metadata-panel .feature-title:first-child{margin-top:0}::ng-deep .metadata-panel .feature-title:last-child{margin-bottom:0}::ng-deep .metadata-panel .feature-title img{border-radius:4px;margin-top:4px;box-shadow:0 2px 6px #0003}::ng-deep .metadata-panel .feature-title a{color:#6ccb78;text-decoration:none;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}::ng-deep .metadata-panel .feature-title a:hover{color:#85d990;text-decoration:underline}::ng-deep .metadata-panel .feature-title a .link-icon{font-size:16px;width:16px;height:16px}::ng-deep .metadata-panel .secondary-item{color:#fff;font-weight:400}::ng-deep .geometry-search-panel{max-height:360px!important;overflow-y:auto!important;max-width:430px;background:#4c4d51!important;border:1px solid rgba(255,255,255,.07);border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0 8px 24px #00000026!important}::ng-deep .geometry-search-panel::-webkit-scrollbar{width:4px}::ng-deep .geometry-search-panel::-webkit-scrollbar-track{background:transparent}::ng-deep .geometry-search-panel::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:10px}::ng-deep .geometry-search-panel::-webkit-scrollbar-thumb:hover{background:#fff3}::ng-deep .geometry-search-panel .buffer-item{display:flex;align-items:center;gap:8px;padding:10px 14px 8px;background:#0003;border-bottom:1px solid rgba(255,255,255,.06)}::ng-deep .geometry-search-panel .buffer-item mat-label{color:#9ca3af;font-size:12px;font-weight:500;letter-spacing:.3px}::ng-deep .geometry-search-panel .buffer-item input{width:52px;margin:0;background:#3a3d42;border:1px solid rgba(255,255,255,.1);border-radius:5px;color:#fff;font-size:12px;padding:4px 8px;text-align:center;outline:none;transition:border-color .15s ease}::ng-deep .geometry-search-panel .buffer-item input:focus{border-color:#f7b528}::ng-deep .geometry-search-panel .result-title{display:flex;align-items:center;gap:8px;padding:8px 14px 4px;font-size:14px;font-weight:600;color:#bdc1c3cc;position:sticky;top:0;z-index:1}::ng-deep .geometry-search-panel .search-result-item{display:flex;flex-direction:column;gap:5px;padding:8px 14px;cursor:pointer;border-left:2px solid transparent;transition:background .12s ease,border-color .12s ease}::ng-deep .geometry-search-panel .search-result-item+.search-result-item{border-top:1px solid rgba(255,255,255,.04)}::ng-deep .geometry-search-panel .search-result-item:hover{background:#ffffff09}::ng-deep .geometry-search-panel .search-result-item:hover .item-header{color:#fff}::ng-deep .geometry-search-panel .search-result-item:last-child{border-radius:0 0 10px 10px}::ng-deep .geometry-search-panel .item-header{color:#d1d5db;font-size:14px;font-weight:500;line-height:1.4;display:block;word-wrap:break-word;overflow-wrap:break-word;transition:color .12s ease}::ng-deep .geometry-search-panel .item-right{display:flex;align-items:center;gap:3px;flex-wrap:wrap;width:100%}::ng-deep .geometry-search-panel .item-right .custom-image-icon{width:26px;height:26px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:#fff!important;border:1px solid rgba(255,255,255,0);border-radius:5px;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease!important}::ng-deep .geometry-search-panel .item-right .custom-image-icon:hover{background:#ffffff0d!important;box-shadow:0 0 0 1px #f7b5282e}::ng-deep .geometry-search-panel .mat-mdc-option{min-height:30px!important;border-radius:5px!important;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:auto;padding:4px 0!important}::ng-deep .geometry-search-panel .mat-mdc-option .mdc-list-item__primary-text{color:#fff}::ng-deep .geometry-search-panel mat-label{color:#fff}::ng-deep .mat-mdc-simple-snack-bar{background-color:#fff!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px}@media (max-width: 768px){.toolbox-wrapper{left:.5em;top:8em;max-width:calc(100vw - 2.5em)}.drag-handle-toolbox{padding:3px 6px;gap:6px}.drag-handle-toolbox mat-icon{font-size:16px;width:16px;height:16px}.toggle-icon{font-size:16px!important;width:16px!important;height:16px!important}.toolbox-container{min-width:28px;max-width:calc(100vw - 3em)}:host{padding:8px;min-width:32px}:host.expanded{min-width:280px;padding:10px}.all-tools-container{flex-wrap:wrap;gap:6px;max-height:50vh;overflow-y:auto;padding:0;-ms-overflow-style:none;scrollbar-width:none}.all-tools-container::-webkit-scrollbar{display:none}.main-tools,.geometry-tools,.measurement-print-tools,.print-tools{display:flex;flex-wrap:wrap;justify-content:center;gap:4px}.compact-icon{width:28px;height:28px;flex-shrink:0}.measurement-print-tools{padding:3px 0}.geometry-selector{width:30%;margin-bottom:8px}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:28px;min-height:28px;padding:0 8px;font-size:12px}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:12px}::ng-deep .mat-mdc-select-panel{max-width:calc(100vw - 2em)!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:13px!important;min-height:32px!important;padding:6px 12px!important}.print-config,.print-draw-config{flex-direction:column;align-items:stretch;gap:6px}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{font-size:11px;padding:4px 8px;height:28px;min-height:28px}.print-config input,.print-draw-config input{width:50px}.print-config button,.print-draw-config button{padding:4px 8px;font-size:11px;height:28px}.wkt-section .compact-input{font-size:12px;padding:6px 8px}.wkt-section .compact-button{font-size:11px;padding:5px 8px;min-height:28px}::ng-deep .mat-mdc-slide-toggle .mdc-label{font-size:11px!important}.geometry-search-panel{width:calc(100vw - 40px);max-width:400px;left:50%;max-height:70vh}.search-result-item{padding:8px 12px}.item-header{font-size:13px}.result-title{padding:10px 12px;font-size:13px}}.geometry-search-result-item{display:flex;padding:4px 14px;cursor:pointer;transition:background-color .15s ease;border-radius:5px}.geometry-search-result-item .item-header{width:260px}@media (max-width: 480px){.toolbox-wrapper{left:.25em;top:6em;transform-origin:left top;max-width:calc(100vw - .5em)}.drag-handle-toolbox{padding:2px 4px;gap:4px}.drag-handle-toolbox mat-icon{font-size:14px;width:14px;height:14px}.toggle-icon{font-size:14px!important;width:14px!important;height:14px!important}.toolbox-container{padding:2px;min-width:24px}.all-tools-container{flex-direction:row;align-items:center;max-height:60vh}.main-tools,.geometry-tools{gap:3px;flex-wrap:wrap;justify-content:center}.measurement-print-tools{gap:3px;flex-wrap:wrap;padding:2px 4px;width:100%;justify-content:center}.measurement-tools,.print-tools{gap:3px}.compact-icon{width:26px;height:26px}.tool-separator{display:none}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:26px;min-height:26px;padding:0 6px;font-size:11px}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:11px}.compact-button{font-size:10px;padding:4px 6px;min-height:26px}.compact-input{font-size:11px;padding:4px 6px}.print-config,.print-draw-config{gap:4px;padding:6px}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{font-size:10px;height:26px;min-height:26px;padding:2px 6px}.print-config input,.print-draw-config input{width:45px}.print-config button,.print-draw-config button{flex:1;min-width:60px;font-size:10px;padding:3px 6px;height:26px}.print-config .icon-separator,.print-draw-config .icon-separator{font-size:10px}.wkt-section{gap:6px;padding-top:8px}::ng-deep .mat-mdc-slide-toggle .mdc-label{font-size:10px!important}::ng-deep .mat-mdc-select-panel{max-width:calc(100vw - 1em)!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:12px!important;min-height:28px!important;padding:4px 10px!important}.geometry-search-panel{width:calc(100vw - 32px);max-height:60vh}.search-result-item{padding:6px 10px}.item-header{font-size:12px;-webkit-line-clamp:1}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "component", type: i6$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
4424
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: ToolboxComponent, isStandalone: true, selector: "map-toolbox", inputs: { map: "map", showMeasureDistance: "showMeasureDistance", showMeasureArea: "showMeasureArea", collapsed: "collapsed", settings: "settings", profile: "profile", WKTInputEnabled: "WKTInputEnabled", deleteEnabled: "deleteEnabled" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"toolbox-wrapper global-wrapper-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-toolbox\" cdkDragHandle>\n <mat-icon \n class=\"icon-left\" \n matTooltip=\"V\u00E6rkt\u00F8jskasse\" \n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n handyman\n </mat-icon> \n <div class=\"right-icons\"> \n <mat-icon class=\"toggle-icon\" (click)=\"toggleCollapsed($event)\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n \n <div class=\"toolbox-container\">\n @if(!collapsed) {\n <div class=\"toolbox-content\">\n <div class=\"all-tools-container\">\n <div class=\"main-tools\">\n @if(!settings?.undoDisabled) {\n <img \n [src]=\"undoIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"undo()\" \n matTooltip=\"Fortryd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Undo\">\n\n <img \n [src]=\"redoIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"redo()\" \n matTooltip=\"Gendan\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Redo\">\n }\n @if (settings.externalHelpUrl) {\n <img \n [src]=\"infoBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"openUrl(settings.externalHelpUrl, $event)\"\n matTooltip=\"Vejledning til anvendelse af systemet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Vejledning til anvendelse af systemet\">\n } \n <img \n [src]=\"showInfoObjBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleShowInfo()\" \n [class.active]=\"activeMode === 'show-info'\"\n matTooltip=\"V\u00E6lg og vis objektdata i tr\u00E6struktur\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg og vis objektdata i tr\u00E6 struktur\">\n <img \n [src]=\"downloadFileBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDownloadAddresses()\" \n [class.active]=\"activeMode === 'download-addresses'\"\n matTooltip=\"Download adresser\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Download adresser\">\n <img \n [src]=\"downloadMatriklerBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDownloadCasdatres()\" \n [class.active]=\"activeMode === 'download-cadastres'\"\n matTooltip=\"Download matrikler\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Download matrikler\">\n\n <img \n [src]=\"splitIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"togglePointPolygonSearch()\"\n [class.active]=\"activeMode === 'search-point' || activeMode === 'search-polygon'\"\n matTooltip=\"V\u00E6lg Lokaliteter ved udpegning i kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg Lokaliteter ved udpegning i kortet\">\n @if (showDocumentSearch) {\n\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDocumentPointSearch()\"\n [class.active]=\"activeMode === 'document-search-by-point'\"\n matTooltip=\"Dokument fra punkt\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Dokument fra punkt\">\n\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDocumentPolygonSearch()\"\n [class.active]=\"activeMode === 'document-search-by-polygon'\"\n matTooltip=\"Dokumenter fra polygon\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Dokumenter fra polygon\">\n }\n @if (settings.cowiUrlTemplate) {\n <img \n [src]=\"openCowiPageBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'cowi'\"\n (click)=\"toggleCowiPage()\" \n matTooltip=\"COWI\u00B4s Gadefoto\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"COWI\u00B4s Gadefoto\">\n }\n @if (settings.skraaFotoUrlTemplate) {\n <img \n [src]=\"skrafotoBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'skrafoto'\"\n (click)=\"toggleSkraafotoPage()\" \n matTooltip=\"Opslag p\u00E5 Skr\u00E5fotos\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Skr\u00E5foto\">\n }\n @if (settings.googleStreetUrlTemplate) {\n <img \n [src]=\"streetViewBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'streetview'\"\n (click)=\"toggleGoogleStreetviewPage()\" \n matTooltip=\"Google Streetview\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Google Streetview\">\n }\n <img \n [src]=\"fremhaevBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'select-highlight'\"\n (click)=\"startSelectFeatureHighlight()\" \n matTooltip=\"Fremh\u00E6v aktivt objekt i listen\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Fremh\u00E6v\">\n @if (activeMode === 'draw' || activeMode === 'edit' || activeMode === 'edit-remove' || activeMode === 'search-feature' ||\n activeMode === 'clip-hole' || activeMode === 'split' || activeMode === 'merge-features') {\n <label class=\"snap-toggle\">\n <input type=\"checkbox\" [checked]=\"snap\" (change)=\"onSnapChange($event)\">\n Snap\n </label> \n } \n @if(settings.editEnabled) {\n <img \n [src]=\"editBase64\" \n [class.active]=\"activeMode === 'edit'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startEdit()\" \n matTooltip=\"Inds\u00E6t eller flyt punkter i flade/linje\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Inds\u00E6t eller flyt punkter i flade/linje\">\n <img \n [src]=\"deleteIconBase64\" \n [class.active]=\"activeMode === 'edit-remove'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startEditRemovePoints()\" \n matTooltip=\"Slet punkter i flade/linje\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Slet punkter i flade/linje\">\n }\n @if(settings.cutHoleEnabled) {\n <img \n [src]=\"clipHoleBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'clip-hole'\" \n (click)=\"clipHole()\" \n matTooltip=\"Klip hul i flade\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Klip hul i flade\">\n }\n @if(settings.splitEnabled) {\n <img \n [src]=\"splitBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'split'\"\n (click)=\"split()\" \n matTooltip=\"Del et element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Del et element\">\n }\n @if(settings.changeTypeEnabled) {\n <img \n [src]=\"changeTypeBase64\" \n class=\"compact-icon custom-image-icon\" \n [class.active]=\"activeMode === 'change-type'\" \n (click)=\"startChangeType()\"\n [matTooltipShowDelay]=\"200\"\n matTooltipClass=\"custom-tooltip\"\n [matTooltipHideDelay]=\"300\" \n matTooltip=\"Skift status p\u00E5 element\" \n alt=\"Skift status p\u00E5 element\" \n matTooltipPosition=\"below\">\n }\n @if(settings.mergeEnabled) {\n <img \n [src]=\"mergeBase64\"\n class=\"compact-icon custom-image-icon\" \n (click)=\"startMergeFeatures()\" \n matTooltipPosition=\"below\"\n [matTooltipShowDelay]=\"200\"\n matTooltipClass=\"custom-tooltip\"\n [matTooltipHideDelay]=\"300\" \n matTooltip=\"Saml flader\" \n [class.active]=\"activeMode === 'merge-features'\">\n }\n @if(settings.centerPoint) {\n <img \n [src]=\"setCenterBase64\" \n [class.active]=\"activeMode === 'center-point'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"setCenterPoint()\" \n matTooltip=\"S\u00E6t centerpunkt\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"S\u00E6t centerpunkt\">\n }\n </div>\n <div class=\"geometry-tools\">\n <img \n [src]=\"sogPolygonBase64\" \n [class.active]=\"activeMode === 'search-feature'\"\n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleFeatureSearch()\" \n matTooltip=\"V\u00E6lg og vis emner i listen\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg og vis emner i listen\">\n\n <img \n [src]=\"drawBase64\" \n [class.active]=\"activeMode === 'draw'\"\n class=\"compact-icon custom-image-icon\"\n (click)=\"startDraw()\"\n matTooltip=\"Tegn element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Tegn element\">\n @if(settings.WKTInputEnabled) {\n <img \n [src]=\"wktIconBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'wkt-input'\"\n (click)=\"activateShowInputWKT()\" \n matTooltip=\"Inds\u00E6t WKT streng for at importere elementet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Inds\u00E6t WKT streng for at importere elementet\">\n }\n </div>\n <div class=\"tool-separator\" *ngIf=\"deleteEnabled || showMeasureDistance || showMeasureArea || profile.showPrint\"></div>\n <div class=\"measurement-print-tools\">\n <div class=\"measurement-tools\">\n @if (deleteEnabled) {\n <img \n [src]=\"deleteIconBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'delete'\"\n (click)=\"startDelete()\" \n matTooltip=\"Slet element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Slet element\">\n }\n <img \n [src]=\"measureDistanceIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleMeasure()\"\n [class.active]=\"activeMode === 'measure-distance' || activeMode === 'measure-area'\"\n matTooltip=\"M\u00E5l afstand / areal\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"M\u00E5l\">\n </div>\n @if(profile.showPrint) {\n <div class=\"tool-separator print-separator\"></div>\n <div class=\"print-tools\">\n <img \n [src]=\"printBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"active === 'Print'\"\n (click)=\"startPrintMode()\" \n matTooltip=\"Sk\u00E6rmprint af kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Sk\u00E6rmprint af kortet\">\n <img \n [src]=\"drawPrintBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"active === 'PrintDraw'\"\n (click)=\"startDrawMode()\" \n matTooltip=\"Tegnev\u00E6rkt\u00F8j til print\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Tegnev\u00E6rkt\u00F8j til print\">\n </div>\n }\n </div>\n </div>\n @if (activeMode === 'draw' || activeMode === 'search-feature' || activeMode === 'wkt-input'\n || activeMode === 'change-type' || activeMode === 'merge-features') {\n <mat-select class=\"geometry-selector\" (selectionChange)=\"drawItemChanged($event)\" [(ngModel)]=\"selectedDrawItem\"> \n @for (drawItem of drawItems; track drawItem) {\n @if(activeMode !== 'merge-features' || drawItem.geomType === 'Polygon') {\n <mat-option [value]=\"drawItem\">{{drawItem.name}} <img *ngIf=\"drawItem.iconUrl\" class=\"compact-icon custom-image-icon\" [src]=\"drawItem.iconUrl\"></mat-option>\n }\n }\n </mat-select> \n }\n @if(showInputWKT && activeMode === 'wkt-input') {\n <div class=\"wkt-section\">\n <input matInput class=\"compact-input\" placeholder=\"Inds\u00E6t WKT-streng\" [(ngModel)]=\"WKTString\">\n <div class=\"wkt-actions\">\n <button class=\"compact-button primary\" (click)=\"ReadWKT()\">Indl\u00E6s WKT</button>\n <button class=\"compact-button\" (click)=\"cancelWKT()\">Annuller</button>\n </div>\n </div>\n }\n @if(profile.showPrint) {\n @if(active === \"Print\") {\n <div class=\"print-config\">\n <img \n matTooltip=\"Sk\u00E6rmprint af kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n [src]=\"printBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"doPrint()\" \n alt=\"Udskriv\"> \n <span class=\"icon-separator\">i</span>\n <select id=\"formatSelector\" [(ngModel)]=\"format\">\n <option value=\"image/png\" selected>.PNG</option>\n <option value=\"image/jpeg\">.JPG</option>\n </select>\n <select id=\"dimensionSelector\" [(ngModel)]=\"dimId\" (change)=\"handleDimensionSelected()\">\n <option value=\"99\" selected></option>\n <option value=\"0\">1920 X 1080</option>\n <option value=\"1\">1680 X 1050</option>\n <option value=\"2\">1280 X 800</option>\n <option value=\"3\">800 X 600</option>\n </select>\n <input type=\"text\" [(ngModel)]=\"mapWidth\"/> \n <span class=\"icon-separator\">x</span>\n <input type=\"text\" [(ngModel)]=\"mapHeight\"/>\n <button (click)=\"setNewMapDimensions()\">V\u00E6lg</button>\n </div>\n }\n @if(active === \"PrintDraw\") {\n <div class=\"print-draw-config\">\n <span class=\"icon-separator\">Label</span>\n <input type=\"text\" [(ngModel)]=\"printDrawLabel\"/>\n <select id=\"drawToolSelector\" [(ngModel)]=\"printDrawTool\" (change)=\"handlePrintDrawToolChanged()\">\n <option value=\"Arrow\" selected>Pil</option>\n <option value=\"Point\">Punkt</option>\n <option value=\"LineString\">Linje</option>\n <option value=\"Polygon\">Polygon</option>\n <option value=\"Circle\">Cirkel</option>\n <option value=\"Square\">Kvadrat</option>\n <option value=\"Rectangle\">Firkant</option>\n </select>\n <button class=\"compact-button\" (click)=\"handleClearPrintDrawFeatures()\">Ryd</button>\n </div>\n }\n }\n </div>\n @if (activeMode === 'search-point' || activeMode === 'search-polygon') {\n <mat-select \n class=\"search-point-polygon-selector\" \n [(ngModel)]=\"selectedSearchMode\"\n (selectionChange)=\"onSearchModeChanged($event)\">\n <mat-option value=\"search-point\">S\u00F8g med punkt</mat-option>\n <mat-option value=\"search-polygon\">S\u00F8g med polygon</mat-option>\n </mat-select>\n }\n \n @if (activeMode === 'measure-distance' || activeMode === 'measure-area') {\n <mat-select \n class=\"geometry-selector\"\n [(ngModel)]=\"selectedMeasureMode\"\n (selectionChange)=\"onMeasureModeChanged($event)\">\n <mat-option value=\"measure-distance\">M\u00E5l afstand</mat-option>\n <mat-option value=\"measure-area\">M\u00E5l areal</mat-option>\n </mat-select>\n }\n }\n </div>\n @if (activeMode === 'search-feature' && filteredResults.length > 0) {\n <div class=\"geometry-search-panel\">\n <div class=\"buffer-item\">\n <mat-label>Buffer</mat-label>\n <input matInput type=\"number\" name=\"buffer\" [(ngModel)]=\"bufferInMeters\">\n <mat-label>m</mat-label>\n </div>\n <mat-option *ngFor=\"let result of filteredResults\" [value]=\"result\" class=\"search-result-option\">\n <span class=\"result-title\">\n {{ result.title }} ({{result.items.length}} af {{ result.total }})\n </span>\n <div (click)=\"highlight(item.wkt, $event)\" *ngFor=\"let item of result.items\" class=\"search-result-item\">\n <div class=\"item-left\">\n <span class=\"item-header\"> {{item.header}} </span> \n </div>\n <div class=\"item-right\">\n <img \n [src]=\"objectSearchCopyIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"addToActiveObjectsList(item, $event)\" \n matTooltip=\"Kopier\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Kopier\">\n <img \n [src]=\"objectSearchCutIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"cutBySearchedObject(item, $event)\" \n matTooltip=\"Fjern\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Fjern\">\n <img \n [src]=\"objectSearchCutIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"splitBySearchedObject(item, $event)\" \n matTooltip=\"Opsk\u00E6r\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Opsk\u00E6r\">\n <img \n [src]=\"objectSearchCopyWithBufferIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"addToActiveObjectsList(item, $event, true)\" \n matTooltip=\"Kopier med buffer\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Kopier med buffer\">\n <img \n [src]=\"objectSearchZoomIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"zoomSearchedObject(item, $event)\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Zoom\">\n <img \n [src]=\"infoBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleItemInfo(item, $event)\" \n matTooltip=\"Info\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Info\">\n </div> \n @if (item.showMetadata) {\n <div class=\"metadata-panel\">\n @for(feature of item.metadata; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-title\">\n {{ kv.value.name }}:\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 class=\"secondary-item\">{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </mat-option>\n </div>\n }\n @if (activeMode === \"show-info\") {\n <selected-feature-info class=\"info-search-panel\"></selected-feature-info>\n }\n @if ((activeMode === \"search-point\" || activeMode === \"search-polygon\") && geometrySearchResult.length > 0) {\n <div class=\"geometry-search-panel\">\n <mat-icon (click)=\"deleteAllGeometrySearchItem()\" class=\"delete-all-icon\" matTooltip=\"Ryd\">delete</mat-icon>\n <mat-option *ngFor=\"let result of geometrySearchResult\" [value]=\"result\" class=\"search-result-option\">\n <span class=\"result-title\">\n {{ result.title }} ({{result.items.length}} af {{ result.total }})\n </span>\n <div (click)=\"highlight(item.wkt, $event)\" *ngFor=\"let item of result.items\" class=\"geometry-search-result-item\">\n <div class=\"item-left\">\n <span class=\"item-header\"> {{item.header}} </span> \n </div>\n <div class=\"item-right\">\n @if (item.url) {\n <mat-icon \n class=\"search-item-external\"\n matTooltip=\"\u00C5bn i ny tab\"\n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n (click)=\"openUrl(item.url, $event)\"\n matTooltipPosition=\"above\"\n >info</mat-icon>\n }\n <mat-icon (click)=\"deleteGeometrySearchItem(result, item.id, $event)\" >delete</mat-icon>\n </div>\n </div>\n </mat-option>\n </div>\n }\n</div>\n", styles: [".toolbox-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:10;max-width:95vw;box-shadow:0 2px 10px #0000001a;border-radius:5px;transition:width .3s ease,max-width .3s ease}.toolbox-wrapper.cdk-drag-dragging{opacity:.8;z-index:1001}.search-item-external{cursor:pointer}.drag-handle-toolbox mat-icon{font-size:18px}.drag-handle-toolbox mat-icon:first-child{display:flex;align-items:center;justify-content:center}.drag-handle-toolbox .icon-left{cursor:default!important}.right-icons{display:flex;align-items:center;gap:6px}.toggle-icon{cursor:pointer!important;transition:all .2s ease;-webkit-user-select:none;user-select:none;font-size:18px!important;display:flex;align-items:center;justify-content:center;flex-shrink:0}.toggle-icon:hover{color:#d3d3d3}:host{position:relative;display:flex;justify-content:center}:host.expanded{width:auto;min-width:320px;padding:12px}.toolbox-container{display:flex;flex-direction:column;align-items:center;width:100%;min-width:32px;transition:all .3s ease;cursor:default;border-radius:0 0 5px 5px}.toolbox-content{display:flex;flex-direction:column;width:100%;gap:3px;animation:slideDown .3s cubic-bezier(.4,0,.2,1)}.all-tools-container{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap;width:100%;justify-content:flex-start;overflow-x:hidden;padding:2px 8px}.all-tools-container::-webkit-scrollbar{height:4px}.all-tools-container::-webkit-scrollbar-thumb{background:#ccc;border-radius:2px}.main-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.main-tools .snap-toggle{display:flex;align-items:center;gap:5px;color:#fff;font-size:12px;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none}.main-tools .snap-toggle input[type=checkbox]{appearance:none;width:18px;height:18px;border:1.5px solid rgba(255,255,255,.6);border-radius:3px;background:transparent;cursor:pointer;position:relative;flex-shrink:0}.main-tools .snap-toggle input[type=checkbox]:checked{background:#f7b528;border-color:#f7b528}.main-tools .snap-toggle input[type=checkbox]:checked:after{content:\"\";position:absolute;left:4px;top:0;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg)}.geometry-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.measurement-print-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap;background:none;border-radius:8px;padding:3px 0}.measurement-tools,.print-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.measurement-tools .compact-icon,.print-tools .compact-icon{transition:all .3s cubic-bezier(.4,0,.2,1)}.print-tools .compact-icon{background:none;color:#fff}.print-tools .compact-icon.active{background:#f7b528!important;border-color:transparent}.print-tools .compact-icon.active:hover{background:#ffffff1a}.print-tools .compact-icon:hover:not(.active){box-shadow:0 4px 12px #0000004d;opacity:.9}.tool-separator{width:1px;height:24px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent)}.tool-separator.print-separator{height:28px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.5),transparent)}.compact-icon{cursor:pointer;color:#fff;transition:all .3s cubic-bezier(.4,0,.2,1);width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:6px;flex-shrink:0}.compact-icon.active{color:#fff;background:#f7b528!important;border-color:transparent;box-shadow:0 8px 25px #667eea4d}.compact-icon.active:hover{box-shadow:0 12px 35px #667eea66}.compact-icon:hover:not(.active){color:#fff;box-shadow:0 4px 12px #0003}.compact-icon.custom-image-icon{padding:2px;background:none;border:none}.compact-icon.custom-image-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease,transform .2s ease}.compact-icon.custom-image-icon.active{background:#ffffff1a;border-color:none;box-shadow:none}.compact-icon.custom-image-icon.active img{filter:brightness(0) invert(1)}.compact-icon.custom-image-icon.active:hover{box-shadow:0 12px 35px #667eea66}.compact-icon.custom-image-icon:hover:not(.active){box-shadow:0 4px 12px #0003}.compact-icon.custom-image-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}.search-point-polygon-selector{width:24%;margin-right:auto;padding:6px}.search-point-polygon-selector ::ng-deep .mat-mdc-select{font-size:14px;line-height:1.4;border-radius:5px}.search-point-polygon-selector ::ng-deep .mat-mdc-select-trigger{height:32px;min-height:32px;padding:0 10px;border:none;border-radius:6px;background:#6d6f73;transition:all .2s ease}.search-point-polygon-selector ::ng-deep .mat-mdc-select-trigger:hover{background:#6d6f73}.search-point-polygon-selector ::ng-deep .mat-mdc-select-value{font-size:14px;font-weight:500;color:#fff}.search-point-polygon-selector ::ng-deep .mat-mdc-select-arrow-wrapper{height:16px}.search-point-polygon-selector ::ng-deep .mat-mdc-form-field-infix{min-height:32px;padding:6px 0}.search-point-polygon-selector ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.geometry-selector{width:34%;margin-left:15em;padding:6px}.geometry-selector ::ng-deep .mat-mdc-select{font-size:14px;line-height:1.4;border-radius:5px}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:32px;min-height:32px;padding:0 10px;border:none;border-radius:6px;background:#6d6f73;transition:all .2s ease}.geometry-selector ::ng-deep .mat-mdc-select-trigger:hover{background:#6d6f73}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:14px;font-weight:500;color:#fff}.geometry-selector ::ng-deep .mat-mdc-select-arrow-wrapper{height:16px}.geometry-selector ::ng-deep .mat-mdc-form-field-infix{min-height:32px;padding:6px 0}.geometry-selector ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-select-panel{min-width:fit-content!important;max-width:320px!important;background:#4c4d51!important;border:none!important;border-radius:8px!important;box-shadow:0 8px 24px #0000001f,0 2px 6px #00000014!important;margin-top:6px!important;padding:4px 0!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:14px!important;min-height:30px!important;padding:0 14px!important;transition:all .15s ease!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option:hover:not(.mat-mdc-option-disabled){background:#444849!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option.mat-active{background:color-mix(in srgb,#000 60%,transparent)!important;color:#fff!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option .mdc-list-item__primary-text{font-weight:500!important;color:#fff!important}::ng-deep .cdk-overlay-pane{z-index:1001}::ng-deep .cdk-overlay-backdrop{z-index:1000}.wkt-section{display:flex;flex-direction:column;gap:8px;border-top:1px solid rgba(255,255,255,.1);animation:fadeIn .2s ease;padding:10px 8px}.wkt-actions{display:flex;gap:6px;justify-content:space-between}.compact-button{padding:6px 10px;border:none;border-radius:5px;background:#6d6f73;color:#fff;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);text-transform:uppercase;min-height:32px;display:flex;align-items:center;justify-content:center;flex:1;box-shadow:0 1px 2px #0000000d}.compact-button.primary.active{background:#f7b528;box-shadow:0 8px 25px #667eea4d;color:#fff}.compact-button.primary.active:hover{box-shadow:0 12px 35px #667eea66}.compact-button.secondary{background:color-mix(in srgb,#000 20%,transparent);color:#fff}.compact-button.secondary:hover{background:color-mix(in srgb,#5a6268 60%,transparent)}.compact-input{padding:8px 10px;border-radius:5px;font-size:13px;transition:all .2s ease;background:#6d6f73;border:none;color:#fff}.compact-input::placeholder{color:#ffffffb3}.compact-input:focus{outline:none;background:#6d6f73;border:1px solid #97989b}.print-config,.print-draw-config{display:flex;align-items:center;gap:8px;padding:5px;background:transparent;border:none;border-radius:8px;animation:slideDown .3s ease}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{background:#6d6f73;border:none;color:#fff;border-radius:6px;font-size:12px;height:32px;min-height:32px;padding:0 10px}.print-config select:focus,.print-config input:focus,.print-draw-config select:focus,.print-draw-config input:focus{outline:none}.print-config select,.print-draw-config select{cursor:pointer}.print-config option,.print-draw-config option{background:#6d6f73!important;border:none!important}.print-config input,.print-draw-config input{width:60px;text-align:center}.print-config button,.print-draw-config button{background:#6ccb78;color:#fff;border:none;padding:6px 12px;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s ease}.print-config button:hover,.print-draw-config button:hover{box-shadow:0 4px 12px #10b9814d}.print-config .icon-separator,.print-draw-config .icon-separator{color:#fff}.info-search-panel{position:absolute;right:0;z-index:1000;width:380px;max-height:360px!important;max-width:430px;background:#4c4d51!important;border:1px solid rgba(255,255,255,.07);border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0 8px 24px #00000026!important}.geometry-search-panel{position:absolute;right:0;z-index:1000;width:380px}.geometry-search-panel .delete-all-icon{color:#fff;margin-left:315px}.geometry-search-panel::-webkit-scrollbar{width:12px}.geometry-search-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}.geometry-search-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.geometry-search-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}.search-result-option{display:block!important;padding:0!important;margin:0!important;background:transparent!important}.search-result-option:last-child{border-bottom:none}.search-result-option .mdc-list-item__primary-text{width:100%!important;margin:0!important;padding:0!important}.result-title{display:block;top:0;z-index:1;font-weight:600;color:#bdc1c3cc}.search-result-item{display:flex;align-items:center;padding:4px 14px;cursor:pointer;transition:background-color .15s ease;border-radius:5px}.item-left{flex:1;width:100%}.item-header{color:#fff;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.search-empty-state{padding:32px 16px;text-align:center;color:#757575}.search-empty-state .empty-icon{font-size:40px;width:40px;height:40px;color:#bdbdbd;margin-bottom:12px}.search-empty-state .empty-title{font-size:14px;font-weight:500;margin-bottom:4px}.search-empty-state .empty-subtitle{font-size:12px;color:#9e9e9e}::ng-deep .metadata-panel{margin-top:5px;margin-bottom:5px}::ng-deep .metadata-panel .feature-item{padding:8px 12px;margin:4px 0;background:#ffffff0d;border-radius:5px;transition:all .2s ease}::ng-deep .metadata-panel .feature-item:hover{background:#ffffff1a;box-shadow:0 2px 8px #00000026}::ng-deep .metadata-panel .feature-item:first-child{margin-top:0}::ng-deep .metadata-panel .feature-item:last-child{margin-bottom:0}::ng-deep .metadata-panel .feature-title{color:#bdc1c3cc;font-size:13px;line-height:1.6;display:flex;align-items:center;gap:6px;letter-spacing:.2px}::ng-deep .metadata-panel .feature-title:first-child{margin-top:0}::ng-deep .metadata-panel .feature-title:last-child{margin-bottom:0}::ng-deep .metadata-panel .feature-title img{border-radius:4px;margin-top:4px;box-shadow:0 2px 6px #0003}::ng-deep .metadata-panel .feature-title a{color:#6ccb78;text-decoration:none;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}::ng-deep .metadata-panel .feature-title a:hover{color:#85d990;text-decoration:underline}::ng-deep .metadata-panel .feature-title a .link-icon{font-size:16px;width:16px;height:16px}::ng-deep .metadata-panel .secondary-item{color:#fff;font-weight:400}::ng-deep .geometry-search-panel{max-height:360px!important;overflow-y:auto!important;max-width:430px;background:#4c4d51!important;border:1px solid rgba(255,255,255,.07);border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0 8px 24px #00000026!important}::ng-deep .geometry-search-panel::-webkit-scrollbar{width:4px}::ng-deep .geometry-search-panel::-webkit-scrollbar-track{background:transparent}::ng-deep .geometry-search-panel::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:10px}::ng-deep .geometry-search-panel::-webkit-scrollbar-thumb:hover{background:#fff3}::ng-deep .geometry-search-panel .buffer-item{display:flex;align-items:center;gap:8px;padding:10px 14px 8px;background:#0003;border-bottom:1px solid rgba(255,255,255,.06)}::ng-deep .geometry-search-panel .buffer-item mat-label{color:#9ca3af;font-size:12px;font-weight:500;letter-spacing:.3px}::ng-deep .geometry-search-panel .buffer-item input{width:52px;margin:0;background:#3a3d42;border:1px solid rgba(255,255,255,.1);border-radius:5px;color:#fff;font-size:12px;padding:4px 8px;text-align:center;outline:none;transition:border-color .15s ease}::ng-deep .geometry-search-panel .buffer-item input:focus{border-color:#f7b528}::ng-deep .geometry-search-panel .result-title{display:flex;align-items:center;gap:8px;padding:8px 14px 4px;font-size:14px;font-weight:600;color:#bdc1c3cc;position:sticky;top:0;z-index:1}::ng-deep .geometry-search-panel .search-result-item{display:flex;flex-direction:column;gap:5px;padding:8px 14px;cursor:pointer;border-left:2px solid transparent;transition:background .12s ease,border-color .12s ease}::ng-deep .geometry-search-panel .search-result-item+.search-result-item{border-top:1px solid rgba(255,255,255,.04)}::ng-deep .geometry-search-panel .search-result-item:hover{background:#ffffff09}::ng-deep .geometry-search-panel .search-result-item:hover .item-header{color:#fff}::ng-deep .geometry-search-panel .search-result-item:last-child{border-radius:0 0 10px 10px}::ng-deep .geometry-search-panel .item-header{color:#d1d5db;font-size:14px;font-weight:500;line-height:1.4;display:block;word-wrap:break-word;overflow-wrap:break-word;transition:color .12s ease}::ng-deep .geometry-search-panel .item-right{display:flex;align-items:center;gap:3px;flex-wrap:wrap;width:100%}::ng-deep .geometry-search-panel .item-right .custom-image-icon{width:26px;height:26px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:#fff!important;border:1px solid rgba(255,255,255,0);border-radius:5px;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease!important}::ng-deep .geometry-search-panel .item-right .custom-image-icon:hover{background:#ffffff0d!important;box-shadow:0 0 0 1px #f7b5282e}::ng-deep .geometry-search-panel .mat-mdc-option{min-height:30px!important;border-radius:5px!important;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:auto;padding:4px 0!important}::ng-deep .geometry-search-panel .mat-mdc-option .mdc-list-item__primary-text{color:#fff}::ng-deep .geometry-search-panel mat-label{color:#fff}::ng-deep .mat-mdc-simple-snack-bar{background-color:#fff!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px}@media (max-width: 768px){.toolbox-wrapper{left:.5em;top:8em;max-width:calc(100vw - 2.5em)}.drag-handle-toolbox{padding:3px 6px;gap:6px}.drag-handle-toolbox mat-icon{font-size:16px;width:16px;height:16px}.toggle-icon{font-size:16px!important;width:16px!important;height:16px!important}.toolbox-container{min-width:28px;max-width:calc(100vw - 3em)}:host{padding:8px;min-width:32px}:host.expanded{min-width:280px;padding:10px}.all-tools-container{flex-wrap:wrap;gap:6px;max-height:50vh;overflow-y:auto;padding:0;-ms-overflow-style:none;scrollbar-width:none}.all-tools-container::-webkit-scrollbar{display:none}.main-tools,.geometry-tools,.measurement-print-tools,.print-tools{display:flex;flex-wrap:wrap;justify-content:center;gap:4px}.compact-icon{width:28px;height:28px;flex-shrink:0}.measurement-print-tools{padding:3px 0}.geometry-selector{width:30%;margin-bottom:8px}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:28px;min-height:28px;padding:0 8px;font-size:12px}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:12px}::ng-deep .mat-mdc-select-panel{max-width:calc(100vw - 2em)!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:13px!important;min-height:32px!important;padding:6px 12px!important}.print-config,.print-draw-config{flex-direction:column;align-items:stretch;gap:6px}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{font-size:11px;padding:4px 8px;height:28px;min-height:28px}.print-config input,.print-draw-config input{width:50px}.print-config button,.print-draw-config button{padding:4px 8px;font-size:11px;height:28px}.wkt-section .compact-input{font-size:12px;padding:6px 8px}.wkt-section .compact-button{font-size:11px;padding:5px 8px;min-height:28px}::ng-deep .mat-mdc-slide-toggle .mdc-label{font-size:11px!important}.geometry-search-panel{width:calc(100vw - 40px);max-width:400px;left:50%;max-height:70vh}.search-result-item{padding:8px 12px}.item-header{font-size:13px}.result-title{padding:10px 12px;font-size:13px}}.geometry-search-result-item{display:flex;padding:4px 14px;cursor:pointer;transition:background-color .15s ease;border-radius:5px}.geometry-search-result-item .item-header{width:260px}@media (max-width: 480px){.toolbox-wrapper{left:.25em;top:6em;transform-origin:left top;max-width:calc(100vw - .5em)}.drag-handle-toolbox{padding:2px 4px;gap:4px}.drag-handle-toolbox mat-icon{font-size:14px;width:14px;height:14px}.toggle-icon{font-size:14px!important;width:14px!important;height:14px!important}.toolbox-container{padding:2px;min-width:24px}.all-tools-container{flex-direction:row;align-items:center;max-height:60vh}.main-tools,.geometry-tools{gap:3px;flex-wrap:wrap;justify-content:center}.measurement-print-tools{gap:3px;flex-wrap:wrap;padding:2px 4px;width:100%;justify-content:center}.measurement-tools,.print-tools{gap:3px}.compact-icon{width:26px;height:26px}.tool-separator{display:none}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:26px;min-height:26px;padding:0 6px;font-size:11px}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:11px}.compact-button{font-size:10px;padding:4px 6px;min-height:26px}.compact-input{font-size:11px;padding:4px 6px}.print-config,.print-draw-config{gap:4px;padding:6px}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{font-size:10px;height:26px;min-height:26px;padding:2px 6px}.print-config input,.print-draw-config input{width:45px}.print-config button,.print-draw-config button{flex:1;min-width:60px;font-size:10px;padding:3px 6px;height:26px}.print-config .icon-separator,.print-draw-config .icon-separator{font-size:10px}.wkt-section{gap:6px;padding-top:8px}::ng-deep .mat-mdc-slide-toggle .mdc-label{font-size:10px!important}::ng-deep .mat-mdc-select-panel{max-width:calc(100vw - 1em)!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:12px!important;min-height:28px!important;padding:4px 10px!important}.geometry-search-panel{width:calc(100vw - 32px);max-height:60vh}.search-result-item{padding:6px 10px}.item-header{font-size:12px;-webkit-line-clamp:1}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "component", type: i6$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: SelectedFeatureInfoComponent, selector: "selected-feature-info" }] });
4323
4425
  }
4324
4426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ToolboxComponent, decorators: [{
4325
4427
  type: Component,
4326
- args: [{ selector: 'map-toolbox', imports: [FormsModule, CommonModule, MatIconModule, MatOptionModule, MatSelectModule, DragDropModule, MatTooltipModule], template: "<div class=\"toolbox-wrapper global-wrapper-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-toolbox\" cdkDragHandle>\n <mat-icon \n class=\"icon-left\" \n matTooltip=\"V\u00E6rkt\u00F8jskasse\" \n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n handyman\n </mat-icon> \n <div class=\"right-icons\"> \n <mat-icon class=\"toggle-icon\" (click)=\"toggleCollapsed($event)\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n \n <div class=\"toolbox-container\">\n @if(!collapsed) {\n <div class=\"toolbox-content\">\n <div class=\"all-tools-container\">\n <div class=\"main-tools\">\n @if(!settings?.undoDisabled) {\n <img \n [src]=\"undoIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"undo()\" \n matTooltip=\"Fortryd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Undo\">\n\n <img \n [src]=\"redoIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"redo()\" \n matTooltip=\"Gendan\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Redo\">\n }\n @if (settings.externalHelpUrl) {\n <img \n [src]=\"infoBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"openUrl(settings.externalHelpUrl, $event)\"\n matTooltip=\"Vejledning til anvendelse af systemet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Vejledning til anvendelse af systemet\">\n } \n <img \n [src]=\"showInfoObjBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleShowInfo()\" \n [class.active]=\"activeMode === 'show-info'\"\n matTooltip=\"V\u00E6lg og vis objektdata i tr\u00E6struktur\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg og vis objektdata i tr\u00E6 struktur\">\n <img \n [src]=\"downloadFileBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDownloadAddresses()\" \n [class.active]=\"activeMode === 'download-addresses'\"\n matTooltip=\"Download adresser\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Download adresser\">\n <img \n [src]=\"downloadMatriklerBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDownloadCasdatres()\" \n [class.active]=\"activeMode === 'download-cadastres'\"\n matTooltip=\"Download matrikler\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Download matrikler\">\n\n <img \n [src]=\"splitIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"togglePointPolygonSearch()\"\n [class.active]=\"activeMode === 'search-point' || activeMode === 'search-polygon'\"\n matTooltip=\"V\u00E6lg Lokaliteter ved udpegning i kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg Lokaliteter ved udpegning i kortet\">\n @if (settings.showDocumentSearch) {\n\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDocumentPointSearch()\"\n [class.active]=\"activeMode === 'document-search-by-point'\"\n matTooltip=\"Dokument fra punkt\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Dokument fra punkt\">\n\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDocumentPolygonSearch()\"\n [class.active]=\"activeMode === 'document-search-by-polygon'\"\n matTooltip=\"Dokumenter fra polygon\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Dokumenter fra polygon\">\n }\n @if (settings.cowiUrlTemplate) {\n <img \n [src]=\"openCowiPageBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'cowi'\"\n (click)=\"toggleCowiPage()\" \n matTooltip=\"COWI\u00B4s Gadefoto\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"COWI\u00B4s Gadefoto\">\n }\n @if (settings.skraaFotoUrlTemplate) {\n <img \n [src]=\"skrafotoBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'skrafoto'\"\n (click)=\"toggleSkraafotoPage()\" \n matTooltip=\"Opslag p\u00E5 Skr\u00E5fotos\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Skr\u00E5foto\">\n }\n <img \n [src]=\"streetViewBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'streetview'\"\n (click)=\"toggleGoogleStreetviewPage()\" \n matTooltip=\"Google Streetview\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Google Streetview\">\n <img \n [src]=\"fremhaevBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'select-highlight'\"\n (click)=\"startSelectFeatureHighlight()\" \n matTooltip=\"Fremh\u00E6v aktivt objekt i listen\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Fremh\u00E6v\">\n @if (activeMode === 'draw' || activeMode === 'edit' || activeMode === 'edit-remove' || activeMode === 'search-feature' ||\n activeMode === 'clip-hole' || activeMode === 'split' || activeMode === 'merge-features') {\n <label class=\"snap-toggle\">\n <input type=\"checkbox\" [checked]=\"snap\" (change)=\"onSnapChange($event)\">\n Snap\n </label> \n } \n @if(settings.editEnabled) {\n <img \n [src]=\"editBase64\" \n [class.active]=\"activeMode === 'edit'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startEdit()\" \n matTooltip=\"Inds\u00E6t eller flyt punkter i flade/linje\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Inds\u00E6t eller flyt punkter i flade/linje\">\n <img \n [src]=\"deleteIconBase64\" \n [class.active]=\"activeMode === 'edit-remove'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startEditRemovePoints()\" \n matTooltip=\"Slet punkter i flade/linje\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Slet punkter i flade/linje\">\n }\n @if(settings.cutHoleEnabled) {\n <img \n [src]=\"clipHoleBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'clip-hole'\" \n (click)=\"clipHole()\" \n matTooltip=\"Klip hul i flade\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Klip hul i flade\">\n }\n @if(settings.splitEnabled) {\n <img \n [src]=\"splitBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'split'\"\n (click)=\"split()\" \n matTooltip=\"Del et element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Del et element\">\n }\n @if(settings.changeTypeEnabled) {\n <img \n [src]=\"changeTypeBase64\" \n class=\"compact-icon custom-image-icon\" \n [class.active]=\"activeMode === 'change-type'\" \n (click)=\"startChangeType()\"\n [matTooltipShowDelay]=\"200\"\n matTooltipClass=\"custom-tooltip\"\n [matTooltipHideDelay]=\"300\" \n matTooltip=\"Skift status p\u00E5 element\" \n alt=\"Skift status p\u00E5 element\" \n matTooltipPosition=\"below\">\n }\n @if(settings.mergeEnabled) {\n <img \n [src]=\"mergeBase64\"\n class=\"compact-icon custom-image-icon\" \n (click)=\"startMergeFeatures()\" \n matTooltipPosition=\"below\"\n [matTooltipShowDelay]=\"200\"\n matTooltipClass=\"custom-tooltip\"\n [matTooltipHideDelay]=\"300\" \n matTooltip=\"Saml flader\" \n [class.active]=\"activeMode === 'merge-features'\">\n }\n @if(settings.centerPoint) {\n <img \n [src]=\"setCenterBase64\" \n [class.active]=\"activeMode === 'center-point'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"setCenterPoint()\" \n matTooltip=\"S\u00E6t centerpunkt\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"S\u00E6t centerpunkt\">\n }\n </div>\n <div class=\"geometry-tools\">\n <img \n [src]=\"sogPolygonBase64\" \n [class.active]=\"activeMode === 'search-feature'\"\n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleFeatureSearch()\" \n matTooltip=\"V\u00E6lg og vis emner i listen\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg og vis emner i listen\">\n\n <img \n [src]=\"drawBase64\" \n [class.active]=\"activeMode === 'draw'\"\n class=\"compact-icon custom-image-icon\"\n (click)=\"startDraw()\"\n matTooltip=\"Tegn element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Tegn element\">\n @if(settings.WKTInputEnabled) {\n <img \n [src]=\"wktIconBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'wkt-input'\"\n (click)=\"activateShowInputWKT()\" \n matTooltip=\"Inds\u00E6t WKT streng for at importere elementet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Inds\u00E6t WKT streng for at importere elementet\">\n }\n </div>\n <div class=\"tool-separator\" *ngIf=\"deleteEnabled || showMeasureDistance || showMeasureArea || profile.showPrint\"></div>\n <div class=\"measurement-print-tools\">\n <div class=\"measurement-tools\">\n @if (deleteEnabled) {\n <img \n [src]=\"deleteIconBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'delete'\"\n (click)=\"startDelete()\" \n matTooltip=\"Slet element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Slet element\">\n }\n <img \n [src]=\"measureDistanceIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleMeasure()\"\n [class.active]=\"activeMode === 'measure-distance' || activeMode === 'measure-area'\"\n matTooltip=\"M\u00E5l afstand / areal\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"M\u00E5l\">\n </div>\n @if(profile.showPrint) {\n <div class=\"tool-separator print-separator\"></div>\n <div class=\"print-tools\">\n <img \n [src]=\"printBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"active === 'Print'\"\n (click)=\"startPrintMode()\" \n matTooltip=\"Sk\u00E6rmprint af kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Sk\u00E6rmprint af kortet\">\n <img \n [src]=\"drawPrintBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"active === 'PrintDraw'\"\n (click)=\"startDrawMode()\" \n matTooltip=\"Tegnev\u00E6rkt\u00F8j til print\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Tegnev\u00E6rkt\u00F8j til print\">\n </div>\n }\n </div>\n </div>\n @if (activeMode === 'draw' || activeMode === 'search-feature' || activeMode === 'wkt-input'\n || activeMode === 'change-type' || activeMode === 'merge-features') {\n <mat-select class=\"geometry-selector\" (selectionChange)=\"drawItemChanged($event)\" [(ngModel)]=\"selectedDrawItem\"> \n @for (drawItem of drawItems; track drawItem) {\n @if(activeMode !== 'merge-features' || drawItem.geomType === 'Polygon') {\n <mat-option [value]=\"drawItem\">{{drawItem.name}} <img *ngIf=\"drawItem.iconUrl\" class=\"compact-icon custom-image-icon\" [src]=\"drawItem.iconUrl\"></mat-option>\n }\n }\n </mat-select> \n }\n @if(showInputWKT && activeMode === 'wkt-input') {\n <div class=\"wkt-section\">\n <input matInput class=\"compact-input\" placeholder=\"Inds\u00E6t WKT-streng\" [(ngModel)]=\"WKTString\">\n <div class=\"wkt-actions\">\n <button class=\"compact-button primary\" (click)=\"ReadWKT()\">Indl\u00E6s WKT</button>\n <button class=\"compact-button\" (click)=\"cancelWKT()\">Annuller</button>\n </div>\n </div>\n }\n @if(profile.showPrint) {\n @if(active === \"Print\") {\n <div class=\"print-config\">\n <img \n matTooltip=\"Sk\u00E6rmprint af kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n [src]=\"printBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"doPrint()\" \n alt=\"Udskriv\"> \n <span class=\"icon-separator\">i</span>\n <select id=\"formatSelector\" [(ngModel)]=\"format\">\n <option value=\"image/png\" selected>.PNG</option>\n <option value=\"image/jpeg\">.JPG</option>\n </select>\n <select id=\"dimensionSelector\" [(ngModel)]=\"dimId\" (change)=\"handleDimensionSelected()\">\n <option value=\"99\" selected></option>\n <option value=\"0\">1920 X 1080</option>\n <option value=\"1\">1680 X 1050</option>\n <option value=\"2\">1280 X 800</option>\n <option value=\"3\">800 X 600</option>\n </select>\n <input type=\"text\" [(ngModel)]=\"mapWidth\"/> \n <span class=\"icon-separator\">x</span>\n <input type=\"text\" [(ngModel)]=\"mapHeight\"/>\n <button (click)=\"setNewMapDimensions()\">V\u00E6lg</button>\n </div>\n }\n @if(active === \"PrintDraw\") {\n <div class=\"print-draw-config\">\n <span class=\"icon-separator\">Label</span>\n <input type=\"text\" [(ngModel)]=\"printDrawLabel\"/>\n <select id=\"drawToolSelector\" [(ngModel)]=\"printDrawTool\" (change)=\"handlePrintDrawToolChanged()\">\n <option value=\"Arrow\" selected>Pil</option>\n <option value=\"Point\">Punkt</option>\n <option value=\"LineString\">Linje</option>\n <option value=\"Polygon\">Polygon</option>\n <option value=\"Circle\">Cirkel</option>\n <option value=\"Square\">Kvadrat</option>\n <option value=\"Rectangle\">Firkant</option>\n </select>\n <button class=\"compact-button\" (click)=\"handleClearPrintDrawFeatures()\">Ryd</button>\n </div>\n }\n }\n </div>\n @if (activeMode === 'search-point' || activeMode === 'search-polygon') {\n <mat-select \n class=\"search-point-polygon-selector\" \n [(ngModel)]=\"selectedSearchMode\"\n (selectionChange)=\"onSearchModeChanged($event)\">\n <mat-option value=\"search-point\">S\u00F8g med punkt</mat-option>\n <mat-option value=\"search-polygon\">S\u00F8g med polygon</mat-option>\n </mat-select>\n }\n \n @if (activeMode === 'measure-distance' || activeMode === 'measure-area') {\n <mat-select \n class=\"geometry-selector\"\n [(ngModel)]=\"selectedMeasureMode\"\n (selectionChange)=\"onMeasureModeChanged($event)\">\n <mat-option value=\"measure-distance\">M\u00E5l afstand</mat-option>\n <mat-option value=\"measure-area\">M\u00E5l areal</mat-option>\n </mat-select>\n }\n }\n </div>\n @if (activeMode === 'search-feature' && filteredResults.length > 0) {\n <div class=\"geometry-search-panel\">\n <div class=\"buffer-item\">\n <mat-label>Buffer</mat-label>\n <input matInput type=\"number\" name=\"buffer\" [(ngModel)]=\"bufferInMeters\">\n <mat-label>m</mat-label>\n </div>\n <mat-option *ngFor=\"let result of filteredResults\" [value]=\"result\" class=\"search-result-option\">\n <span class=\"result-title\">\n {{ result.title }} ({{result.items.length}} af {{ result.total }})\n </span>\n <div (click)=\"highlight(item.wkt, $event)\" *ngFor=\"let item of result.items\" class=\"search-result-item\">\n <div class=\"item-left\">\n <span class=\"item-header\"> {{item.header}} </span> \n </div>\n <div class=\"item-right\">\n <img \n [src]=\"objectSearchCopyIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"addToActiveObjectsList(item, $event)\" \n matTooltip=\"Kopier\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Kopier\">\n <img \n [src]=\"objectSearchCutIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"cutBySearchedObject(item, $event)\" \n matTooltip=\"Fjern\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Fjern\">\n <img \n [src]=\"objectSearchCutIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"splitBySearchedObject(item, $event)\" \n matTooltip=\"Opsk\u00E6r\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Opsk\u00E6r\">\n <img \n [src]=\"objectSearchCopyWithBufferIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"addToActiveObjectsList(item, $event, true)\" \n matTooltip=\"Kopier med buffer\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Kopier med buffer\">\n <img \n [src]=\"objectSearchZoomIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"zoomSearchedObject(item, $event)\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Zoom\">\n <img \n [src]=\"infoBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleItemInfo(item, $event)\" \n matTooltip=\"Info\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Info\">\n </div> \n @if (item.showMetadata) {\n <div class=\"metadata-panel\">\n @for(feature of item.metadata; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-title\">\n {{ kv.value.name }}:\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 class=\"secondary-item\">{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </mat-option>\n </div>\n }\n @if ((activeMode === \"search-point\" || activeMode === \"search-polygon\") && geometrySearchResult.length > 0) {\n <div class=\"geometry-search-panel\">\n <mat-icon (click)=\"deleteAllGeometrySearchItem()\" class=\"delete-all-icon\" matTooltip=\"Ryd\">delete</mat-icon>\n <mat-option *ngFor=\"let result of geometrySearchResult\" [value]=\"result\" class=\"search-result-option\">\n <span class=\"result-title\">\n {{ result.title }} ({{result.items.length}} af {{ result.total }})\n </span>\n <div (click)=\"highlight(item.wkt, $event)\" *ngFor=\"let item of result.items\" class=\"geometry-search-result-item\">\n <div class=\"item-left\">\n <span class=\"item-header\"> {{item.header}} </span> \n </div>\n <div class=\"item-right\">\n @if (item.url) {\n <mat-icon \n class=\"search-item-external\"\n matTooltip=\"\u00C5bn i ny tab\"\n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n (click)=\"openUrl(item.url, $event)\"\n matTooltipPosition=\"above\"\n >info</mat-icon>\n }\n <mat-icon (click)=\"deleteGeometrySearchItem(result, item.id, $event)\" >delete</mat-icon>\n </div>\n </div>\n </mat-option>\n </div>\n }\n</div>\n", styles: [".toolbox-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:10;max-width:95vw;box-shadow:0 2px 10px #0000001a;border-radius:5px;transition:width .3s ease,max-width .3s ease}.toolbox-wrapper.cdk-drag-dragging{opacity:.8;z-index:1001}.search-item-external{cursor:pointer}.drag-handle-toolbox mat-icon{font-size:18px}.drag-handle-toolbox mat-icon:first-child{display:flex;align-items:center;justify-content:center}.drag-handle-toolbox .icon-left{cursor:default!important}.right-icons{display:flex;align-items:center;gap:6px}.toggle-icon{cursor:pointer!important;transition:all .2s ease;-webkit-user-select:none;user-select:none;font-size:18px!important;display:flex;align-items:center;justify-content:center;flex-shrink:0}.toggle-icon:hover{color:#d3d3d3}:host{position:relative;display:flex;justify-content:center}:host.expanded{width:auto;min-width:320px;padding:12px}.toolbox-container{display:flex;flex-direction:column;align-items:center;width:100%;min-width:32px;transition:all .3s ease;cursor:default;border-radius:0 0 5px 5px}.toolbox-content{display:flex;flex-direction:column;width:100%;gap:3px;animation:slideDown .3s cubic-bezier(.4,0,.2,1)}.all-tools-container{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap;width:100%;justify-content:flex-start;overflow-x:hidden;padding:2px 8px}.all-tools-container::-webkit-scrollbar{height:4px}.all-tools-container::-webkit-scrollbar-thumb{background:#ccc;border-radius:2px}.main-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.main-tools .snap-toggle{display:flex;align-items:center;gap:5px;color:#fff;font-size:12px;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none}.main-tools .snap-toggle input[type=checkbox]{appearance:none;width:18px;height:18px;border:1.5px solid rgba(255,255,255,.6);border-radius:3px;background:transparent;cursor:pointer;position:relative;flex-shrink:0}.main-tools .snap-toggle input[type=checkbox]:checked{background:#f7b528;border-color:#f7b528}.main-tools .snap-toggle input[type=checkbox]:checked:after{content:\"\";position:absolute;left:4px;top:0;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg)}.geometry-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.measurement-print-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap;background:none;border-radius:8px;padding:3px 0}.measurement-tools,.print-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.measurement-tools .compact-icon,.print-tools .compact-icon{transition:all .3s cubic-bezier(.4,0,.2,1)}.print-tools .compact-icon{background:none;color:#fff}.print-tools .compact-icon.active{background:#f7b528!important;border-color:transparent}.print-tools .compact-icon.active:hover{background:#ffffff1a}.print-tools .compact-icon:hover:not(.active){box-shadow:0 4px 12px #0000004d;opacity:.9}.tool-separator{width:1px;height:24px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent)}.tool-separator.print-separator{height:28px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.5),transparent)}.compact-icon{cursor:pointer;color:#fff;transition:all .3s cubic-bezier(.4,0,.2,1);width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:6px;flex-shrink:0}.compact-icon.active{color:#fff;background:#f7b528!important;border-color:transparent;box-shadow:0 8px 25px #667eea4d}.compact-icon.active:hover{box-shadow:0 12px 35px #667eea66}.compact-icon:hover:not(.active){color:#fff;box-shadow:0 4px 12px #0003}.compact-icon.custom-image-icon{padding:2px;background:none;border:none}.compact-icon.custom-image-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease,transform .2s ease}.compact-icon.custom-image-icon.active{background:#ffffff1a;border-color:none;box-shadow:none}.compact-icon.custom-image-icon.active img{filter:brightness(0) invert(1)}.compact-icon.custom-image-icon.active:hover{box-shadow:0 12px 35px #667eea66}.compact-icon.custom-image-icon:hover:not(.active){box-shadow:0 4px 12px #0003}.compact-icon.custom-image-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}.search-point-polygon-selector{width:24%;margin-right:auto;padding:6px}.search-point-polygon-selector ::ng-deep .mat-mdc-select{font-size:14px;line-height:1.4;border-radius:5px}.search-point-polygon-selector ::ng-deep .mat-mdc-select-trigger{height:32px;min-height:32px;padding:0 10px;border:none;border-radius:6px;background:#6d6f73;transition:all .2s ease}.search-point-polygon-selector ::ng-deep .mat-mdc-select-trigger:hover{background:#6d6f73}.search-point-polygon-selector ::ng-deep .mat-mdc-select-value{font-size:14px;font-weight:500;color:#fff}.search-point-polygon-selector ::ng-deep .mat-mdc-select-arrow-wrapper{height:16px}.search-point-polygon-selector ::ng-deep .mat-mdc-form-field-infix{min-height:32px;padding:6px 0}.search-point-polygon-selector ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.geometry-selector{width:34%;margin-left:15em;padding:6px}.geometry-selector ::ng-deep .mat-mdc-select{font-size:14px;line-height:1.4;border-radius:5px}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:32px;min-height:32px;padding:0 10px;border:none;border-radius:6px;background:#6d6f73;transition:all .2s ease}.geometry-selector ::ng-deep .mat-mdc-select-trigger:hover{background:#6d6f73}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:14px;font-weight:500;color:#fff}.geometry-selector ::ng-deep .mat-mdc-select-arrow-wrapper{height:16px}.geometry-selector ::ng-deep .mat-mdc-form-field-infix{min-height:32px;padding:6px 0}.geometry-selector ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-select-panel{min-width:fit-content!important;max-width:320px!important;background:#4c4d51!important;border:none!important;border-radius:8px!important;box-shadow:0 8px 24px #0000001f,0 2px 6px #00000014!important;margin-top:6px!important;padding:4px 0!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:14px!important;min-height:30px!important;padding:0 14px!important;transition:all .15s ease!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option:hover:not(.mat-mdc-option-disabled){background:#444849!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option.mat-active{background:color-mix(in srgb,#000 60%,transparent)!important;color:#fff!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option .mdc-list-item__primary-text{font-weight:500!important;color:#fff!important}::ng-deep .cdk-overlay-pane{z-index:1001}::ng-deep .cdk-overlay-backdrop{z-index:1000}.wkt-section{display:flex;flex-direction:column;gap:8px;border-top:1px solid rgba(255,255,255,.1);animation:fadeIn .2s ease;padding:10px 8px}.wkt-actions{display:flex;gap:6px;justify-content:space-between}.compact-button{padding:6px 10px;border:none;border-radius:5px;background:#6d6f73;color:#fff;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);text-transform:uppercase;min-height:32px;display:flex;align-items:center;justify-content:center;flex:1;box-shadow:0 1px 2px #0000000d}.compact-button.primary.active{background:#f7b528;box-shadow:0 8px 25px #667eea4d;color:#fff}.compact-button.primary.active:hover{box-shadow:0 12px 35px #667eea66}.compact-button.secondary{background:color-mix(in srgb,#000 20%,transparent);color:#fff}.compact-button.secondary:hover{background:color-mix(in srgb,#5a6268 60%,transparent)}.compact-input{padding:8px 10px;border-radius:5px;font-size:13px;transition:all .2s ease;background:#6d6f73;border:none;color:#fff}.compact-input::placeholder{color:#ffffffb3}.compact-input:focus{outline:none;background:#6d6f73;border:1px solid #97989b}.print-config,.print-draw-config{display:flex;align-items:center;gap:8px;padding:5px;background:transparent;border:none;border-radius:8px;animation:slideDown .3s ease}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{background:#6d6f73;border:none;color:#fff;border-radius:6px;font-size:12px;height:32px;min-height:32px;padding:0 10px}.print-config select:focus,.print-config input:focus,.print-draw-config select:focus,.print-draw-config input:focus{outline:none}.print-config select,.print-draw-config select{cursor:pointer}.print-config option,.print-draw-config option{background:#6d6f73!important;border:none!important}.print-config input,.print-draw-config input{width:60px;text-align:center}.print-config button,.print-draw-config button{background:#6ccb78;color:#fff;border:none;padding:6px 12px;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s ease}.print-config button:hover,.print-draw-config button:hover{box-shadow:0 4px 12px #10b9814d}.print-config .icon-separator,.print-draw-config .icon-separator{color:#fff}.geometry-search-panel{position:absolute;right:0;z-index:1000;width:380px}.geometry-search-panel .delete-all-icon{color:#fff;margin-left:315px}.geometry-search-panel::-webkit-scrollbar{width:12px}.geometry-search-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}.geometry-search-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.geometry-search-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}.search-result-option{display:block!important;padding:0!important;margin:0!important;background:transparent!important}.search-result-option:last-child{border-bottom:none}.search-result-option .mdc-list-item__primary-text{width:100%!important;margin:0!important;padding:0!important}.result-title{display:block;top:0;z-index:1;font-weight:600;color:#bdc1c3cc}.search-result-item{display:flex;align-items:center;padding:4px 14px;cursor:pointer;transition:background-color .15s ease;border-radius:5px}.item-left{flex:1;width:100%}.item-header{color:#fff;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.search-empty-state{padding:32px 16px;text-align:center;color:#757575}.search-empty-state .empty-icon{font-size:40px;width:40px;height:40px;color:#bdbdbd;margin-bottom:12px}.search-empty-state .empty-title{font-size:14px;font-weight:500;margin-bottom:4px}.search-empty-state .empty-subtitle{font-size:12px;color:#9e9e9e}::ng-deep .metadata-panel{margin-top:5px;margin-bottom:5px}::ng-deep .metadata-panel .feature-item{padding:8px 12px;margin:4px 0;background:#ffffff0d;border-radius:5px;transition:all .2s ease}::ng-deep .metadata-panel .feature-item:hover{background:#ffffff1a;box-shadow:0 2px 8px #00000026}::ng-deep .metadata-panel .feature-item:first-child{margin-top:0}::ng-deep .metadata-panel .feature-item:last-child{margin-bottom:0}::ng-deep .metadata-panel .feature-title{color:#bdc1c3cc;font-size:13px;line-height:1.6;display:flex;align-items:center;gap:6px;letter-spacing:.2px}::ng-deep .metadata-panel .feature-title:first-child{margin-top:0}::ng-deep .metadata-panel .feature-title:last-child{margin-bottom:0}::ng-deep .metadata-panel .feature-title img{border-radius:4px;margin-top:4px;box-shadow:0 2px 6px #0003}::ng-deep .metadata-panel .feature-title a{color:#6ccb78;text-decoration:none;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}::ng-deep .metadata-panel .feature-title a:hover{color:#85d990;text-decoration:underline}::ng-deep .metadata-panel .feature-title a .link-icon{font-size:16px;width:16px;height:16px}::ng-deep .metadata-panel .secondary-item{color:#fff;font-weight:400}::ng-deep .geometry-search-panel{max-height:360px!important;overflow-y:auto!important;max-width:430px;background:#4c4d51!important;border:1px solid rgba(255,255,255,.07);border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0 8px 24px #00000026!important}::ng-deep .geometry-search-panel::-webkit-scrollbar{width:4px}::ng-deep .geometry-search-panel::-webkit-scrollbar-track{background:transparent}::ng-deep .geometry-search-panel::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:10px}::ng-deep .geometry-search-panel::-webkit-scrollbar-thumb:hover{background:#fff3}::ng-deep .geometry-search-panel .buffer-item{display:flex;align-items:center;gap:8px;padding:10px 14px 8px;background:#0003;border-bottom:1px solid rgba(255,255,255,.06)}::ng-deep .geometry-search-panel .buffer-item mat-label{color:#9ca3af;font-size:12px;font-weight:500;letter-spacing:.3px}::ng-deep .geometry-search-panel .buffer-item input{width:52px;margin:0;background:#3a3d42;border:1px solid rgba(255,255,255,.1);border-radius:5px;color:#fff;font-size:12px;padding:4px 8px;text-align:center;outline:none;transition:border-color .15s ease}::ng-deep .geometry-search-panel .buffer-item input:focus{border-color:#f7b528}::ng-deep .geometry-search-panel .result-title{display:flex;align-items:center;gap:8px;padding:8px 14px 4px;font-size:14px;font-weight:600;color:#bdc1c3cc;position:sticky;top:0;z-index:1}::ng-deep .geometry-search-panel .search-result-item{display:flex;flex-direction:column;gap:5px;padding:8px 14px;cursor:pointer;border-left:2px solid transparent;transition:background .12s ease,border-color .12s ease}::ng-deep .geometry-search-panel .search-result-item+.search-result-item{border-top:1px solid rgba(255,255,255,.04)}::ng-deep .geometry-search-panel .search-result-item:hover{background:#ffffff09}::ng-deep .geometry-search-panel .search-result-item:hover .item-header{color:#fff}::ng-deep .geometry-search-panel .search-result-item:last-child{border-radius:0 0 10px 10px}::ng-deep .geometry-search-panel .item-header{color:#d1d5db;font-size:14px;font-weight:500;line-height:1.4;display:block;word-wrap:break-word;overflow-wrap:break-word;transition:color .12s ease}::ng-deep .geometry-search-panel .item-right{display:flex;align-items:center;gap:3px;flex-wrap:wrap;width:100%}::ng-deep .geometry-search-panel .item-right .custom-image-icon{width:26px;height:26px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:#fff!important;border:1px solid rgba(255,255,255,0);border-radius:5px;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease!important}::ng-deep .geometry-search-panel .item-right .custom-image-icon:hover{background:#ffffff0d!important;box-shadow:0 0 0 1px #f7b5282e}::ng-deep .geometry-search-panel .mat-mdc-option{min-height:30px!important;border-radius:5px!important;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:auto;padding:4px 0!important}::ng-deep .geometry-search-panel .mat-mdc-option .mdc-list-item__primary-text{color:#fff}::ng-deep .geometry-search-panel mat-label{color:#fff}::ng-deep .mat-mdc-simple-snack-bar{background-color:#fff!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px}@media (max-width: 768px){.toolbox-wrapper{left:.5em;top:8em;max-width:calc(100vw - 2.5em)}.drag-handle-toolbox{padding:3px 6px;gap:6px}.drag-handle-toolbox mat-icon{font-size:16px;width:16px;height:16px}.toggle-icon{font-size:16px!important;width:16px!important;height:16px!important}.toolbox-container{min-width:28px;max-width:calc(100vw - 3em)}:host{padding:8px;min-width:32px}:host.expanded{min-width:280px;padding:10px}.all-tools-container{flex-wrap:wrap;gap:6px;max-height:50vh;overflow-y:auto;padding:0;-ms-overflow-style:none;scrollbar-width:none}.all-tools-container::-webkit-scrollbar{display:none}.main-tools,.geometry-tools,.measurement-print-tools,.print-tools{display:flex;flex-wrap:wrap;justify-content:center;gap:4px}.compact-icon{width:28px;height:28px;flex-shrink:0}.measurement-print-tools{padding:3px 0}.geometry-selector{width:30%;margin-bottom:8px}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:28px;min-height:28px;padding:0 8px;font-size:12px}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:12px}::ng-deep .mat-mdc-select-panel{max-width:calc(100vw - 2em)!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:13px!important;min-height:32px!important;padding:6px 12px!important}.print-config,.print-draw-config{flex-direction:column;align-items:stretch;gap:6px}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{font-size:11px;padding:4px 8px;height:28px;min-height:28px}.print-config input,.print-draw-config input{width:50px}.print-config button,.print-draw-config button{padding:4px 8px;font-size:11px;height:28px}.wkt-section .compact-input{font-size:12px;padding:6px 8px}.wkt-section .compact-button{font-size:11px;padding:5px 8px;min-height:28px}::ng-deep .mat-mdc-slide-toggle .mdc-label{font-size:11px!important}.geometry-search-panel{width:calc(100vw - 40px);max-width:400px;left:50%;max-height:70vh}.search-result-item{padding:8px 12px}.item-header{font-size:13px}.result-title{padding:10px 12px;font-size:13px}}.geometry-search-result-item{display:flex;padding:4px 14px;cursor:pointer;transition:background-color .15s ease;border-radius:5px}.geometry-search-result-item .item-header{width:260px}@media (max-width: 480px){.toolbox-wrapper{left:.25em;top:6em;transform-origin:left top;max-width:calc(100vw - .5em)}.drag-handle-toolbox{padding:2px 4px;gap:4px}.drag-handle-toolbox mat-icon{font-size:14px;width:14px;height:14px}.toggle-icon{font-size:14px!important;width:14px!important;height:14px!important}.toolbox-container{padding:2px;min-width:24px}.all-tools-container{flex-direction:row;align-items:center;max-height:60vh}.main-tools,.geometry-tools{gap:3px;flex-wrap:wrap;justify-content:center}.measurement-print-tools{gap:3px;flex-wrap:wrap;padding:2px 4px;width:100%;justify-content:center}.measurement-tools,.print-tools{gap:3px}.compact-icon{width:26px;height:26px}.tool-separator{display:none}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:26px;min-height:26px;padding:0 6px;font-size:11px}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:11px}.compact-button{font-size:10px;padding:4px 6px;min-height:26px}.compact-input{font-size:11px;padding:4px 6px}.print-config,.print-draw-config{gap:4px;padding:6px}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{font-size:10px;height:26px;min-height:26px;padding:2px 6px}.print-config input,.print-draw-config input{width:45px}.print-config button,.print-draw-config button{flex:1;min-width:60px;font-size:10px;padding:3px 6px;height:26px}.print-config .icon-separator,.print-draw-config .icon-separator{font-size:10px}.wkt-section{gap:6px;padding-top:8px}::ng-deep .mat-mdc-slide-toggle .mdc-label{font-size:10px!important}::ng-deep .mat-mdc-select-panel{max-width:calc(100vw - 1em)!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:12px!important;min-height:28px!important;padding:4px 10px!important}.geometry-search-panel{width:calc(100vw - 32px);max-height:60vh}.search-result-item{padding:6px 10px}.item-header{font-size:12px;-webkit-line-clamp:1}}\n"] }]
4428
+ args: [{ selector: 'map-toolbox', imports: [FormsModule, CommonModule, MatIconModule, MatOptionModule, MatSelectModule, DragDropModule, MatTooltipModule, SelectedFeatureInfoComponent], template: "<div class=\"toolbox-wrapper global-wrapper-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-toolbox\" cdkDragHandle>\n <mat-icon \n class=\"icon-left\" \n matTooltip=\"V\u00E6rkt\u00F8jskasse\" \n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n handyman\n </mat-icon> \n <div class=\"right-icons\"> \n <mat-icon class=\"toggle-icon\" (click)=\"toggleCollapsed($event)\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n \n <div class=\"toolbox-container\">\n @if(!collapsed) {\n <div class=\"toolbox-content\">\n <div class=\"all-tools-container\">\n <div class=\"main-tools\">\n @if(!settings?.undoDisabled) {\n <img \n [src]=\"undoIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"undo()\" \n matTooltip=\"Fortryd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Undo\">\n\n <img \n [src]=\"redoIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"redo()\" \n matTooltip=\"Gendan\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Redo\">\n }\n @if (settings.externalHelpUrl) {\n <img \n [src]=\"infoBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"openUrl(settings.externalHelpUrl, $event)\"\n matTooltip=\"Vejledning til anvendelse af systemet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Vejledning til anvendelse af systemet\">\n } \n <img \n [src]=\"showInfoObjBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleShowInfo()\" \n [class.active]=\"activeMode === 'show-info'\"\n matTooltip=\"V\u00E6lg og vis objektdata i tr\u00E6struktur\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg og vis objektdata i tr\u00E6 struktur\">\n <img \n [src]=\"downloadFileBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDownloadAddresses()\" \n [class.active]=\"activeMode === 'download-addresses'\"\n matTooltip=\"Download adresser\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Download adresser\">\n <img \n [src]=\"downloadMatriklerBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDownloadCasdatres()\" \n [class.active]=\"activeMode === 'download-cadastres'\"\n matTooltip=\"Download matrikler\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Download matrikler\">\n\n <img \n [src]=\"splitIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"togglePointPolygonSearch()\"\n [class.active]=\"activeMode === 'search-point' || activeMode === 'search-polygon'\"\n matTooltip=\"V\u00E6lg Lokaliteter ved udpegning i kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg Lokaliteter ved udpegning i kortet\">\n @if (showDocumentSearch) {\n\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDocumentPointSearch()\"\n [class.active]=\"activeMode === 'document-search-by-point'\"\n matTooltip=\"Dokument fra punkt\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Dokument fra punkt\">\n\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startDocumentPolygonSearch()\"\n [class.active]=\"activeMode === 'document-search-by-polygon'\"\n matTooltip=\"Dokumenter fra polygon\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Dokumenter fra polygon\">\n }\n @if (settings.cowiUrlTemplate) {\n <img \n [src]=\"openCowiPageBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'cowi'\"\n (click)=\"toggleCowiPage()\" \n matTooltip=\"COWI\u00B4s Gadefoto\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"COWI\u00B4s Gadefoto\">\n }\n @if (settings.skraaFotoUrlTemplate) {\n <img \n [src]=\"skrafotoBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'skrafoto'\"\n (click)=\"toggleSkraafotoPage()\" \n matTooltip=\"Opslag p\u00E5 Skr\u00E5fotos\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Skr\u00E5foto\">\n }\n @if (settings.googleStreetUrlTemplate) {\n <img \n [src]=\"streetViewBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'streetview'\"\n (click)=\"toggleGoogleStreetviewPage()\" \n matTooltip=\"Google Streetview\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Google Streetview\">\n }\n <img \n [src]=\"fremhaevBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'select-highlight'\"\n (click)=\"startSelectFeatureHighlight()\" \n matTooltip=\"Fremh\u00E6v aktivt objekt i listen\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Fremh\u00E6v\">\n @if (activeMode === 'draw' || activeMode === 'edit' || activeMode === 'edit-remove' || activeMode === 'search-feature' ||\n activeMode === 'clip-hole' || activeMode === 'split' || activeMode === 'merge-features') {\n <label class=\"snap-toggle\">\n <input type=\"checkbox\" [checked]=\"snap\" (change)=\"onSnapChange($event)\">\n Snap\n </label> \n } \n @if(settings.editEnabled) {\n <img \n [src]=\"editBase64\" \n [class.active]=\"activeMode === 'edit'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startEdit()\" \n matTooltip=\"Inds\u00E6t eller flyt punkter i flade/linje\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Inds\u00E6t eller flyt punkter i flade/linje\">\n <img \n [src]=\"deleteIconBase64\" \n [class.active]=\"activeMode === 'edit-remove'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"startEditRemovePoints()\" \n matTooltip=\"Slet punkter i flade/linje\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Slet punkter i flade/linje\">\n }\n @if(settings.cutHoleEnabled) {\n <img \n [src]=\"clipHoleBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'clip-hole'\" \n (click)=\"clipHole()\" \n matTooltip=\"Klip hul i flade\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Klip hul i flade\">\n }\n @if(settings.splitEnabled) {\n <img \n [src]=\"splitBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'split'\"\n (click)=\"split()\" \n matTooltip=\"Del et element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Del et element\">\n }\n @if(settings.changeTypeEnabled) {\n <img \n [src]=\"changeTypeBase64\" \n class=\"compact-icon custom-image-icon\" \n [class.active]=\"activeMode === 'change-type'\" \n (click)=\"startChangeType()\"\n [matTooltipShowDelay]=\"200\"\n matTooltipClass=\"custom-tooltip\"\n [matTooltipHideDelay]=\"300\" \n matTooltip=\"Skift status p\u00E5 element\" \n alt=\"Skift status p\u00E5 element\" \n matTooltipPosition=\"below\">\n }\n @if(settings.mergeEnabled) {\n <img \n [src]=\"mergeBase64\"\n class=\"compact-icon custom-image-icon\" \n (click)=\"startMergeFeatures()\" \n matTooltipPosition=\"below\"\n [matTooltipShowDelay]=\"200\"\n matTooltipClass=\"custom-tooltip\"\n [matTooltipHideDelay]=\"300\" \n matTooltip=\"Saml flader\" \n [class.active]=\"activeMode === 'merge-features'\">\n }\n @if(settings.centerPoint) {\n <img \n [src]=\"setCenterBase64\" \n [class.active]=\"activeMode === 'center-point'\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"setCenterPoint()\" \n matTooltip=\"S\u00E6t centerpunkt\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"S\u00E6t centerpunkt\">\n }\n </div>\n <div class=\"geometry-tools\">\n <img \n [src]=\"sogPolygonBase64\" \n [class.active]=\"activeMode === 'search-feature'\"\n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleFeatureSearch()\" \n matTooltip=\"V\u00E6lg og vis emner i listen\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"V\u00E6lg og vis emner i listen\">\n\n <img \n [src]=\"drawBase64\" \n [class.active]=\"activeMode === 'draw'\"\n class=\"compact-icon custom-image-icon\"\n (click)=\"startDraw()\"\n matTooltip=\"Tegn element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Tegn element\">\n @if(settings.WKTInputEnabled) {\n <img \n [src]=\"wktIconBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'wkt-input'\"\n (click)=\"activateShowInputWKT()\" \n matTooltip=\"Inds\u00E6t WKT streng for at importere elementet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Inds\u00E6t WKT streng for at importere elementet\">\n }\n </div>\n <div class=\"tool-separator\" *ngIf=\"deleteEnabled || showMeasureDistance || showMeasureArea || profile.showPrint\"></div>\n <div class=\"measurement-print-tools\">\n <div class=\"measurement-tools\">\n @if (deleteEnabled) {\n <img \n [src]=\"deleteIconBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"activeMode === 'delete'\"\n (click)=\"startDelete()\" \n matTooltip=\"Slet element\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Slet element\">\n }\n <img \n [src]=\"measureDistanceIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleMeasure()\"\n [class.active]=\"activeMode === 'measure-distance' || activeMode === 'measure-area'\"\n matTooltip=\"M\u00E5l afstand / areal\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"M\u00E5l\">\n </div>\n @if(profile.showPrint) {\n <div class=\"tool-separator print-separator\"></div>\n <div class=\"print-tools\">\n <img \n [src]=\"printBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"active === 'Print'\"\n (click)=\"startPrintMode()\" \n matTooltip=\"Sk\u00E6rmprint af kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Sk\u00E6rmprint af kortet\">\n <img \n [src]=\"drawPrintBase64\" \n class=\"compact-icon custom-image-icon\"\n [class.active]=\"active === 'PrintDraw'\"\n (click)=\"startDrawMode()\" \n matTooltip=\"Tegnev\u00E6rkt\u00F8j til print\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Tegnev\u00E6rkt\u00F8j til print\">\n </div>\n }\n </div>\n </div>\n @if (activeMode === 'draw' || activeMode === 'search-feature' || activeMode === 'wkt-input'\n || activeMode === 'change-type' || activeMode === 'merge-features') {\n <mat-select class=\"geometry-selector\" (selectionChange)=\"drawItemChanged($event)\" [(ngModel)]=\"selectedDrawItem\"> \n @for (drawItem of drawItems; track drawItem) {\n @if(activeMode !== 'merge-features' || drawItem.geomType === 'Polygon') {\n <mat-option [value]=\"drawItem\">{{drawItem.name}} <img *ngIf=\"drawItem.iconUrl\" class=\"compact-icon custom-image-icon\" [src]=\"drawItem.iconUrl\"></mat-option>\n }\n }\n </mat-select> \n }\n @if(showInputWKT && activeMode === 'wkt-input') {\n <div class=\"wkt-section\">\n <input matInput class=\"compact-input\" placeholder=\"Inds\u00E6t WKT-streng\" [(ngModel)]=\"WKTString\">\n <div class=\"wkt-actions\">\n <button class=\"compact-button primary\" (click)=\"ReadWKT()\">Indl\u00E6s WKT</button>\n <button class=\"compact-button\" (click)=\"cancelWKT()\">Annuller</button>\n </div>\n </div>\n }\n @if(profile.showPrint) {\n @if(active === \"Print\") {\n <div class=\"print-config\">\n <img \n matTooltip=\"Sk\u00E6rmprint af kortet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n [src]=\"printBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"doPrint()\" \n alt=\"Udskriv\"> \n <span class=\"icon-separator\">i</span>\n <select id=\"formatSelector\" [(ngModel)]=\"format\">\n <option value=\"image/png\" selected>.PNG</option>\n <option value=\"image/jpeg\">.JPG</option>\n </select>\n <select id=\"dimensionSelector\" [(ngModel)]=\"dimId\" (change)=\"handleDimensionSelected()\">\n <option value=\"99\" selected></option>\n <option value=\"0\">1920 X 1080</option>\n <option value=\"1\">1680 X 1050</option>\n <option value=\"2\">1280 X 800</option>\n <option value=\"3\">800 X 600</option>\n </select>\n <input type=\"text\" [(ngModel)]=\"mapWidth\"/> \n <span class=\"icon-separator\">x</span>\n <input type=\"text\" [(ngModel)]=\"mapHeight\"/>\n <button (click)=\"setNewMapDimensions()\">V\u00E6lg</button>\n </div>\n }\n @if(active === \"PrintDraw\") {\n <div class=\"print-draw-config\">\n <span class=\"icon-separator\">Label</span>\n <input type=\"text\" [(ngModel)]=\"printDrawLabel\"/>\n <select id=\"drawToolSelector\" [(ngModel)]=\"printDrawTool\" (change)=\"handlePrintDrawToolChanged()\">\n <option value=\"Arrow\" selected>Pil</option>\n <option value=\"Point\">Punkt</option>\n <option value=\"LineString\">Linje</option>\n <option value=\"Polygon\">Polygon</option>\n <option value=\"Circle\">Cirkel</option>\n <option value=\"Square\">Kvadrat</option>\n <option value=\"Rectangle\">Firkant</option>\n </select>\n <button class=\"compact-button\" (click)=\"handleClearPrintDrawFeatures()\">Ryd</button>\n </div>\n }\n }\n </div>\n @if (activeMode === 'search-point' || activeMode === 'search-polygon') {\n <mat-select \n class=\"search-point-polygon-selector\" \n [(ngModel)]=\"selectedSearchMode\"\n (selectionChange)=\"onSearchModeChanged($event)\">\n <mat-option value=\"search-point\">S\u00F8g med punkt</mat-option>\n <mat-option value=\"search-polygon\">S\u00F8g med polygon</mat-option>\n </mat-select>\n }\n \n @if (activeMode === 'measure-distance' || activeMode === 'measure-area') {\n <mat-select \n class=\"geometry-selector\"\n [(ngModel)]=\"selectedMeasureMode\"\n (selectionChange)=\"onMeasureModeChanged($event)\">\n <mat-option value=\"measure-distance\">M\u00E5l afstand</mat-option>\n <mat-option value=\"measure-area\">M\u00E5l areal</mat-option>\n </mat-select>\n }\n }\n </div>\n @if (activeMode === 'search-feature' && filteredResults.length > 0) {\n <div class=\"geometry-search-panel\">\n <div class=\"buffer-item\">\n <mat-label>Buffer</mat-label>\n <input matInput type=\"number\" name=\"buffer\" [(ngModel)]=\"bufferInMeters\">\n <mat-label>m</mat-label>\n </div>\n <mat-option *ngFor=\"let result of filteredResults\" [value]=\"result\" class=\"search-result-option\">\n <span class=\"result-title\">\n {{ result.title }} ({{result.items.length}} af {{ result.total }})\n </span>\n <div (click)=\"highlight(item.wkt, $event)\" *ngFor=\"let item of result.items\" class=\"search-result-item\">\n <div class=\"item-left\">\n <span class=\"item-header\"> {{item.header}} </span> \n </div>\n <div class=\"item-right\">\n <img \n [src]=\"objectSearchCopyIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"addToActiveObjectsList(item, $event)\" \n matTooltip=\"Kopier\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Kopier\">\n <img \n [src]=\"objectSearchCutIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"cutBySearchedObject(item, $event)\" \n matTooltip=\"Fjern\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Fjern\">\n <img \n [src]=\"objectSearchCutIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"splitBySearchedObject(item, $event)\" \n matTooltip=\"Opsk\u00E6r\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Opsk\u00E6r\">\n <img \n [src]=\"objectSearchCopyWithBufferIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"addToActiveObjectsList(item, $event, true)\" \n matTooltip=\"Kopier med buffer\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Kopier med buffer\">\n <img \n [src]=\"objectSearchZoomIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"zoomSearchedObject(item, $event)\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Zoom\">\n <img \n [src]=\"infoBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleItemInfo(item, $event)\" \n matTooltip=\"Info\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Info\">\n </div> \n @if (item.showMetadata) {\n <div class=\"metadata-panel\">\n @for(feature of item.metadata; track feature) {\n <div class=\"feature-item\">\n <div *ngFor=\"let kv of (feature | keyvalue)\" class=\"feature-title\">\n {{ kv.value.name }}:\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 class=\"secondary-item\">{{ kv.value.data }}</span>\n </ng-container>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </mat-option>\n </div>\n }\n @if (activeMode === \"show-info\") {\n <selected-feature-info class=\"info-search-panel\"></selected-feature-info>\n }\n @if ((activeMode === \"search-point\" || activeMode === \"search-polygon\") && geometrySearchResult.length > 0) {\n <div class=\"geometry-search-panel\">\n <mat-icon (click)=\"deleteAllGeometrySearchItem()\" class=\"delete-all-icon\" matTooltip=\"Ryd\">delete</mat-icon>\n <mat-option *ngFor=\"let result of geometrySearchResult\" [value]=\"result\" class=\"search-result-option\">\n <span class=\"result-title\">\n {{ result.title }} ({{result.items.length}} af {{ result.total }})\n </span>\n <div (click)=\"highlight(item.wkt, $event)\" *ngFor=\"let item of result.items\" class=\"geometry-search-result-item\">\n <div class=\"item-left\">\n <span class=\"item-header\"> {{item.header}} </span> \n </div>\n <div class=\"item-right\">\n @if (item.url) {\n <mat-icon \n class=\"search-item-external\"\n matTooltip=\"\u00C5bn i ny tab\"\n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n (click)=\"openUrl(item.url, $event)\"\n matTooltipPosition=\"above\"\n >info</mat-icon>\n }\n <mat-icon (click)=\"deleteGeometrySearchItem(result, item.id, $event)\" >delete</mat-icon>\n </div>\n </div>\n </mat-option>\n </div>\n }\n</div>\n", styles: [".toolbox-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:10;max-width:95vw;box-shadow:0 2px 10px #0000001a;border-radius:5px;transition:width .3s ease,max-width .3s ease}.toolbox-wrapper.cdk-drag-dragging{opacity:.8;z-index:1001}.search-item-external{cursor:pointer}.drag-handle-toolbox mat-icon{font-size:18px}.drag-handle-toolbox mat-icon:first-child{display:flex;align-items:center;justify-content:center}.drag-handle-toolbox .icon-left{cursor:default!important}.right-icons{display:flex;align-items:center;gap:6px}.toggle-icon{cursor:pointer!important;transition:all .2s ease;-webkit-user-select:none;user-select:none;font-size:18px!important;display:flex;align-items:center;justify-content:center;flex-shrink:0}.toggle-icon:hover{color:#d3d3d3}:host{position:relative;display:flex;justify-content:center}:host.expanded{width:auto;min-width:320px;padding:12px}.toolbox-container{display:flex;flex-direction:column;align-items:center;width:100%;min-width:32px;transition:all .3s ease;cursor:default;border-radius:0 0 5px 5px}.toolbox-content{display:flex;flex-direction:column;width:100%;gap:3px;animation:slideDown .3s cubic-bezier(.4,0,.2,1)}.all-tools-container{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap;width:100%;justify-content:flex-start;overflow-x:hidden;padding:2px 8px}.all-tools-container::-webkit-scrollbar{height:4px}.all-tools-container::-webkit-scrollbar-thumb{background:#ccc;border-radius:2px}.main-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.main-tools .snap-toggle{display:flex;align-items:center;gap:5px;color:#fff;font-size:12px;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none}.main-tools .snap-toggle input[type=checkbox]{appearance:none;width:18px;height:18px;border:1.5px solid rgba(255,255,255,.6);border-radius:3px;background:transparent;cursor:pointer;position:relative;flex-shrink:0}.main-tools .snap-toggle input[type=checkbox]:checked{background:#f7b528;border-color:#f7b528}.main-tools .snap-toggle input[type=checkbox]:checked:after{content:\"\";position:absolute;left:4px;top:0;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;transform:rotate(45deg)}.geometry-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.measurement-print-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap;background:none;border-radius:8px;padding:3px 0}.measurement-tools,.print-tools{display:flex;flex-direction:row;align-items:center;flex-wrap:nowrap}.measurement-tools .compact-icon,.print-tools .compact-icon{transition:all .3s cubic-bezier(.4,0,.2,1)}.print-tools .compact-icon{background:none;color:#fff}.print-tools .compact-icon.active{background:#f7b528!important;border-color:transparent}.print-tools .compact-icon.active:hover{background:#ffffff1a}.print-tools .compact-icon:hover:not(.active){box-shadow:0 4px 12px #0000004d;opacity:.9}.tool-separator{width:1px;height:24px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent)}.tool-separator.print-separator{height:28px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.5),transparent)}.compact-icon{cursor:pointer;color:#fff;transition:all .3s cubic-bezier(.4,0,.2,1);width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:6px;flex-shrink:0}.compact-icon.active{color:#fff;background:#f7b528!important;border-color:transparent;box-shadow:0 8px 25px #667eea4d}.compact-icon.active:hover{box-shadow:0 12px 35px #667eea66}.compact-icon:hover:not(.active){color:#fff;box-shadow:0 4px 12px #0003}.compact-icon.custom-image-icon{padding:2px;background:none;border:none}.compact-icon.custom-image-icon img{width:100%;height:100%;object-fit:contain;transition:filter .2s ease,transform .2s ease}.compact-icon.custom-image-icon.active{background:#ffffff1a;border-color:none;box-shadow:none}.compact-icon.custom-image-icon.active img{filter:brightness(0) invert(1)}.compact-icon.custom-image-icon.active:hover{box-shadow:0 12px 35px #667eea66}.compact-icon.custom-image-icon:hover:not(.active){box-shadow:0 4px 12px #0003}.compact-icon.custom-image-icon:hover:not(.active) img{filter:brightness(0) invert(.8)}.search-point-polygon-selector{width:24%;margin-right:auto;padding:6px}.search-point-polygon-selector ::ng-deep .mat-mdc-select{font-size:14px;line-height:1.4;border-radius:5px}.search-point-polygon-selector ::ng-deep .mat-mdc-select-trigger{height:32px;min-height:32px;padding:0 10px;border:none;border-radius:6px;background:#6d6f73;transition:all .2s ease}.search-point-polygon-selector ::ng-deep .mat-mdc-select-trigger:hover{background:#6d6f73}.search-point-polygon-selector ::ng-deep .mat-mdc-select-value{font-size:14px;font-weight:500;color:#fff}.search-point-polygon-selector ::ng-deep .mat-mdc-select-arrow-wrapper{height:16px}.search-point-polygon-selector ::ng-deep .mat-mdc-form-field-infix{min-height:32px;padding:6px 0}.search-point-polygon-selector ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.geometry-selector{width:34%;margin-left:15em;padding:6px}.geometry-selector ::ng-deep .mat-mdc-select{font-size:14px;line-height:1.4;border-radius:5px}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:32px;min-height:32px;padding:0 10px;border:none;border-radius:6px;background:#6d6f73;transition:all .2s ease}.geometry-selector ::ng-deep .mat-mdc-select-trigger:hover{background:#6d6f73}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:14px;font-weight:500;color:#fff}.geometry-selector ::ng-deep .mat-mdc-select-arrow-wrapper{height:16px}.geometry-selector ::ng-deep .mat-mdc-form-field-infix{min-height:32px;padding:6px 0}.geometry-selector ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-select-panel{min-width:fit-content!important;max-width:320px!important;background:#4c4d51!important;border:none!important;border-radius:8px!important;box-shadow:0 8px 24px #0000001f,0 2px 6px #00000014!important;margin-top:6px!important;padding:4px 0!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:14px!important;min-height:30px!important;padding:0 14px!important;transition:all .15s ease!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option:hover:not(.mat-mdc-option-disabled){background:#444849!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option.mat-active{background:color-mix(in srgb,#000 60%,transparent)!important;color:#fff!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option .mdc-list-item__primary-text{font-weight:500!important;color:#fff!important}::ng-deep .cdk-overlay-pane{z-index:1001}::ng-deep .cdk-overlay-backdrop{z-index:1000}.wkt-section{display:flex;flex-direction:column;gap:8px;border-top:1px solid rgba(255,255,255,.1);animation:fadeIn .2s ease;padding:10px 8px}.wkt-actions{display:flex;gap:6px;justify-content:space-between}.compact-button{padding:6px 10px;border:none;border-radius:5px;background:#6d6f73;color:#fff;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);text-transform:uppercase;min-height:32px;display:flex;align-items:center;justify-content:center;flex:1;box-shadow:0 1px 2px #0000000d}.compact-button.primary.active{background:#f7b528;box-shadow:0 8px 25px #667eea4d;color:#fff}.compact-button.primary.active:hover{box-shadow:0 12px 35px #667eea66}.compact-button.secondary{background:color-mix(in srgb,#000 20%,transparent);color:#fff}.compact-button.secondary:hover{background:color-mix(in srgb,#5a6268 60%,transparent)}.compact-input{padding:8px 10px;border-radius:5px;font-size:13px;transition:all .2s ease;background:#6d6f73;border:none;color:#fff}.compact-input::placeholder{color:#ffffffb3}.compact-input:focus{outline:none;background:#6d6f73;border:1px solid #97989b}.print-config,.print-draw-config{display:flex;align-items:center;gap:8px;padding:5px;background:transparent;border:none;border-radius:8px;animation:slideDown .3s ease}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{background:#6d6f73;border:none;color:#fff;border-radius:6px;font-size:12px;height:32px;min-height:32px;padding:0 10px}.print-config select:focus,.print-config input:focus,.print-draw-config select:focus,.print-draw-config input:focus{outline:none}.print-config select,.print-draw-config select{cursor:pointer}.print-config option,.print-draw-config option{background:#6d6f73!important;border:none!important}.print-config input,.print-draw-config input{width:60px;text-align:center}.print-config button,.print-draw-config button{background:#6ccb78;color:#fff;border:none;padding:6px 12px;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s ease}.print-config button:hover,.print-draw-config button:hover{box-shadow:0 4px 12px #10b9814d}.print-config .icon-separator,.print-draw-config .icon-separator{color:#fff}.info-search-panel{position:absolute;right:0;z-index:1000;width:380px;max-height:360px!important;max-width:430px;background:#4c4d51!important;border:1px solid rgba(255,255,255,.07);border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0 8px 24px #00000026!important}.geometry-search-panel{position:absolute;right:0;z-index:1000;width:380px}.geometry-search-panel .delete-all-icon{color:#fff;margin-left:315px}.geometry-search-panel::-webkit-scrollbar{width:12px}.geometry-search-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}.geometry-search-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.geometry-search-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}.search-result-option{display:block!important;padding:0!important;margin:0!important;background:transparent!important}.search-result-option:last-child{border-bottom:none}.search-result-option .mdc-list-item__primary-text{width:100%!important;margin:0!important;padding:0!important}.result-title{display:block;top:0;z-index:1;font-weight:600;color:#bdc1c3cc}.search-result-item{display:flex;align-items:center;padding:4px 14px;cursor:pointer;transition:background-color .15s ease;border-radius:5px}.item-left{flex:1;width:100%}.item-header{color:#fff;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.search-empty-state{padding:32px 16px;text-align:center;color:#757575}.search-empty-state .empty-icon{font-size:40px;width:40px;height:40px;color:#bdbdbd;margin-bottom:12px}.search-empty-state .empty-title{font-size:14px;font-weight:500;margin-bottom:4px}.search-empty-state .empty-subtitle{font-size:12px;color:#9e9e9e}::ng-deep .metadata-panel{margin-top:5px;margin-bottom:5px}::ng-deep .metadata-panel .feature-item{padding:8px 12px;margin:4px 0;background:#ffffff0d;border-radius:5px;transition:all .2s ease}::ng-deep .metadata-panel .feature-item:hover{background:#ffffff1a;box-shadow:0 2px 8px #00000026}::ng-deep .metadata-panel .feature-item:first-child{margin-top:0}::ng-deep .metadata-panel .feature-item:last-child{margin-bottom:0}::ng-deep .metadata-panel .feature-title{color:#bdc1c3cc;font-size:13px;line-height:1.6;display:flex;align-items:center;gap:6px;letter-spacing:.2px}::ng-deep .metadata-panel .feature-title:first-child{margin-top:0}::ng-deep .metadata-panel .feature-title:last-child{margin-bottom:0}::ng-deep .metadata-panel .feature-title img{border-radius:4px;margin-top:4px;box-shadow:0 2px 6px #0003}::ng-deep .metadata-panel .feature-title a{color:#6ccb78;text-decoration:none;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}::ng-deep .metadata-panel .feature-title a:hover{color:#85d990;text-decoration:underline}::ng-deep .metadata-panel .feature-title a .link-icon{font-size:16px;width:16px;height:16px}::ng-deep .metadata-panel .secondary-item{color:#fff;font-weight:400}::ng-deep .geometry-search-panel{max-height:360px!important;overflow-y:auto!important;max-width:430px;background:#4c4d51!important;border:1px solid rgba(255,255,255,.07);border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0 8px 24px #00000026!important}::ng-deep .geometry-search-panel::-webkit-scrollbar{width:4px}::ng-deep .geometry-search-panel::-webkit-scrollbar-track{background:transparent}::ng-deep .geometry-search-panel::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:10px}::ng-deep .geometry-search-panel::-webkit-scrollbar-thumb:hover{background:#fff3}::ng-deep .geometry-search-panel .buffer-item{display:flex;align-items:center;gap:8px;padding:10px 14px 8px;background:#0003;border-bottom:1px solid rgba(255,255,255,.06)}::ng-deep .geometry-search-panel .buffer-item mat-label{color:#9ca3af;font-size:12px;font-weight:500;letter-spacing:.3px}::ng-deep .geometry-search-panel .buffer-item input{width:52px;margin:0;background:#3a3d42;border:1px solid rgba(255,255,255,.1);border-radius:5px;color:#fff;font-size:12px;padding:4px 8px;text-align:center;outline:none;transition:border-color .15s ease}::ng-deep .geometry-search-panel .buffer-item input:focus{border-color:#f7b528}::ng-deep .geometry-search-panel .result-title{display:flex;align-items:center;gap:8px;padding:8px 14px 4px;font-size:14px;font-weight:600;color:#bdc1c3cc;position:sticky;top:0;z-index:1}::ng-deep .geometry-search-panel .search-result-item{display:flex;flex-direction:column;gap:5px;padding:8px 14px;cursor:pointer;border-left:2px solid transparent;transition:background .12s ease,border-color .12s ease}::ng-deep .geometry-search-panel .search-result-item+.search-result-item{border-top:1px solid rgba(255,255,255,.04)}::ng-deep .geometry-search-panel .search-result-item:hover{background:#ffffff09}::ng-deep .geometry-search-panel .search-result-item:hover .item-header{color:#fff}::ng-deep .geometry-search-panel .search-result-item:last-child{border-radius:0 0 10px 10px}::ng-deep .geometry-search-panel .item-header{color:#d1d5db;font-size:14px;font-weight:500;line-height:1.4;display:block;word-wrap:break-word;overflow-wrap:break-word;transition:color .12s ease}::ng-deep .geometry-search-panel .item-right{display:flex;align-items:center;gap:3px;flex-wrap:wrap;width:100%}::ng-deep .geometry-search-panel .item-right .custom-image-icon{width:26px;height:26px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:#fff!important;border:1px solid rgba(255,255,255,0);border-radius:5px;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease!important}::ng-deep .geometry-search-panel .item-right .custom-image-icon:hover{background:#ffffff0d!important;box-shadow:0 0 0 1px #f7b5282e}::ng-deep .geometry-search-panel .mat-mdc-option{min-height:30px!important;border-radius:5px!important;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:auto;padding:4px 0!important}::ng-deep .geometry-search-panel .mat-mdc-option .mdc-list-item__primary-text{color:#fff}::ng-deep .geometry-search-panel mat-label{color:#fff}::ng-deep .mat-mdc-simple-snack-bar{background-color:#fff!important}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px}@media (max-width: 768px){.toolbox-wrapper{left:.5em;top:8em;max-width:calc(100vw - 2.5em)}.drag-handle-toolbox{padding:3px 6px;gap:6px}.drag-handle-toolbox mat-icon{font-size:16px;width:16px;height:16px}.toggle-icon{font-size:16px!important;width:16px!important;height:16px!important}.toolbox-container{min-width:28px;max-width:calc(100vw - 3em)}:host{padding:8px;min-width:32px}:host.expanded{min-width:280px;padding:10px}.all-tools-container{flex-wrap:wrap;gap:6px;max-height:50vh;overflow-y:auto;padding:0;-ms-overflow-style:none;scrollbar-width:none}.all-tools-container::-webkit-scrollbar{display:none}.main-tools,.geometry-tools,.measurement-print-tools,.print-tools{display:flex;flex-wrap:wrap;justify-content:center;gap:4px}.compact-icon{width:28px;height:28px;flex-shrink:0}.measurement-print-tools{padding:3px 0}.geometry-selector{width:30%;margin-bottom:8px}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:28px;min-height:28px;padding:0 8px;font-size:12px}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:12px}::ng-deep .mat-mdc-select-panel{max-width:calc(100vw - 2em)!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:13px!important;min-height:32px!important;padding:6px 12px!important}.print-config,.print-draw-config{flex-direction:column;align-items:stretch;gap:6px}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{font-size:11px;padding:4px 8px;height:28px;min-height:28px}.print-config input,.print-draw-config input{width:50px}.print-config button,.print-draw-config button{padding:4px 8px;font-size:11px;height:28px}.wkt-section .compact-input{font-size:12px;padding:6px 8px}.wkt-section .compact-button{font-size:11px;padding:5px 8px;min-height:28px}::ng-deep .mat-mdc-slide-toggle .mdc-label{font-size:11px!important}.geometry-search-panel{width:calc(100vw - 40px);max-width:400px;left:50%;max-height:70vh}.search-result-item{padding:8px 12px}.item-header{font-size:13px}.result-title{padding:10px 12px;font-size:13px}}.geometry-search-result-item{display:flex;padding:4px 14px;cursor:pointer;transition:background-color .15s ease;border-radius:5px}.geometry-search-result-item .item-header{width:260px}@media (max-width: 480px){.toolbox-wrapper{left:.25em;top:6em;transform-origin:left top;max-width:calc(100vw - .5em)}.drag-handle-toolbox{padding:2px 4px;gap:4px}.drag-handle-toolbox mat-icon{font-size:14px;width:14px;height:14px}.toggle-icon{font-size:14px!important;width:14px!important;height:14px!important}.toolbox-container{padding:2px;min-width:24px}.all-tools-container{flex-direction:row;align-items:center;max-height:60vh}.main-tools,.geometry-tools{gap:3px;flex-wrap:wrap;justify-content:center}.measurement-print-tools{gap:3px;flex-wrap:wrap;padding:2px 4px;width:100%;justify-content:center}.measurement-tools,.print-tools{gap:3px}.compact-icon{width:26px;height:26px}.tool-separator{display:none}.geometry-selector ::ng-deep .mat-mdc-select-trigger{height:26px;min-height:26px;padding:0 6px;font-size:11px}.geometry-selector ::ng-deep .mat-mdc-select-value{font-size:11px}.compact-button{font-size:10px;padding:4px 6px;min-height:26px}.compact-input{font-size:11px;padding:4px 6px}.print-config,.print-draw-config{gap:4px;padding:6px}.print-config select,.print-config input,.print-draw-config select,.print-draw-config input{font-size:10px;height:26px;min-height:26px;padding:2px 6px}.print-config input,.print-draw-config input{width:45px}.print-config button,.print-draw-config button{flex:1;min-width:60px;font-size:10px;padding:3px 6px;height:26px}.print-config .icon-separator,.print-draw-config .icon-separator{font-size:10px}.wkt-section{gap:6px;padding-top:8px}::ng-deep .mat-mdc-slide-toggle .mdc-label{font-size:10px!important}::ng-deep .mat-mdc-select-panel{max-width:calc(100vw - 1em)!important}::ng-deep .mat-mdc-select-panel .mat-mdc-option{font-size:12px!important;min-height:28px!important;padding:4px 10px!important}.geometry-search-panel{width:calc(100vw - 32px);max-height:60vh}.search-result-item{padding:6px 10px}.item-header{font-size:12px;-webkit-line-clamp:1}}\n"] }]
4327
4429
  }], ctorParameters: () => [], propDecorators: { map: [{
4328
4430
  type: Input,
4329
4431
  args: [{ required: true }]
@@ -5013,12 +5115,12 @@ class LegendsListComponent {
5013
5115
  })));
5014
5116
  }
5015
5117
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LegendsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5016
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: LegendsListComponent, isStandalone: true, selector: "lib-legends-list", inputs: { map: "map", profile: "profile" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"legends-list-body-wrapper global-wrapper-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\" \n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n\n <div class=\"drag-handle-legends\" cdkDragHandle>\n <mat-icon \n class=\"legend-icon\" \n matTooltip=\"Signaturforklaring\" \n (click)=\"toggleLegendsList()\"\n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n area_chart\n </mat-icon>\n <div class=\"right-icons\">\n <mat-icon class=\"toggle-icon\" (click)=\"toggleLegendsList()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n</div>\n\n<div class=\"legends-list-container\">\n @if(!collapsed) {\n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"item-list\">\n @for (layer of filteredLayersDetailed; track layer.id; let i = $index) {\n @if (layer.imageUrl) {\n <mat-expansion-panel [expanded]=\"i === 0\"> \n <mat-expansion-panel-header>\n <span class=\"panel-title\">\n {{ layer.name }}\n </span>\n </mat-expansion-panel-header>\n <div class=\"legend\">\n <img [src]=\"layer.imageUrl\" class=\"legend-thumbnail\"/>\n </div>\n </mat-expansion-panel>\n }\n }\n </div>\n </div>\n}\n</div>\n</div>", styles: [".legends-list-body-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:1000;box-shadow:0 2px 10px #0000001a;transition:width .3s ease,max-width .3s ease;border-radius:5px}.legends-list-body-wrapper.collapsed .drag-handle-legends{box-sizing:border-box}.legends-list-body-wrapper.collapsed .drag-handle-legends .legend-icon{margin-right:0}.legends-list-body-wrapper.cdk-drag-dragging{opacity:.8;cursor:grabbing;z-index:1001}@media (max-width: 1024px){.legends-list-body-wrapper{width:240px;max-width:240px}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}@media (max-width: 768px){.legends-list-body-wrapper{position:fixed;right:1em;width:calc(100% - 2em);max-width:280px}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important;left:auto;right:1em}}@media (max-width: 480px){.legends-list-body-wrapper{bottom:4em}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}.drag-handle-legends .legend-icon{font-size:18px;cursor:default!important;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.drag-handle-legends .toggle-icon{cursor:pointer!important;transition:all .2s ease;-webkit-user-select:none;user-select:none;font-size:18px!important;display:flex;align-items:center;justify-content:center;flex-shrink:0}.drag-handle-legends .toggle-icon:hover{color:#d3d3d3}.right-icons{display:flex;align-items:center;gap:10px}.legends-list-container{display:flex;flex-direction:column;align-items:center;width:100%;transition:all .3s ease;cursor:default;box-sizing:border-box}::ng-deep .legends-list-body{position:relative;left:auto;right:auto;bottom:auto;z-index:auto;width:100%;max-height:317px;min-height:80px;overflow:hidden;display:flex;flex-direction:column}@media (max-width: 1024px){::ng-deep .legends-list-body{max-height:450px;min-height:70px}}@media (max-width: 768px){::ng-deep .legends-list-body{max-height:60vh;max-height:calc(var(--vh, 1vh) * 60);min-height:100px}}@media (max-width: 480px){::ng-deep .legends-list-body{max-height:70vh;max-height:calc(var(--vh, 1vh) * 70);min-height:90px}}::ng-deep .legends-list-body .item-list{flex:1 1 auto;overflow-y:auto}@media (max-width: 768px){::ng-deep .legends-list-body .item-list{padding:6px;max-height:400px}}::ng-deep .legends-list-body .item-list mat-expansion-panel{border-radius:0!important;box-shadow:none!important;width:100%;background:transparent}::ng-deep .legends-list-body .item-list mat-expansion-panel.mat-expansion-panel{background:transparent}::ng-deep .legends-list-body .item-list mat-expansion-panel .mat-expansion-panel-body{padding:12px 16px;background:#0003}::ng-deep .legends-list-body .item-list .legend{overflow:hidden}::ng-deep .legends-list-body .item-list .legend span{color:#fff}.legend-thumbnail{max-width:254px;width:auto;height:auto;border:1px solid #dee2e6;display:block;border-radius:5px}@media (max-width: 768px){.legend-thumbnail{max-width:254px;padding:3px}}::ng-deep .legends-list-body .item-list::-webkit-scrollbar{width:12px}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .legends-list-body .item-list::-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 .legends-list-body .item-list::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .legends-list-body .item-list::-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 .legends-list-body .item-list::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .mat-expansion-indicator:after{color:#bdc1c3cc!important}::ng-deep .mat-expansion-panel-header.mat-expanded .mat-expansion-indicator:after{color:#fff!important}@media (max-width: 768px){.legends-list-body-wrapper{right:.5em;max-width:280px}}@media (max-width: 480px){.legends-list-body-wrapper{right:.5em;left:.5em;max-width:calc(100vw - 1em);width:auto}.legends-list-body-wrapper.collapsed{width:90px;left:auto}::ng-deep .legends-list-body .item-list{max-height:300px}}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
5118
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: LegendsListComponent, isStandalone: true, selector: "lib-legends-list", inputs: { map: "map", profile: "profile" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"legends-list-body-wrapper global-wrapper-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\" \n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n\n <div class=\"drag-handle-legends\" cdkDragHandle>\n <mat-icon \n class=\"legend-icon\" \n matTooltip=\"Signaturforklaring\" \n (click)=\"toggleLegendsList()\"\n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n area_chart\n </mat-icon>\n <div class=\"right-icons\">\n <mat-icon class=\"toggle-icon\" (click)=\"toggleLegendsList()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n</div>\n\n<div class=\"legends-list-container\">\n @if(!collapsed) {\n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"item-list\">\n @for (layer of filteredLayersDetailed; track layer.id; let i = $index) {\n @if (layer.imageUrl) {\n <mat-expansion-panel [expanded]=\"i === 0\"> \n <mat-expansion-panel-header>\n <span class=\"panel-title\">\n {{ layer.name }}\n </span>\n </mat-expansion-panel-header>\n <div class=\"legend\">\n <img [src]=\"layer.imageUrl\" class=\"legend-thumbnail\"/>\n </div>\n </mat-expansion-panel>\n }\n }\n </div>\n </div>\n}\n</div>\n</div>", styles: [".legends-list-body-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:1000;box-shadow:0 2px 10px #0000001a;transition:width .3s ease,max-width .3s ease;border-radius:5px}.legends-list-body-wrapper.collapsed .drag-handle-legends{box-sizing:border-box}.legends-list-body-wrapper.collapsed .drag-handle-legends .legend-icon{margin-right:0}.legends-list-body-wrapper.cdk-drag-dragging{opacity:.8;cursor:grabbing;z-index:1001}@media (max-width: 1024px){.legends-list-body-wrapper{width:240px;max-width:240px}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}@media (max-width: 768px){.legends-list-body-wrapper{position:fixed;right:1em;width:calc(100% - 2em);max-width:280px}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important;left:auto;right:1em}}@media (max-width: 480px){.legends-list-body-wrapper{bottom:4em}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}.drag-handle-legends .legend-icon{font-size:18px;cursor:default!important;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.drag-handle-legends .toggle-icon{cursor:pointer!important;transition:all .2s ease;-webkit-user-select:none;user-select:none;font-size:18px!important;display:flex;align-items:center;justify-content:center;flex-shrink:0}.drag-handle-legends .toggle-icon:hover{color:#d3d3d3}.right-icons{display:flex;align-items:center;gap:10px}.legends-list-container{display:flex;flex-direction:column;align-items:center;width:100%;transition:all .3s ease;cursor:default;box-sizing:border-box}::ng-deep .legends-list-body{position:relative;left:auto;right:auto;bottom:auto;z-index:auto;width:100%;max-height:317px;min-height:80px;overflow:hidden;display:flex;flex-direction:column}@media (max-width: 1024px){::ng-deep .legends-list-body{max-height:450px;min-height:70px}}@media (max-width: 768px){::ng-deep .legends-list-body{max-height:60vh;max-height:calc(var(--vh, 1vh) * 60);min-height:100px}}@media (max-width: 480px){::ng-deep .legends-list-body{max-height:70vh;max-height:calc(var(--vh, 1vh) * 70);min-height:90px}}::ng-deep .legends-list-body .item-list{flex:1 1 auto;overflow-y:auto}@media (max-width: 768px){::ng-deep .legends-list-body .item-list{padding:6px;max-height:400px}}::ng-deep .legends-list-body .item-list mat-expansion-panel{border-radius:0!important;box-shadow:none!important;width:100%;background:transparent}::ng-deep .legends-list-body .item-list mat-expansion-panel.mat-expansion-panel{background:transparent}::ng-deep .legends-list-body .item-list mat-expansion-panel .mat-expansion-panel-body{padding:12px 16px;background:#0003}::ng-deep .legends-list-body .item-list .legend{overflow:hidden}::ng-deep .legends-list-body .item-list .legend span{color:#fff}.legend-thumbnail{max-width:270px;width:auto;height:auto;border:1px solid #dee2e6;display:block;border-radius:5px}@media (max-width: 768px){.legend-thumbnail{max-width:254px;padding:3px}}::ng-deep .legends-list-body .item-list::-webkit-scrollbar{width:12px}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .legends-list-body .item-list::-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 .legends-list-body .item-list::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .legends-list-body .item-list::-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 .legends-list-body .item-list::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .mat-expansion-indicator:after{color:#bdc1c3cc!important}::ng-deep .mat-expansion-panel-header.mat-expanded .mat-expansion-indicator:after{color:#fff!important}@media (max-width: 768px){.legends-list-body-wrapper{right:.5em;max-width:280px}}@media (max-width: 480px){.legends-list-body-wrapper{right:.5em;left:.5em;max-width:calc(100vw - 1em);width:auto}.legends-list-body-wrapper.collapsed{width:90px;left:auto}::ng-deep .legends-list-body .item-list{max-height:300px}}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
5017
5119
  }
5018
5120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LegendsListComponent, decorators: [{
5019
5121
  type: Component,
5020
5122
  args: [{ selector: 'lib-legends-list', imports: [MatFormFieldModule, CommonModule, MatIconModule, FormsModule, DragDropModule,
5021
- MatExpansionModule, MatInputModule, MatTooltipModule], template: "<div class=\"legends-list-body-wrapper global-wrapper-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\" \n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n\n <div class=\"drag-handle-legends\" cdkDragHandle>\n <mat-icon \n class=\"legend-icon\" \n matTooltip=\"Signaturforklaring\" \n (click)=\"toggleLegendsList()\"\n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n area_chart\n </mat-icon>\n <div class=\"right-icons\">\n <mat-icon class=\"toggle-icon\" (click)=\"toggleLegendsList()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n</div>\n\n<div class=\"legends-list-container\">\n @if(!collapsed) {\n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"item-list\">\n @for (layer of filteredLayersDetailed; track layer.id; let i = $index) {\n @if (layer.imageUrl) {\n <mat-expansion-panel [expanded]=\"i === 0\"> \n <mat-expansion-panel-header>\n <span class=\"panel-title\">\n {{ layer.name }}\n </span>\n </mat-expansion-panel-header>\n <div class=\"legend\">\n <img [src]=\"layer.imageUrl\" class=\"legend-thumbnail\"/>\n </div>\n </mat-expansion-panel>\n }\n }\n </div>\n </div>\n}\n</div>\n</div>", styles: [".legends-list-body-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:1000;box-shadow:0 2px 10px #0000001a;transition:width .3s ease,max-width .3s ease;border-radius:5px}.legends-list-body-wrapper.collapsed .drag-handle-legends{box-sizing:border-box}.legends-list-body-wrapper.collapsed .drag-handle-legends .legend-icon{margin-right:0}.legends-list-body-wrapper.cdk-drag-dragging{opacity:.8;cursor:grabbing;z-index:1001}@media (max-width: 1024px){.legends-list-body-wrapper{width:240px;max-width:240px}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}@media (max-width: 768px){.legends-list-body-wrapper{position:fixed;right:1em;width:calc(100% - 2em);max-width:280px}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important;left:auto;right:1em}}@media (max-width: 480px){.legends-list-body-wrapper{bottom:4em}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}.drag-handle-legends .legend-icon{font-size:18px;cursor:default!important;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.drag-handle-legends .toggle-icon{cursor:pointer!important;transition:all .2s ease;-webkit-user-select:none;user-select:none;font-size:18px!important;display:flex;align-items:center;justify-content:center;flex-shrink:0}.drag-handle-legends .toggle-icon:hover{color:#d3d3d3}.right-icons{display:flex;align-items:center;gap:10px}.legends-list-container{display:flex;flex-direction:column;align-items:center;width:100%;transition:all .3s ease;cursor:default;box-sizing:border-box}::ng-deep .legends-list-body{position:relative;left:auto;right:auto;bottom:auto;z-index:auto;width:100%;max-height:317px;min-height:80px;overflow:hidden;display:flex;flex-direction:column}@media (max-width: 1024px){::ng-deep .legends-list-body{max-height:450px;min-height:70px}}@media (max-width: 768px){::ng-deep .legends-list-body{max-height:60vh;max-height:calc(var(--vh, 1vh) * 60);min-height:100px}}@media (max-width: 480px){::ng-deep .legends-list-body{max-height:70vh;max-height:calc(var(--vh, 1vh) * 70);min-height:90px}}::ng-deep .legends-list-body .item-list{flex:1 1 auto;overflow-y:auto}@media (max-width: 768px){::ng-deep .legends-list-body .item-list{padding:6px;max-height:400px}}::ng-deep .legends-list-body .item-list mat-expansion-panel{border-radius:0!important;box-shadow:none!important;width:100%;background:transparent}::ng-deep .legends-list-body .item-list mat-expansion-panel.mat-expansion-panel{background:transparent}::ng-deep .legends-list-body .item-list mat-expansion-panel .mat-expansion-panel-body{padding:12px 16px;background:#0003}::ng-deep .legends-list-body .item-list .legend{overflow:hidden}::ng-deep .legends-list-body .item-list .legend span{color:#fff}.legend-thumbnail{max-width:254px;width:auto;height:auto;border:1px solid #dee2e6;display:block;border-radius:5px}@media (max-width: 768px){.legend-thumbnail{max-width:254px;padding:3px}}::ng-deep .legends-list-body .item-list::-webkit-scrollbar{width:12px}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .legends-list-body .item-list::-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 .legends-list-body .item-list::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .legends-list-body .item-list::-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 .legends-list-body .item-list::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .mat-expansion-indicator:after{color:#bdc1c3cc!important}::ng-deep .mat-expansion-panel-header.mat-expanded .mat-expansion-indicator:after{color:#fff!important}@media (max-width: 768px){.legends-list-body-wrapper{right:.5em;max-width:280px}}@media (max-width: 480px){.legends-list-body-wrapper{right:.5em;left:.5em;max-width:calc(100vw - 1em);width:auto}.legends-list-body-wrapper.collapsed{width:90px;left:auto}::ng-deep .legends-list-body .item-list{max-height:300px}}\n"] }]
5123
+ MatExpansionModule, MatInputModule, MatTooltipModule], template: "<div class=\"legends-list-body-wrapper global-wrapper-container\" \n cdkDrag \n cdkDragBoundary=\".map-container\" \n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n\n <div class=\"drag-handle-legends\" cdkDragHandle>\n <mat-icon \n class=\"legend-icon\" \n matTooltip=\"Signaturforklaring\" \n (click)=\"toggleLegendsList()\"\n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n area_chart\n </mat-icon>\n <div class=\"right-icons\">\n <mat-icon class=\"toggle-icon\" (click)=\"toggleLegendsList()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n</div>\n\n<div class=\"legends-list-container\">\n @if(!collapsed) {\n <div class=\"ol-unselectable ol-control legends-list-body\">\n <div class=\"item-list\">\n @for (layer of filteredLayersDetailed; track layer.id; let i = $index) {\n @if (layer.imageUrl) {\n <mat-expansion-panel [expanded]=\"i === 0\"> \n <mat-expansion-panel-header>\n <span class=\"panel-title\">\n {{ layer.name }}\n </span>\n </mat-expansion-panel-header>\n <div class=\"legend\">\n <img [src]=\"layer.imageUrl\" class=\"legend-thumbnail\"/>\n </div>\n </mat-expansion-panel>\n }\n }\n </div>\n </div>\n}\n</div>\n</div>", styles: [".legends-list-body-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:1000;box-shadow:0 2px 10px #0000001a;transition:width .3s ease,max-width .3s ease;border-radius:5px}.legends-list-body-wrapper.collapsed .drag-handle-legends{box-sizing:border-box}.legends-list-body-wrapper.collapsed .drag-handle-legends .legend-icon{margin-right:0}.legends-list-body-wrapper.cdk-drag-dragging{opacity:.8;cursor:grabbing;z-index:1001}@media (max-width: 1024px){.legends-list-body-wrapper{width:240px;max-width:240px}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}@media (max-width: 768px){.legends-list-body-wrapper{position:fixed;right:1em;width:calc(100% - 2em);max-width:280px}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important;left:auto;right:1em}}@media (max-width: 480px){.legends-list-body-wrapper{bottom:4em}.legends-list-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}.drag-handle-legends .legend-icon{font-size:18px;cursor:default!important;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.drag-handle-legends .toggle-icon{cursor:pointer!important;transition:all .2s ease;-webkit-user-select:none;user-select:none;font-size:18px!important;display:flex;align-items:center;justify-content:center;flex-shrink:0}.drag-handle-legends .toggle-icon:hover{color:#d3d3d3}.right-icons{display:flex;align-items:center;gap:10px}.legends-list-container{display:flex;flex-direction:column;align-items:center;width:100%;transition:all .3s ease;cursor:default;box-sizing:border-box}::ng-deep .legends-list-body{position:relative;left:auto;right:auto;bottom:auto;z-index:auto;width:100%;max-height:317px;min-height:80px;overflow:hidden;display:flex;flex-direction:column}@media (max-width: 1024px){::ng-deep .legends-list-body{max-height:450px;min-height:70px}}@media (max-width: 768px){::ng-deep .legends-list-body{max-height:60vh;max-height:calc(var(--vh, 1vh) * 60);min-height:100px}}@media (max-width: 480px){::ng-deep .legends-list-body{max-height:70vh;max-height:calc(var(--vh, 1vh) * 70);min-height:90px}}::ng-deep .legends-list-body .item-list{flex:1 1 auto;overflow-y:auto}@media (max-width: 768px){::ng-deep .legends-list-body .item-list{padding:6px;max-height:400px}}::ng-deep .legends-list-body .item-list mat-expansion-panel{border-radius:0!important;box-shadow:none!important;width:100%;background:transparent}::ng-deep .legends-list-body .item-list mat-expansion-panel.mat-expansion-panel{background:transparent}::ng-deep .legends-list-body .item-list mat-expansion-panel .mat-expansion-panel-body{padding:12px 16px;background:#0003}::ng-deep .legends-list-body .item-list .legend{overflow:hidden}::ng-deep .legends-list-body .item-list .legend span{color:#fff}.legend-thumbnail{max-width:270px;width:auto;height:auto;border:1px solid #dee2e6;display:block;border-radius:5px}@media (max-width: 768px){.legend-thumbnail{max-width:254px;padding:3px}}::ng-deep .legends-list-body .item-list::-webkit-scrollbar{width:12px}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .legends-list-body .item-list::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .legends-list-body .item-list::-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 .legends-list-body .item-list::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .legends-list-body .item-list::-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 .legends-list-body .item-list::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}::ng-deep .mat-expansion-indicator:after{color:#bdc1c3cc!important}::ng-deep .mat-expansion-panel-header.mat-expanded .mat-expansion-indicator:after{color:#fff!important}@media (max-width: 768px){.legends-list-body-wrapper{right:.5em;max-width:280px}}@media (max-width: 480px){.legends-list-body-wrapper{right:.5em;left:.5em;max-width:calc(100vw - 1em);width:auto}.legends-list-body-wrapper.collapsed{width:90px;left:auto}::ng-deep .legends-list-body .item-list{max-height:300px}}\n"] }]
5022
5124
  }], propDecorators: { map: [{
5023
5125
  type: Input
5024
5126
  }], profile: [{
@@ -5094,38 +5196,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
5094
5196
  type: Injectable
5095
5197
  }] });
5096
5198
 
5097
- class SelectedFeatureInfoComponent {
5098
- _infoService = inject(ShowInfoService);
5099
- features = null;
5100
- collapsedStates = {};
5101
- ngOnInit() {
5102
- this._infoService.features$.subscribe({
5103
- next: f => {
5104
- this.features = f ? [...f] : null;
5105
- if (this.features) {
5106
- this.features.forEach(item => {
5107
- if (this.collapsedStates[item.layerName] === undefined) {
5108
- this.collapsedStates[item.layerName] = true;
5109
- }
5110
- });
5111
- }
5112
- }
5113
- });
5114
- }
5115
- toggleCollapse(layerName) {
5116
- this.collapsedStates[layerName] = !this.collapsedStates[layerName];
5117
- }
5118
- isCollapsed(layerName) {
5119
- return this.collapsedStates[layerName] || false;
5120
- }
5121
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SelectedFeatureInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5122
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SelectedFeatureInfoComponent, isStandalone: true, selector: "selected-feature-info", ngImport: i0, template: "\n@if(features) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \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 \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 </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:hidden;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-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"] }] });
5123
- }
5124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SelectedFeatureInfoComponent, decorators: [{
5125
- type: Component,
5126
- args: [{ selector: 'selected-feature-info', imports: [CommonModule, FormsModule, AsyncPipe, JsonPipe, MatButtonModule, MatIconModule], template: "\n@if(features) {\n <div class=\"selected-features-wrapper\"> \n\n @for(item of features; track item.layerName) { \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 \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 </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:hidden;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-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"] }]
5127
- }] });
5128
-
5129
5199
  class HoverInfoSearchService extends SearchProviderBase {
5130
5200
  _current = inject(CurrentItemsService);
5131
5201
  getSearchableLayers() {
@@ -5283,7 +5353,6 @@ class GisKomponentComponent {
5283
5353
  legendsListRef;
5284
5354
  layerSelectorRef;
5285
5355
  activeObjectsRef;
5286
- selectedFeatureInfoRef;
5287
5356
  documentInfoRef;
5288
5357
  sessionDone = new EventEmitter();
5289
5358
  featuresChanged = new EventEmitter();
@@ -5292,7 +5361,12 @@ class GisKomponentComponent {
5292
5361
  layerPanelCollapsed = false;
5293
5362
  activeObjectsCollapsed = false;
5294
5363
  conflictsCollapsed = false;
5295
- // Only return false is showActiveObjects in settings is explictly false
5364
+ get showSearch() {
5365
+ return this.settings?.showMapSearch !== false;
5366
+ }
5367
+ get showDocumentSearch() {
5368
+ return this.settings?.showDocumentSearch !== false;
5369
+ }
5296
5370
  get showActiveObjects() {
5297
5371
  return this.settings?.showActiveObjects !== false;
5298
5372
  }
@@ -5381,11 +5455,7 @@ class GisKomponentComponent {
5381
5455
  });
5382
5456
  this.map.addControl(activeObjectsControl);
5383
5457
  }
5384
- const selectedFeatureInfoRefControl = new Control({
5385
- element: this.selectedFeatureInfoRef.nativeElement
5386
- });
5387
- this.map.addControl(selectedFeatureInfoRefControl);
5388
- if (this.settings?.showDocumentSearch) {
5458
+ if (this.showDocumentSearch) {
5389
5459
  const documentInfoRefControl = new Control({
5390
5460
  element: this.documentInfoRef.nativeElement
5391
5461
  });
@@ -5576,15 +5646,15 @@ class GisKomponentComponent {
5576
5646
  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,
5577
5647
  HighlightService, ShowInfoService, InfoSearchProvider, InteractionHelperService, ConflictAnalysisSearchProvider,
5578
5648
  MergeFeaturesService, OverlapService, CowiService, SearchProviderService, AddressSearchService, CadastreSearchService, ShowDocumentInfoService, DocumentSearchService,
5579
- DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService], 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: "selectedFeatureInfoRef", first: true, predicate: ["selectedFeatureInfoRef"], 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 #selectedFeatureInfoRef class=\"selected-features-wrapper\">\n <selected-feature-info></selected-feature-info>\n</div>\n\n<div #documentInfoRef class=\"selected-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(profileShowToolbox && settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [collapsed]=\"selectedProfile.toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile.showAreaMeasurement\" [showMeasureDistance]=\"selectedProfile.showDistanceMeasurement\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"settings?.showMapSearch\" [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,::ng-deep button.ol-rotate-reset{background:#4c4d51;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover,::ng-deep button.ol-rotate-reset:hover{color:#e9e3e3;outline:none}::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}: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 #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:100%;text-align:center}::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}\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: SelectedFeatureInfoComponent, selector: "selected-feature-info" }, { kind: "component", type: DocumentSearchInfoComponent, selector: "document-search-info" }] });
5649
+ DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService], 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=\"selected-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(profileShowToolbox && settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [collapsed]=\"selectedProfile.toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile.showAreaMeasurement\" [showMeasureDistance]=\"selectedProfile.showDistanceMeasurement\"></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,::ng-deep button.ol-rotate-reset{background:#4c4d51;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover,::ng-deep button.ol-rotate-reset:hover{color:#e9e3e3;outline:none}::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}: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 #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:100%;text-align:center}::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}\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" }] });
5580
5650
  }
5581
5651
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GisKomponentComponent, decorators: [{
5582
5652
  type: Component,
5583
5653
  args: [{ selector: 'gis-komponent', imports: [CommonModule, MatIconModule, MatListModule, MatSelectModule, LayerSelectorComponent, MapSearchComponent, ToolboxComponent, ActiveObjectsComponent,
5584
- LegendsListComponent, SelectedFeatureInfoComponent, DocumentSearchInfoComponent], providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
5654
+ LegendsListComponent, DocumentSearchInfoComponent], providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
5585
5655
  HighlightService, ShowInfoService, InfoSearchProvider, InteractionHelperService, ConflictAnalysisSearchProvider,
5586
5656
  MergeFeaturesService, OverlapService, CowiService, SearchProviderService, AddressSearchService, CadastreSearchService, ShowDocumentInfoService, DocumentSearchService,
5587
- DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService], 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 #selectedFeatureInfoRef class=\"selected-features-wrapper\">\n <selected-feature-info></selected-feature-info>\n</div>\n\n<div #documentInfoRef class=\"selected-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(profileShowToolbox && settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [collapsed]=\"selectedProfile.toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile.showAreaMeasurement\" [showMeasureDistance]=\"selectedProfile.showDistanceMeasurement\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"settings?.showMapSearch\" [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,::ng-deep button.ol-rotate-reset{background:#4c4d51;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover,::ng-deep button.ol-rotate-reset:hover{color:#e9e3e3;outline:none}::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}: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 #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:100%;text-align:center}::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}\n"] }]
5657
+ DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService], 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=\"selected-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(profileShowToolbox && settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [collapsed]=\"selectedProfile.toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile.showAreaMeasurement\" [showMeasureDistance]=\"selectedProfile.showDistanceMeasurement\"></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,::ng-deep button.ol-rotate-reset{background:#4c4d51;color:#fff;border-radius:5px!important}::ng-deep button.ol-zoom-in:hover,::ng-deep button.ol-zoom-out:hover,::ng-deep button.ol-rotate-reset:hover{color:#e9e3e3;outline:none}::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}: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 #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:100%;text-align:center}::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}\n"] }]
5588
5658
  }], ctorParameters: () => [], propDecorators: { identifier: [{
5589
5659
  type: Input,
5590
5660
  args: [{ required: true }]
@@ -5602,9 +5672,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
5602
5672
  }], activeObjectsRef: [{
5603
5673
  type: ViewChild,
5604
5674
  args: ['activeObjectsRef', { static: true }]
5605
- }], selectedFeatureInfoRef: [{
5606
- type: ViewChild,
5607
- args: ['selectedFeatureInfoRef', { static: true }]
5608
5675
  }], documentInfoRef: [{
5609
5676
  type: ViewChild,
5610
5677
  args: ['documentInfoRef', { static: true }]