@regionerne/gis-komponent 0.0.87 → 0.0.89
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.
- package/fesm2022/regionerne-gis-komponent.mjs +107 -71
- package/fesm2022/regionerne-gis-komponent.mjs.map +1 -1
- package/lib/components/toolbox/toolbox.component.d.ts +7 -0
- package/lib/models/GisKomponentSettings.d.ts +7 -0
- package/lib/services/UndoRedo.service.d.ts +1 -4
- package/lib/services/centerPoint.service.d.ts +1 -0
- package/lib/services/geometri-split.service.d.ts +1 -0
- package/lib/services/mergeFeatures.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -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,
|
|
62
|
+
import { buffer, lineIntersect, lineSplit, featureCollection, difference, booleanIntersects, union, booleanPointInPolygon, point, area, flatten, feature, booleanWithin, intersect, bboxPolygon } from '@turf/turf';
|
|
63
63
|
import GeoJSON$1 from 'ol/format/GeoJSON';
|
|
64
64
|
import { containsXY, extend, createEmpty, buffer as buffer$1 } from 'ol/extent';
|
|
65
65
|
import { Feature } from 'ol';
|
|
@@ -475,7 +475,6 @@ class LayoutService {
|
|
|
475
475
|
let dragPosition = { x: x, y: y };
|
|
476
476
|
if (!this._map)
|
|
477
477
|
return dragPosition;
|
|
478
|
-
console.log('calculateWidgetPosition', initialPosition, widgetName);
|
|
479
478
|
const containerRect = await this._getMapRect();
|
|
480
479
|
if (currentPosition) {
|
|
481
480
|
// Expanding a widget or viewport changed size, so fit the widget inside view again
|
|
@@ -966,8 +965,7 @@ class LayerSelectorComponent {
|
|
|
966
965
|
this.filteredBackgroundLayerGroups
|
|
967
966
|
.forEach(group => {
|
|
968
967
|
group.layers.forEach(layer => layer.visible = false); //Turn all layers off in selector to begin with
|
|
969
|
-
group.visible = true;
|
|
970
|
-
group.expanded = true;
|
|
968
|
+
group.visible = true;
|
|
971
969
|
this._layerHelper.layersAddedToMapSubject.pipe(filter(added => added === true), take(1)).subscribe((added) => this._layerHelper.startFailoverForBackgroundGroup(group.id));
|
|
972
970
|
});
|
|
973
971
|
this._initializeMapControl();
|
|
@@ -1282,12 +1280,12 @@ class LayerSelectorComponent {
|
|
|
1282
1280
|
}));
|
|
1283
1281
|
}
|
|
1284
1282
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LayerSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1285
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: LayerSelectorComponent, isStandalone: true, selector: "lib-layer-selector", inputs: { map: "map", profile: "profile", currentZoomLevel: "currentZoomLevel" }, viewQueries: [{ propertyName: "contentBody", first: true, predicate: ["layerSelectorBody"], descendants: true }, { propertyName: "dmpDialog", first: true, predicate: ["dmpDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #layerSelectorBody\n class=\"layer-selector-body-wrapper global-wrapper-container\"\n cdkDrag\n cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"layerSelectorDragPosition\"\n (cdkDragEnded)=\"onLayerSelectorDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n\n <div class=\"drag-handle-selector\" cdkDragHandle>\n <div class=\"drag-handle-content\">\n <div class=\"drag-handle-icons\">\n <mat-icon \n class=\"icon-left\" \n matTooltip=\"Lag\" \n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n layers\n </mat-icon>\n <mat-icon class=\"toggle-icon\" (click)=\"toggleLayerSelector()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n </div>\n\n <div class=\"ol-unselectable ol-control layer-selector-body\" *ngIf=\"!collapsed\">\n <div class=\"search-section\">\n <div class=\"search-field-wrapper\">\n <label class=\"search-label\">Filtrer</label>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"searchText\" \n (ngModelChange)=\"filterChanged()\"\n />\n </mat-form-field>\n </div>\n <mat-icon matTooltip=\"Nulstil\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" (click)=\"clearSearchText()\">\n replay</mat-icon>\n </div>\n <div\n cdkDropList\n [cdkDropListData]=\"filteredLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event, filteredLayerGroups)\"\n class=\"item-list\">\n @for (group of filteredLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"drag-indicator\" cdkDragHandle>drag_indicator</mat-icon>\n <span class=\"panel-title\">{{ group.name }}</span>\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon> \n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"!layer.description\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"item\" cdkDrag>\n <div class=\"item-left\">\n <mat-icon class=\"drag-indicator\" cdkDragHandle>drag_indicator</mat-icon>\n <span>{{ layer.name }}</span> \n <mat-icon></mat-icon>\n </div>\n <div class=\"item-center\">\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">browser_not_supported\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n\n }\n </div>\n <div class=\"item-right\">\n @if(layer.infoUrl) {\n <mat-icon \n class=\"layer-info\"\n matTooltip=\"Yderligere laginfo\"\n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n (click)=\"openUrl(layer.infoUrl)\"\n matTooltipPosition=\"above\"\n >info</mat-icon>\n }\n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.id, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.name }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"layer-description\">{{ layer.description }}</div>\n @if (showLegend) {\n <img [src]=\"legendUrl\" class=\"legend-thumbnail\"/>\n }\n </mat-expansion-panel>\n }\n </div>\n </mat-expansion-panel>\n <div *cdkDragPreview><span class=\"panel-title\">{{ group.name }} </span></div>\n </div>\n }\n </div>\n <div class=\"group-header\">Mine Temaer\n <mat-icon (click)=\"toggleDmpSearch(true)\"\n class=\"power-on\"\n matTooltip=\"S\u00F8g\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">add\n </mat-icon>\n </div>\n @if (filteredDmpLayers.length > 0) {\n <div class=\"dmp-item-list\" cdkDropList\n [cdkDropListData]=\"filteredDmpLayers\"\n (cdkDropListDropped)=\"dropDmpLayer($event)\">\n @for (layer of filteredDmpLayers; track layer.datasetId; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"true\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"dmp-item\" cdkDrag>\n <div class=\"dmp-item-container\">\n <div class=\"dmp-item-left\">\n <mat-icon (click)=\"deleteDmpLayer(layer, $event)\" class=\"delete-icon\" \n matTooltip=\"Slet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">delete\n </mat-icon>\n <div class=\"dmp-item-title\">\n <span class=\"title-text\">{{ layer.title }}</span>\n </div>\n </div>\n \n <div class=\"dmp-item-center\">\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n }\n \n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.datasetId, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.datasetId, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n </div>\n <div class=\"dmp-item-right\">\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.datasetId, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.title }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n </mat-expansion-panel>\n }\n </div>\n }\n <div *ngIf=\"filteredBackgroundLayerGroups && filteredBackgroundLayerGroups.length > 0\" class=\"group-header\">Baggrundskort</div>\n <div\n cdkDropList\n [cdkDropListData]=\"filteredBackgroundLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event, filteredBackgroundLayerGroups)\"\n class=\"item-list\">\n @for (group of filteredBackgroundLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n @if (group.expanded) {\n <mat-icon class=\"arrow-up-layer\">arrow_upward</mat-icon>\n }\n @if (!group.expanded) {\n <mat-icon>arrow_downward</mat-icon> \n }\n {{ group.name }}\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon> \n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"!layer.description\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"item\" cdkDrag>\n <div class=\"item-left\">\n <mat-icon class=\"drag-indicator\">drag_indicator</mat-icon>\n <span>{{ layer.name }}</span>\n </div>\n <div class=\"item-center\">\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">browser_not_supported\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n }\n </div>\n <div class=\"item-right\">\n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.id, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.name }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"layer-description\">{{ layer.description }}</div>\n @if (showLegend) {\n <img [src]=\"legendUrl\" class=\"legend-thumbnail\"/>\n }\n </mat-expansion-panel>\n }\n </div>\n </mat-expansion-panel>\n <div *cdkDragPreview><span class=\"panel-title\">{{ group.name }} </span></div>\n </div>\n }\n </div>\n </div>\n <ng-template #dmpDialog>\n @if (dmpSearchMode) {\n <mat-dialog-content>\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <div class=\"search-field-wrapper\">\n <label class=\"search-label\">S\u00F8g</label>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"dmpSearchText\" \n (ngModelChange)=\"searchDmp()\"\n />\n </mat-form-field>\n </div>\n <mat-icon (click)=\"clearDmpSearchText()\" \n matTooltip=\"Nulstil\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\"\n class=\"undo-icon\" >undo\n </mat-icon>\n </div>\n <mat-icon \n class=\"close-button\" \n (click)=\"toggleDmpSearch(false)\"\n matTooltip=\"Luk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"left\">\n close\n </mat-icon>\n </div>\n </mat-dialog-content>\n }\n\n @if (dmpLayerResults.length > 0) {\n <div class=\"dmp-search-panel global-wrapper-container\">\n <div *ngFor=\"let result of dmpLayerResults\" [attr.data-value]=\"result\" class=\"search-result-option\">\n <mat-expansion-panel expanded=\"false\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <span class=\"result-title\">{{ result.title }}</span>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div><span class=\"field-label\">Status:</span><span class=\"field-value\"> {{ result.availability }}</span></div>\n <div><span class=\"field-label\">Kategori:</span><span class=\"field-value\"> {{ result.category }}</span></div>\n <div><span class=\"field-label\">Beskrivelse:</span><span class=\"field-value\"> {{ result.description }}</span></div>\n <div><span class=\"field-label\">Tags:</span><span class=\"field-value\"> {{ result.tags?.join(', ') }}</span></div>\n <div *ngIf=\"result.metaDataUrl\">\n <span class=\"field-label\">Metadata:</span>\n <a [href]=\"result.metaDataUrl\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n Vis metadata\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div *ngIf=\"result.license && result.license.url\">\n <span class=\"field-label\">Licens:</span>\n <a [href]=\"result.license.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n {{ result.license.title }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div *ngIf=\"result.dataLiabilityAgreement && result.dataLiabilityAgreement.url\">\n <span class=\"field-label\">Dataansvarsaftale:</span>\n <a [href]=\"result.dataLiabilityAgreement.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n {{ result.dataLiabilityAgreement.title }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div class=\"add-layer-section\">\n <span class=\"field-label\">Tilf\u00F8j {{ result.serviceType }}:</span>\n <mat-icon (click)=\"addDmpLayer(result)\" class=\"add-option\"\n matTooltip=\"Tilf\u00F8j\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">add\n </mat-icon>\n </div>\n </mat-expansion-panel>\n </div>\n </div>}\n </ng-template>\n</div>", styles: [".layer-info{cursor:pointer}.legend-thumbnail{max-width:200px;max-height:200px;width:auto;height:auto;border:2px solid #dee2e6;padding:6px}::ng-deep .dmp-dialog-content mat-dialog-content .search-section{display:flex;align-items:center;gap:6px}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .undo-icon{color:#fff!important;cursor:pointer;flex-shrink:0}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .undo-icon:hover{color:#d3d3d3!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .search-field-wrapper{flex:1;display:flex;flex-direction:column}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .search-label{color:#fff}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field{flex:1}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .search-icon{color:#fff}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.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 .dmp-dialog-content mat-dialog-actions{display:none}::ng-deep .dmp-dialog-content .search-result-option{padding:0!important}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel{box-shadow:none!important;margin-bottom:2px;border-radius:0!important;background:transparent!important;color:#fff}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content{background:#0003}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:12px 16px!important}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:10px 12px!important}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{margin-bottom:10px;display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div:last-child{margin-bottom:0}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{font-size:11px;gap:6px}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{color:#bdc1c3cc!important;min-width:90px;font-weight:500;flex-shrink:0;font-size:13px}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{min-width:80px}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-value{color:#fff!important;font-weight:300;flex:1;word-break:break-word;font-size:13px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link:hover{color:#2180c9!important;text-decoration:underline!important}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link .link-icon{font-size:14px;width:14px;height:14px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section{display:flex;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .field-label{min-width:90px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option{color:#6ccb78!important;cursor:pointer;font-size:20px;width:20px;height:20px;transition:all .2s ease}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option:hover{color:#45a049!important;transform:scale(1.1)}.dmp-search-panel{overflow-y:scroll;max-height:300px}.dmp-search-panel::-webkit-scrollbar{width:12px}.dmp-search-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}.dmp-search-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.dmp-search-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}.dmp-search-panel::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}.dmp-search-panel::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}.dmp-search-panel::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}.dmp-search-panel::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}.dmp-search-panel::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}.dmp-search-panel .search-result-option{padding:0!important;margin-bottom:2px}.dmp-search-panel .search-result-option mat-expansion-panel{box-shadow:none!important;margin:0;border-radius:0!important;background:transparent!important}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content{background:#0003}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:12px 16px!important}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:10px 12px!important}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{margin-bottom:10px;display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div:last-child{margin-bottom:0}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{font-size:11px;gap:6px}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{color:#bdc1c3cc!important;min-width:90px;font-weight:500;flex-shrink:0;font-size:13px}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{min-width:80px}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-value{color:#fff!important;font-weight:300;flex:1;word-break:break-word;font-size:13px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link:hover{color:#2180c9!important;text-decoration:underline!important}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link .link-icon{font-size:14px;width:14px;height:14px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section{display:flex;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .field-label{min-width:90px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option{color:#6ccb78!important;cursor:pointer;font-size:20px;width:20px;height:20px;transition:all .2s ease}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option:hover{color:#45a049!important;transform:scale(1.1)}.dmp-search-panel .search-result-option:first-child mat-expansion-panel .mat-expansion-panel-header{border-top-left-radius:4px!important;border-top-right-radius:4px!important}.dmp-search-panel .search-result-option:last-child mat-expansion-panel .mat-expansion-panel-header.mat-expanded{border-radius:0!important}.dmp-search-panel .search-result-option:last-child mat-expansion-panel .mat-expansion-panel-content{border-bottom-left-radius:4px!important;border-bottom-right-radius:4px!important}.dialog-header{position:relative}.dialog-header .close-button{position:absolute;top:-9px;right:-14px;color:#fff;cursor:pointer;border-radius:50%;transition:all .2s ease;font-size:18px;width:24px;height:24px;display:flex;justify-content:center;align-items:center;z-index:10;background-color:#ffffff1a}.dialog-header .close-button:hover{color:#e0d5d5}.field-label{color:#bdc1c3cc!important;margin-right:6px}.open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}.open-link:hover{color:#2180c9!important;text-decoration:underline!important}.field-value{color:#fff!important;font-weight:300}.add-layer-section{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}.dmp-item-list .dmp-item-container{display:flex;align-items:center;width:100%;gap:12px;min-width:0}.dmp-item-list .dmp-item-container .dmp-item-left{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer;flex-shrink:0}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon:hover{color:#d3d3d3}.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title{flex:1;min-width:0;overflow:hidden}.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title .title-text{color:#fff;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title .title-text{font-size:11px}}.dmp-item-list .dmp-item-container .dmp-item-center{display:flex;align-items:center;gap:8px;flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-center .zoom-off{color:#ef4444;font-size:16px;width:16px;height:16px}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center .zoom-off{font-size:14px;width:14px;height:14px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon{flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on{color:#6ccb78;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on:hover{color:#45a049}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off:hover{color:#d3d3d3}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-fail{color:#bdc1c3cc;font-size:18px;width:18px;height:18px}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-fail{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-right{display:flex;align-items:center;flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]{width:60px;height:4px;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none;cursor:pointer}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]::-moz-range-thumb:hover{background:#6ccb78}::ng-deep .dmp-item-list mat-expansion-panel{box-shadow:none!important}.group-header{display:flex;color:#fff;padding:8px 14px;font-weight:600;background:#ffffff08}.group-header mat-icon{margin-left:10px;cursor:pointer;color:#bdc1c3cc;transition:color .2s ease}.group-header mat-icon:hover{color:#6ccb78}.layer-selector-body-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:1000;max-width:calc(100vw - 8em);display:flex;flex-direction:column;transition:width .3s ease,max-width .3s ease;border-top-left-radius:5px;border-top-right-radius:5px;box-shadow:0 2px 10px #0000001a;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.layer-selector-body-wrapper.cdk-drag-dragging{opacity:.8;cursor:move;z-index:1001}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons{justify-content:space-between}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons .icon-left{order:1;margin-right:auto}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons .toggle-icon{order:3}.layer-selector-body-wrapper.collapsed .layer-selector-body{display:none}.layer-selector-body-wrapper.collapsed .drag-handle-selector{width:100%;min-width:100%;box-sizing:border-box;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content{width:100%}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons{width:100%;justify-content:space-between;gap:6px}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon{font-size:18px!important;flex-shrink:0}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.icon-left{cursor:default!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.toggle-icon{cursor:pointer!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.toggle-icon:hover{color:#d3d3d3!important}@media (max-width: 767px){.layer-selector-body-wrapper{max-width:calc(100vw - 7em);left:.5em}.layer-selector-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}@media (min-width: 768px) and (max-width: 1024px){.layer-selector-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}.drag-handle-selector{display:flex;justify-content:flex-end;border-radius:5px 5px 0 0;padding:0 2px;cursor:move}.drag-handle-content,.drag-handle-icons{display:flex;align-items:center;width:100%}.drag-handle-icons mat-icon{font-size:18px;transition:all .2s ease;display:flex;align-items:center;justify-content:center;flex-shrink:0}.icon-left{cursor:default!important}.toggle-icon{cursor:pointer!important}.toggle-icon:hover{color:#d3d3d3!important}::ng-deep .layer-selector-body{position:relative;left:auto;right:auto;bottom:auto;z-index:auto;width:100%;max-width:100%;max-height:317px;min-height:120px;overflow-y:auto;border-radius:0 0 5px 5px!important}::ng-deep .layer-selector-body .mat-expansion-panel-header-title{gap:6px}::ng-deep .layer-selector-body::-webkit-scrollbar{width:12px}::ng-deep .layer-selector-body::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .layer-selector-body::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .layer-selector-body::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .layer-selector-body::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .layer-selector-body::-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 .layer-selector-body::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .layer-selector-body::-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 .layer-selector-body::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}@media (max-width: 767px){::ng-deep .layer-selector-body{width:100%;max-height:70vh;min-height:140px}}@media (min-width: 768px) and (max-width: 1024px){::ng-deep .layer-selector-body{width:100%;max-width:445px;max-height:76vh;min-height:110px}}::ng-deep .layer-selector-body .search-section{display:flex;padding:12px 12px 8px;justify-content:center;align-items:center;gap:8px}@media (max-width: 767px){::ng-deep .layer-selector-body .search-section{padding:8px 8px 4px;gap:4px}}::ng-deep .layer-selector-body .search-section .search-field-wrapper{flex:1;display:flex;flex-direction:column}::ng-deep .layer-selector-body .search-section .search-label{color:#fff}::ng-deep .layer-selector-body .search-section mat-form-field{flex:1}::ng-deep .layer-selector-body .search-section mat-form-field .search-icon{color:#fff}::ng-deep .layer-selector-body .search-section mat-form-field ::ng-deep .mat-mdc-form-field-focus-overlay{background-color:transparent}::ng-deep .layer-selector-body .search-section>mat-icon{color:#fff;cursor:pointer;margin-top:0;transition:color .2s ease}::ng-deep .layer-selector-body .search-section>mat-icon:hover{color:#d3d3d3}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list{padding:4px;max-height:calc(60vh - 80px)}}@media (min-width: 768px) and (max-width: 1024px){::ng-deep .layer-selector-body .item-list{max-height:calc(77vh - 78px)}}::ng-deep .layer-selector-body .item-list .group{overflow:hidden;box-shadow:none}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel{background:transparent!important;box-shadow:none!important;margin-bottom:4px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header{padding:0 16px;height:40px!important}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title{display:flex;align-items:center;gap:6px;font-weight:600!important;color:#bdc1c3cc!important;transition:color .2s ease;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title{gap:4px;font-size:11px}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon{color:#bdc1c3cc;font-size:16px;width:16px;height:16px;transition:all .2s ease}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-on{color:#6ccb78;cursor:pointer}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-on:hover{color:#45a049}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-off{cursor:pointer;color:#bdc1c3cc}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-off:hover{color:#d3d3d3}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-fail{color:#bdc1c3cc}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-content{background:#0003}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:2px 0 2px 12px}}::ng-deep .layer-selector-body .item-list .group .item-list{padding:0}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel{background:transparent!important;box-shadow:none!important;margin-bottom:2px}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel .mat-expansion-panel-content{background:#00000026}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:8px 16px 12px 32px}::ng-deep .layer-selector-body .item-list .group .item-list .layer-description{font-size:12px;color:#fffc;line-height:1.5;margin-bottom:8px;margin-left:28px}::ng-deep .layer-selector-body .item-list .group .item{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:8px;background:transparent;transition:all .2s ease;color:#fff;cursor:pointer;font-size:13px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item{gap:4px;font-size:11px}}::ng-deep .layer-selector-body .item-list .group .item:hover{background-color:transparent}::ng-deep .layer-selector-body .item-list .group .item .item-left{display:flex;align-items:center;gap:4px;flex:1;min-width:0}::ng-deep .layer-selector-body .item-list .group .item .item-left .drag-indicator{color:#ffffff80;font-size:16px;width:16px;height:16px;cursor:move;flex-shrink:0}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left .drag-indicator{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info{cursor:pointer;color:#e0e0de;font-size:16px;width:16px;height:16px;flex-shrink:0;transition:all .2s ease}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info:hover{color:#ccb913}::ng-deep .layer-selector-body .item-list .group .item .item-left span{flex:1;font-size:13px;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;white-space:normal;color:#fff;font-weight:400}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left span{font-size:11px}}::ng-deep .layer-selector-body .item-list .group .item .item-center{display:flex;align-items:center;gap:4px;flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-center .zoom-off{color:#ef4444;font-size:16px;width:16px;height:16px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-center .zoom-off{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-right{display:flex;align-items:center;gap:8px;flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon{flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on{color:#6ccb78;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on:hover{color:#45a049}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off:hover{color:#d3d3d3}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-fail{color:#bdc1c3cc;font-size:18px;width:18px;height:18px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-fail{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]{width:60px;height:4px;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none;cursor:pointer}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]::-moz-range-thumb:hover{background:#6ccb78}::ng-deep .layer-selector-body-wrapper .result-title{color:#fff}::ng-deep .layer-selector-body-wrapper .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none!important}::ng-deep .layer-selector-body-wrapper .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .mat-expansion-panel-header.mat-expanded:hover{background:inherit!important}::ng-deep .layer-selector-body-wrapper .show-layer-highlight{font-size:18px;height:18px;width:18px}::ng-deep .layer-selector-body-wrapper .dmp-item{cursor:move;width:100%}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel-header.mat-expanded:hover,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel-header.mat-expanded:hover{background:#ffffff26!important}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel:not([class*=mat-elevation-z]),::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none!important}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-indicator:after,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-indicator:after{color:#fff!important;border-color:#fff!important}::ng-deep .layer-selector-body-wrapper mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding-left:0!important;padding-right:0!important;box-sizing:border-box}@media (max-width: 767px){::ng-deep .layer-selector-body-wrapper mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding-left:12px!important;padding-right:12px!important}}.cdk-drag-preview{box-sizing:border-box;border-radius:5px;box-shadow:0 5px 15px #00000026;background:#4c4d51;padding:8px 12px;color:#fff;display:flex;align-items:center;gap:8px}.cdk-drag-preview mat-icon{color:#fff}.cdk-drag-animating,.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .cdk-drag{transform:translateZ(0)!important}.power-on{color:#6ccb78!important;font-size:18px;width:18px;height:18px}.power-off{cursor:pointer;color:#bdc1c3cc!important}.power-fail{color:#bdc1c3cc!important}.add-option{color:#6ccb78!important}.add-option:hover{color:#37923a!important}::ng-deep .lightbulb{color:#dfca0e;width:18px;height:18px;font-size:18px}::ng-deep .arrow-up-layer{color:#fff;width:18px;height:18px;font-size:18px}::ng-deep .mdc-text-field--outlined{overflow:hidden!important}::ng-deep .drag-indicator{cursor:move!important}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { 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: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { 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.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { 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: DragDropModule }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { 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: "directive", type: i5.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { 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: "directive", type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1$4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
|
|
1283
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: LayerSelectorComponent, isStandalone: true, selector: "lib-layer-selector", inputs: { map: "map", profile: "profile", currentZoomLevel: "currentZoomLevel" }, viewQueries: [{ propertyName: "contentBody", first: true, predicate: ["layerSelectorBody"], descendants: true }, { propertyName: "dmpDialog", first: true, predicate: ["dmpDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #layerSelectorBody\n class=\"layer-selector-body-wrapper global-wrapper-container\"\n cdkDrag\n cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"layerSelectorDragPosition\"\n (cdkDragEnded)=\"onLayerSelectorDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n\n <div class=\"drag-handle-selector\" cdkDragHandle>\n <div class=\"drag-handle-content\">\n <div class=\"drag-handle-icons\">\n <mat-icon \n class=\"icon-left\" \n matTooltip=\"Lag\" \n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n layers\n </mat-icon>\n <mat-icon class=\"toggle-icon\" (click)=\"toggleLayerSelector()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n </div>\n\n <div class=\"ol-unselectable ol-control layer-selector-body\" *ngIf=\"!collapsed\">\n <div class=\"search-section\">\n <div class=\"search-field-wrapper\">\n <label class=\"search-label\">Filtrer</label>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"searchText\" \n (ngModelChange)=\"filterChanged()\"\n />\n </mat-form-field>\n </div>\n <mat-icon matTooltip=\"Nulstil\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" (click)=\"clearSearchText()\">\n replay</mat-icon>\n </div>\n <div\n cdkDropList\n [cdkDropListData]=\"filteredLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event, filteredLayerGroups)\"\n class=\"item-list\">\n @for (group of filteredLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"drag-indicator\" cdkDragHandle>drag_indicator</mat-icon>\n <span class=\"panel-title\">{{ group.name }}</span>\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon> \n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"!layer.description\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"item\" cdkDrag>\n <div class=\"item-left\">\n <mat-icon class=\"drag-indicator\" cdkDragHandle>drag_indicator</mat-icon>\n <span>{{ layer.name }}</span> \n <mat-icon></mat-icon>\n </div>\n <div class=\"item-center\">\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Lag vises ikke pga zoom niveau\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">browser_not_supported\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n\n }\n </div>\n <div class=\"item-right\">\n @if(layer.infoUrl) {\n <mat-icon \n class=\"layer-info\"\n matTooltip=\"Yderligere laginfo\"\n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n (click)=\"openUrl(layer.infoUrl)\"\n matTooltipPosition=\"above\"\n >info</mat-icon>\n }\n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n </div>\n <div class=\"item-slider\">\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.id, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.name }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"layer-description\">{{ layer.description }}</div>\n @if (showLegend) {\n <img [src]=\"legendUrl\" class=\"legend-thumbnail\"/>\n }\n </mat-expansion-panel>\n }\n </div>\n </mat-expansion-panel>\n <div *cdkDragPreview><span class=\"panel-title\">{{ group.name }} </span></div>\n </div>\n }\n </div>\n <div class=\"group-header\">Mine Temaer\n <mat-icon (click)=\"toggleDmpSearch(true)\"\n class=\"power-on\"\n matTooltip=\"S\u00F8g\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">add\n </mat-icon>\n </div>\n @if (filteredDmpLayers.length > 0) {\n <div class=\"dmp-item-list\" cdkDropList\n [cdkDropListData]=\"filteredDmpLayers\"\n (cdkDropListDropped)=\"dropDmpLayer($event)\">\n @for (layer of filteredDmpLayers; track layer.datasetId; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"true\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"dmp-item\" cdkDrag>\n <div class=\"dmp-item-container\">\n <div class=\"dmp-item-left\">\n <mat-icon (click)=\"deleteDmpLayer(layer, $event)\" class=\"delete-icon\" \n matTooltip=\"Slet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">delete\n </mat-icon>\n <div class=\"dmp-item-title\">\n <span class=\"title-text\">{{ layer.title }}</span>\n </div>\n </div>\n \n <div class=\"dmp-item-center\">\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n }\n \n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.datasetId, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.datasetId, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n </div>\n </div>\n <div class=\"dmp-item-slider\">\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.datasetId, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.title }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n </mat-expansion-panel>\n }\n </div>\n }\n <div *ngIf=\"filteredBackgroundLayerGroups && filteredBackgroundLayerGroups.length > 0\" class=\"group-header\">Baggrundskort</div>\n <div\n cdkDropList\n [cdkDropListData]=\"filteredBackgroundLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event, filteredBackgroundLayerGroups)\"\n class=\"item-list\">\n @for (group of filteredBackgroundLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n @if (group.expanded) {\n <mat-icon class=\"arrow-up-layer\">arrow_upward</mat-icon>\n }\n @if (!group.expanded) {\n <mat-icon>arrow_downward</mat-icon> \n }\n {{ group.name }}\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon> \n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"!layer.description\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"item\" cdkDrag>\n <div class=\"item-left\">\n <mat-icon class=\"drag-indicator\">drag_indicator</mat-icon>\n <span>{{ layer.name }}</span>\n </div>\n <div class=\"item-center\">\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">browser_not_supported\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n }\n </div>\n <div class=\"item-right\">\n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.id, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.name }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"layer-description\">{{ layer.description }}</div>\n @if (showLegend) {\n <img [src]=\"legendUrl\" class=\"legend-thumbnail\"/>\n }\n </mat-expansion-panel>\n }\n </div>\n </mat-expansion-panel>\n <div *cdkDragPreview><span class=\"panel-title\">{{ group.name }} </span></div>\n </div>\n }\n </div>\n </div>\n <ng-template #dmpDialog>\n @if (dmpSearchMode) {\n <mat-dialog-content>\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <div class=\"search-field-wrapper\">\n <label class=\"search-label\">S\u00F8g</label>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"dmpSearchText\" \n (ngModelChange)=\"searchDmp()\"\n />\n </mat-form-field>\n </div>\n <mat-icon (click)=\"clearDmpSearchText()\" \n matTooltip=\"Nulstil\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\"\n class=\"undo-icon\" >undo\n </mat-icon>\n </div>\n <mat-icon \n class=\"close-button\" \n (click)=\"toggleDmpSearch(false)\"\n matTooltip=\"Luk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"left\">\n close\n </mat-icon>\n </div>\n </mat-dialog-content>\n }\n\n @if (dmpLayerResults.length > 0) {\n <div class=\"dmp-search-panel global-wrapper-container\">\n <div *ngFor=\"let result of dmpLayerResults\" [attr.data-value]=\"result\" class=\"search-result-option\">\n <mat-expansion-panel expanded=\"false\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <span class=\"result-title\">{{ result.title }}</span>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div><span class=\"field-label\">Status:</span><span class=\"field-value\"> {{ result.availability }}</span></div>\n <div><span class=\"field-label\">Kategori:</span><span class=\"field-value\"> {{ result.category }}</span></div>\n <div><span class=\"field-label\">Beskrivelse:</span><span class=\"field-value\"> {{ result.description }}</span></div>\n <div><span class=\"field-label\">Tags:</span><span class=\"field-value\"> {{ result.tags?.join(', ') }}</span></div>\n <div *ngIf=\"result.metaDataUrl\">\n <span class=\"field-label\">Metadata:</span>\n <a [href]=\"result.metaDataUrl\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n Vis metadata\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div *ngIf=\"result.license && result.license.url\">\n <span class=\"field-label\">Licens:</span>\n <a [href]=\"result.license.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n {{ result.license.title }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div *ngIf=\"result.dataLiabilityAgreement && result.dataLiabilityAgreement.url\">\n <span class=\"field-label\">Dataansvarsaftale:</span>\n <a [href]=\"result.dataLiabilityAgreement.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n {{ result.dataLiabilityAgreement.title }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div class=\"add-layer-section\">\n <span class=\"field-label\">Tilf\u00F8j {{ result.serviceType }}:</span>\n <mat-icon (click)=\"addDmpLayer(result)\" class=\"add-option\"\n matTooltip=\"Tilf\u00F8j\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">add\n </mat-icon>\n </div>\n </mat-expansion-panel>\n </div>\n </div>}\n </ng-template>\n</div>", styles: [".layer-info{cursor:pointer}.legend-thumbnail{max-width:200px;max-height:200px;width:auto;height:auto;border:2px solid #dee2e6;padding:6px}::ng-deep .dmp-dialog-content mat-dialog-content .search-section{display:flex;align-items:center;gap:6px}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .undo-icon{color:#fff!important;cursor:pointer;flex-shrink:0}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .undo-icon:hover{color:#d3d3d3!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .search-field-wrapper{flex:1;display:flex;flex-direction:column}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .search-label{color:#fff}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field{flex:1}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .search-icon{color:#fff}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.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 .dmp-dialog-content mat-dialog-actions{display:none}::ng-deep .dmp-dialog-content .search-result-option{padding:0!important}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel{box-shadow:none!important;margin-bottom:2px;border-radius:0!important;background:transparent!important;color:#fff}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content{background:#0003}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:12px 16px!important}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:10px 12px!important}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{margin-bottom:10px;display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div:last-child{margin-bottom:0}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{font-size:11px;gap:6px}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{color:#bdc1c3cc!important;min-width:90px;font-weight:500;flex-shrink:0;font-size:13px}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{min-width:80px}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-value{color:#fff!important;font-weight:300;flex:1;word-break:break-word;font-size:13px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link:hover{color:#2180c9!important;text-decoration:underline!important}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link .link-icon{font-size:14px;width:14px;height:14px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section{display:flex;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .field-label{min-width:90px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option{color:#6ccb78!important;cursor:pointer;font-size:20px;width:20px;height:20px;transition:all .2s ease}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option:hover{color:#45a049!important;transform:scale(1.1)}.dmp-search-panel{overflow-y:scroll;max-height:300px}.dmp-search-panel::-webkit-scrollbar{width:12px}.dmp-search-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}.dmp-search-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.dmp-search-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}.dmp-search-panel::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}.dmp-search-panel::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}.dmp-search-panel::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}.dmp-search-panel::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}.dmp-search-panel::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}.dmp-search-panel .search-result-option{padding:0!important;margin-bottom:2px}.dmp-search-panel .search-result-option mat-expansion-panel{box-shadow:none!important;margin:0;border-radius:0!important;background:transparent!important}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content{background:#0003}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:12px 16px!important}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:10px 12px!important}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{margin-bottom:10px;display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div:last-child{margin-bottom:0}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{font-size:11px;gap:6px}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{color:#bdc1c3cc!important;min-width:90px;font-weight:500;flex-shrink:0;font-size:13px}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{min-width:80px}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-value{color:#fff!important;font-weight:300;flex:1;word-break:break-word;font-size:13px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link:hover{color:#2180c9!important;text-decoration:underline!important}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link .link-icon{font-size:14px;width:14px;height:14px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section{display:flex;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .field-label{min-width:90px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option{color:#6ccb78!important;cursor:pointer;font-size:20px;width:20px;height:20px;transition:all .2s ease}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option:hover{color:#45a049!important;transform:scale(1.1)}.dmp-search-panel .search-result-option:first-child mat-expansion-panel .mat-expansion-panel-header{border-top-left-radius:4px!important;border-top-right-radius:4px!important}.dmp-search-panel .search-result-option:last-child mat-expansion-panel .mat-expansion-panel-header.mat-expanded{border-radius:0!important}.dmp-search-panel .search-result-option:last-child mat-expansion-panel .mat-expansion-panel-content{border-bottom-left-radius:4px!important;border-bottom-right-radius:4px!important}.dialog-header{position:relative}.dialog-header .close-button{position:absolute;top:-9px;right:-14px;color:#fff;cursor:pointer;border-radius:50%;transition:all .2s ease;font-size:18px;width:24px;height:24px;display:flex;justify-content:center;align-items:center;z-index:10;background-color:#ffffff1a}.dialog-header .close-button:hover{color:#e0d5d5}.field-label{color:#bdc1c3cc!important;margin-right:6px}.open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}.open-link:hover{color:#2180c9!important;text-decoration:underline!important}.field-value{color:#fff!important;font-weight:300}.add-layer-section{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}.dmp-item-list .dmp-item-container{display:flex;align-items:center;width:100%;gap:12px;min-width:0}.dmp-item-list .dmp-item-container .dmp-item-left{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer;flex-shrink:0}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon:hover{color:#d3d3d3}.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title{flex:1;min-width:0;overflow:hidden}.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title .title-text{color:#fff;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title .title-text{font-size:11px}}.dmp-item-list .dmp-item-container .dmp-item-center{display:flex;align-items:center;gap:8px;flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-center .zoom-off{color:#ef4444;font-size:16px;width:16px;height:16px}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center .zoom-off{font-size:14px;width:14px;height:14px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon{flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on{color:#6ccb78;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on:hover{color:#45a049}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off:hover{color:#d3d3d3}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-fail{color:#bdc1c3cc;font-size:18px;width:18px;height:18px}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-fail{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-slider{display:flex;align-items:center;flex-shrink:0}@media (max-width: 767px){.dmp-item-list .dmp-item-slider{width:100%;margin-top:4px;margin-bottom:4px}}.dmp-item-list .dmp-item-slider input[type=range]{width:60px;height:4px;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-slider input[type=range]{width:100%}}.dmp-item-list .dmp-item-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}.dmp-item-list .dmp-item-slider input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}.dmp-item-list .dmp-item-slider input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}.dmp-item-list .dmp-item-slider input[type=range]::-moz-range-thumb:hover{background:#6ccb78}.dmp-item-list ::ng-deep .dmp-item{cursor:move;width:100%;display:flex;flex-direction:column}@media (min-width: 768px){.dmp-item-list ::ng-deep .dmp-item{flex-direction:row;align-items:center}.dmp-item-list ::ng-deep .dmp-item .dmp-item-container{flex:1}.dmp-item-list ::ng-deep .dmp-item .dmp-item-slider{flex-shrink:0}}::ng-deep .dmp-item-list mat-expansion-panel{box-shadow:none!important}.group-header{display:flex;color:#fff;padding:8px 14px;font-weight:600;background:#ffffff08}.group-header mat-icon{margin-left:10px;cursor:pointer;color:#bdc1c3cc;transition:color .2s ease}.group-header mat-icon:hover{color:#6ccb78}.layer-selector-body-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:1000;max-width:calc(100vw - 8em);display:flex;flex-direction:column;transition:width .3s ease,max-width .3s ease;border-top-left-radius:5px;border-top-right-radius:5px;box-shadow:0 2px 10px #0000001a;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.layer-selector-body-wrapper.cdk-drag-dragging{opacity:.8;cursor:move;z-index:1001}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons{justify-content:space-between}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons .icon-left{order:1;margin-right:auto}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons .toggle-icon{order:3}.layer-selector-body-wrapper.collapsed .layer-selector-body{display:none}.layer-selector-body-wrapper.collapsed .drag-handle-selector{width:100%;min-width:100%;box-sizing:border-box;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content{width:100%}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons{width:100%;justify-content:space-between;gap:6px}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon{font-size:18px!important;flex-shrink:0}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.icon-left{cursor:default!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.toggle-icon{cursor:pointer!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.toggle-icon:hover{color:#d3d3d3!important}@media (max-width: 767px){.layer-selector-body-wrapper{max-width:calc(100vw - 7em);left:.5em}.layer-selector-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}@media (min-width: 768px) and (max-width: 1024px){.layer-selector-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}.drag-handle-selector{display:flex;justify-content:flex-end;border-radius:5px 5px 0 0;padding:0 2px;cursor:move}.drag-handle-content,.drag-handle-icons{display:flex;align-items:center;width:100%}.drag-handle-icons mat-icon{font-size:18px;transition:all .2s ease;display:flex;align-items:center;justify-content:center;flex-shrink:0}.icon-left{cursor:default!important}.toggle-icon{cursor:pointer!important}.toggle-icon:hover{color:#d3d3d3!important}::ng-deep .layer-selector-body{position:relative;left:auto;right:auto;bottom:auto;z-index:auto;width:100%;max-width:100%;max-height:317px;min-height:120px;overflow-y:auto;border-radius:0 0 5px 5px!important}::ng-deep .layer-selector-body .mat-expansion-panel-header-title{gap:6px}::ng-deep .layer-selector-body::-webkit-scrollbar{width:12px}::ng-deep .layer-selector-body::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .layer-selector-body::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .layer-selector-body::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .layer-selector-body::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .layer-selector-body::-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 .layer-selector-body::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .layer-selector-body::-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 .layer-selector-body::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}@media (max-width: 767px){::ng-deep .layer-selector-body{width:100%;max-height:70vh;min-height:140px}}@media (min-width: 768px) and (max-width: 1024px){::ng-deep .layer-selector-body{width:100%;max-width:445px;max-height:76vh;min-height:110px}}::ng-deep .layer-selector-body .search-section{display:flex;padding:12px 12px 8px;justify-content:center;align-items:center;gap:8px}@media (max-width: 767px){::ng-deep .layer-selector-body .search-section{padding:8px 8px 4px;gap:4px}}::ng-deep .layer-selector-body .search-section .search-field-wrapper{flex:1;display:flex;flex-direction:column}::ng-deep .layer-selector-body .search-section .search-label{color:#fff}::ng-deep .layer-selector-body .search-section mat-form-field{flex:1}::ng-deep .layer-selector-body .search-section mat-form-field .search-icon{color:#fff}::ng-deep .layer-selector-body .search-section mat-form-field ::ng-deep .mat-mdc-form-field-focus-overlay{background-color:transparent}::ng-deep .layer-selector-body .search-section>mat-icon{color:#fff;cursor:pointer;margin-top:0;transition:color .2s ease}::ng-deep .layer-selector-body .search-section>mat-icon:hover{color:#d3d3d3}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list{padding:4px;max-height:calc(60vh - 80px)}}@media (min-width: 768px) and (max-width: 1024px){::ng-deep .layer-selector-body .item-list{max-height:calc(77vh - 78px)}}::ng-deep .layer-selector-body .item-list .group{overflow:hidden;box-shadow:none}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel{background:transparent!important;box-shadow:none!important;margin-bottom:4px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header{padding:0 16px;height:40px!important}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title{display:flex;align-items:center;gap:6px;font-weight:600!important;color:#bdc1c3cc!important;transition:color .2s ease;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title{gap:4px;font-size:11px}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon{color:#bdc1c3cc;font-size:16px;width:16px;height:16px;transition:all .2s ease}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-on{color:#6ccb78;cursor:pointer}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-on:hover{color:#45a049}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-off{cursor:pointer;color:#bdc1c3cc;font-size:24px;height:24px;width:24px}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-off:hover{color:#d3d3d3}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-fail{color:#bdc1c3cc}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-content{background:#0003}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:2px 0 2px 12px}}::ng-deep .layer-selector-body .item-list .group .item-list{padding:0}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel{background:transparent!important;box-shadow:none!important;margin-bottom:2px}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel .mat-expansion-panel-content{background:#00000026}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:8px 16px 12px 32px}::ng-deep .layer-selector-body .item-list .group .item-list .layer-description{font-size:12px;color:#fffc;line-height:1.5;margin-bottom:8px;margin-left:28px}::ng-deep .layer-selector-body .item-list .group .item{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:8px;background:transparent;transition:all .2s ease;color:#fff;cursor:pointer;font-size:13px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item{flex-wrap:wrap;gap:4px;font-size:11px}}::ng-deep .layer-selector-body .item-list .group .item:hover{background-color:transparent}::ng-deep .layer-selector-body .item-list .group .item .item-left{display:flex;align-items:center;gap:4px;flex:1;min-width:0}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left{flex:1;min-width:0}}::ng-deep .layer-selector-body .item-list .group .item .item-left .drag-indicator{color:#ffffff80;font-size:16px;width:16px;height:16px;cursor:move;flex-shrink:0}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left .drag-indicator{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info{cursor:pointer;color:#e0e0de;font-size:16px;width:16px;height:16px;flex-shrink:0;transition:all .2s ease}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info:hover{color:#ccb913}::ng-deep .layer-selector-body .item-list .group .item .item-left span{flex:1;font-size:13px;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;white-space:normal;color:#fff;font-weight:400}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left span{font-size:11px}}::ng-deep .layer-selector-body .item-list .group .item .item-center{display:flex;align-items:center;gap:4px;flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-center .zoom-off{color:#ef4444;font-size:16px;width:16px;height:16px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-center .zoom-off{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-right{display:flex;align-items:center;gap:8px;flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon{flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on{color:#6ccb78;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on:hover{color:#45a049}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off:hover{color:#d3d3d3}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-fail{color:#bdc1c3cc;font-size:18px;width:18px;height:18px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-fail{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-slider{display:flex;align-items:center;flex-shrink:0}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-slider{flex-basis:100%;width:100%;margin-bottom:4px}}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]{width:60px;height:4px;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]{width:100%}}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]::-moz-range-thumb:hover{background:#6ccb78}::ng-deep .layer-selector-body-wrapper .result-title{color:#fff}::ng-deep .layer-selector-body-wrapper .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none!important}::ng-deep .layer-selector-body-wrapper .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .mat-expansion-panel-header.mat-expanded:hover{background:inherit!important}::ng-deep .layer-selector-body-wrapper .show-layer-highlight{font-size:18px;height:18px;width:18px}::ng-deep .layer-selector-body-wrapper .dmp-item{cursor:move;width:100%}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel-header.mat-expanded:hover,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel-header.mat-expanded:hover{background:#ffffff26!important}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel:not([class*=mat-elevation-z]),::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none!important}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-indicator:after,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-indicator:after{color:#fff!important;border-color:#fff!important}::ng-deep .layer-selector-body-wrapper mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding-left:0!important;padding-right:0!important;box-sizing:border-box}@media (max-width: 767px){::ng-deep .layer-selector-body-wrapper mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding-left:12px!important;padding-right:12px!important}}.cdk-drag-preview{box-sizing:border-box;border-radius:5px;box-shadow:0 5px 15px #00000026;background:#4c4d51;padding:8px 12px;color:#fff;display:flex;align-items:center;gap:8px}.cdk-drag-preview mat-icon{color:#fff}.cdk-drag-animating,.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .cdk-drag{transform:translateZ(0)!important}.power-on{color:#6ccb78!important;font-size:24px;width:24px;height:24px}.power-off{cursor:pointer;color:#bdc1c3cc!important}.power-fail{color:#bdc1c3cc!important}.add-option{color:#6ccb78!important}.add-option:hover{color:#37923a!important}::ng-deep .lightbulb{color:#dfca0e;width:18px;height:18px;font-size:18px}::ng-deep .arrow-up-layer{color:#fff;width:18px;height:18px;font-size:18px}::ng-deep .mdc-text-field--outlined{overflow:hidden!important}::ng-deep .drag-indicator{cursor:move!important}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { 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: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { 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.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { 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: DragDropModule }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { 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: "directive", type: i5.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { 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: "directive", type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1$4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
|
|
1286
1284
|
}
|
|
1287
1285
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LayerSelectorComponent, decorators: [{
|
|
1288
1286
|
type: Component,
|
|
1289
1287
|
args: [{ selector: 'lib-layer-selector', imports: [MatFormFieldModule, CommonModule, MatIconModule, FormsModule, DragDropModule,
|
|
1290
|
-
MatExpansionModule, MatInputModule, MatTooltipModule, MatOptionModule, MatDialogModule, MatDialogContent, MatDialogActions], template: "<div\n #layerSelectorBody\n class=\"layer-selector-body-wrapper global-wrapper-container\"\n cdkDrag\n cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"layerSelectorDragPosition\"\n (cdkDragEnded)=\"onLayerSelectorDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n\n <div class=\"drag-handle-selector\" cdkDragHandle>\n <div class=\"drag-handle-content\">\n <div class=\"drag-handle-icons\">\n <mat-icon \n class=\"icon-left\" \n matTooltip=\"Lag\" \n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n layers\n </mat-icon>\n <mat-icon class=\"toggle-icon\" (click)=\"toggleLayerSelector()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n </div>\n\n <div class=\"ol-unselectable ol-control layer-selector-body\" *ngIf=\"!collapsed\">\n <div class=\"search-section\">\n <div class=\"search-field-wrapper\">\n <label class=\"search-label\">Filtrer</label>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"searchText\" \n (ngModelChange)=\"filterChanged()\"\n />\n </mat-form-field>\n </div>\n <mat-icon matTooltip=\"Nulstil\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" (click)=\"clearSearchText()\">\n replay</mat-icon>\n </div>\n <div\n cdkDropList\n [cdkDropListData]=\"filteredLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event, filteredLayerGroups)\"\n class=\"item-list\">\n @for (group of filteredLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"drag-indicator\" cdkDragHandle>drag_indicator</mat-icon>\n <span class=\"panel-title\">{{ group.name }}</span>\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon> \n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"!layer.description\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"item\" cdkDrag>\n <div class=\"item-left\">\n <mat-icon class=\"drag-indicator\" cdkDragHandle>drag_indicator</mat-icon>\n <span>{{ layer.name }}</span> \n <mat-icon></mat-icon>\n </div>\n <div class=\"item-center\">\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">browser_not_supported\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n\n }\n </div>\n <div class=\"item-right\">\n @if(layer.infoUrl) {\n <mat-icon \n class=\"layer-info\"\n matTooltip=\"Yderligere laginfo\"\n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n (click)=\"openUrl(layer.infoUrl)\"\n matTooltipPosition=\"above\"\n >info</mat-icon>\n }\n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.id, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.name }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"layer-description\">{{ layer.description }}</div>\n @if (showLegend) {\n <img [src]=\"legendUrl\" class=\"legend-thumbnail\"/>\n }\n </mat-expansion-panel>\n }\n </div>\n </mat-expansion-panel>\n <div *cdkDragPreview><span class=\"panel-title\">{{ group.name }} </span></div>\n </div>\n }\n </div>\n <div class=\"group-header\">Mine Temaer\n <mat-icon (click)=\"toggleDmpSearch(true)\"\n class=\"power-on\"\n matTooltip=\"S\u00F8g\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">add\n </mat-icon>\n </div>\n @if (filteredDmpLayers.length > 0) {\n <div class=\"dmp-item-list\" cdkDropList\n [cdkDropListData]=\"filteredDmpLayers\"\n (cdkDropListDropped)=\"dropDmpLayer($event)\">\n @for (layer of filteredDmpLayers; track layer.datasetId; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"true\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"dmp-item\" cdkDrag>\n <div class=\"dmp-item-container\">\n <div class=\"dmp-item-left\">\n <mat-icon (click)=\"deleteDmpLayer(layer, $event)\" class=\"delete-icon\" \n matTooltip=\"Slet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">delete\n </mat-icon>\n <div class=\"dmp-item-title\">\n <span class=\"title-text\">{{ layer.title }}</span>\n </div>\n </div>\n \n <div class=\"dmp-item-center\">\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n }\n \n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.datasetId, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.datasetId, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n </div>\n <div class=\"dmp-item-right\">\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.datasetId, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.title }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n </mat-expansion-panel>\n }\n </div>\n }\n <div *ngIf=\"filteredBackgroundLayerGroups && filteredBackgroundLayerGroups.length > 0\" class=\"group-header\">Baggrundskort</div>\n <div\n cdkDropList\n [cdkDropListData]=\"filteredBackgroundLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event, filteredBackgroundLayerGroups)\"\n class=\"item-list\">\n @for (group of filteredBackgroundLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n @if (group.expanded) {\n <mat-icon class=\"arrow-up-layer\">arrow_upward</mat-icon>\n }\n @if (!group.expanded) {\n <mat-icon>arrow_downward</mat-icon> \n }\n {{ group.name }}\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon> \n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"!layer.description\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"item\" cdkDrag>\n <div class=\"item-left\">\n <mat-icon class=\"drag-indicator\">drag_indicator</mat-icon>\n <span>{{ layer.name }}</span>\n </div>\n <div class=\"item-center\">\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">browser_not_supported\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n }\n </div>\n <div class=\"item-right\">\n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.id, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.name }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"layer-description\">{{ layer.description }}</div>\n @if (showLegend) {\n <img [src]=\"legendUrl\" class=\"legend-thumbnail\"/>\n }\n </mat-expansion-panel>\n }\n </div>\n </mat-expansion-panel>\n <div *cdkDragPreview><span class=\"panel-title\">{{ group.name }} </span></div>\n </div>\n }\n </div>\n </div>\n <ng-template #dmpDialog>\n @if (dmpSearchMode) {\n <mat-dialog-content>\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <div class=\"search-field-wrapper\">\n <label class=\"search-label\">S\u00F8g</label>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"dmpSearchText\" \n (ngModelChange)=\"searchDmp()\"\n />\n </mat-form-field>\n </div>\n <mat-icon (click)=\"clearDmpSearchText()\" \n matTooltip=\"Nulstil\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\"\n class=\"undo-icon\" >undo\n </mat-icon>\n </div>\n <mat-icon \n class=\"close-button\" \n (click)=\"toggleDmpSearch(false)\"\n matTooltip=\"Luk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"left\">\n close\n </mat-icon>\n </div>\n </mat-dialog-content>\n }\n\n @if (dmpLayerResults.length > 0) {\n <div class=\"dmp-search-panel global-wrapper-container\">\n <div *ngFor=\"let result of dmpLayerResults\" [attr.data-value]=\"result\" class=\"search-result-option\">\n <mat-expansion-panel expanded=\"false\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <span class=\"result-title\">{{ result.title }}</span>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div><span class=\"field-label\">Status:</span><span class=\"field-value\"> {{ result.availability }}</span></div>\n <div><span class=\"field-label\">Kategori:</span><span class=\"field-value\"> {{ result.category }}</span></div>\n <div><span class=\"field-label\">Beskrivelse:</span><span class=\"field-value\"> {{ result.description }}</span></div>\n <div><span class=\"field-label\">Tags:</span><span class=\"field-value\"> {{ result.tags?.join(', ') }}</span></div>\n <div *ngIf=\"result.metaDataUrl\">\n <span class=\"field-label\">Metadata:</span>\n <a [href]=\"result.metaDataUrl\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n Vis metadata\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div *ngIf=\"result.license && result.license.url\">\n <span class=\"field-label\">Licens:</span>\n <a [href]=\"result.license.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n {{ result.license.title }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div *ngIf=\"result.dataLiabilityAgreement && result.dataLiabilityAgreement.url\">\n <span class=\"field-label\">Dataansvarsaftale:</span>\n <a [href]=\"result.dataLiabilityAgreement.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n {{ result.dataLiabilityAgreement.title }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div class=\"add-layer-section\">\n <span class=\"field-label\">Tilf\u00F8j {{ result.serviceType }}:</span>\n <mat-icon (click)=\"addDmpLayer(result)\" class=\"add-option\"\n matTooltip=\"Tilf\u00F8j\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">add\n </mat-icon>\n </div>\n </mat-expansion-panel>\n </div>\n </div>}\n </ng-template>\n</div>", styles: [".layer-info{cursor:pointer}.legend-thumbnail{max-width:200px;max-height:200px;width:auto;height:auto;border:2px solid #dee2e6;padding:6px}::ng-deep .dmp-dialog-content mat-dialog-content .search-section{display:flex;align-items:center;gap:6px}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .undo-icon{color:#fff!important;cursor:pointer;flex-shrink:0}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .undo-icon:hover{color:#d3d3d3!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .search-field-wrapper{flex:1;display:flex;flex-direction:column}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .search-label{color:#fff}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field{flex:1}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .search-icon{color:#fff}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.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 .dmp-dialog-content mat-dialog-actions{display:none}::ng-deep .dmp-dialog-content .search-result-option{padding:0!important}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel{box-shadow:none!important;margin-bottom:2px;border-radius:0!important;background:transparent!important;color:#fff}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content{background:#0003}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:12px 16px!important}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:10px 12px!important}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{margin-bottom:10px;display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div:last-child{margin-bottom:0}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{font-size:11px;gap:6px}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{color:#bdc1c3cc!important;min-width:90px;font-weight:500;flex-shrink:0;font-size:13px}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{min-width:80px}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-value{color:#fff!important;font-weight:300;flex:1;word-break:break-word;font-size:13px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link:hover{color:#2180c9!important;text-decoration:underline!important}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link .link-icon{font-size:14px;width:14px;height:14px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section{display:flex;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .field-label{min-width:90px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option{color:#6ccb78!important;cursor:pointer;font-size:20px;width:20px;height:20px;transition:all .2s ease}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option:hover{color:#45a049!important;transform:scale(1.1)}.dmp-search-panel{overflow-y:scroll;max-height:300px}.dmp-search-panel::-webkit-scrollbar{width:12px}.dmp-search-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}.dmp-search-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.dmp-search-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}.dmp-search-panel::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}.dmp-search-panel::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}.dmp-search-panel::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}.dmp-search-panel::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}.dmp-search-panel::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}.dmp-search-panel .search-result-option{padding:0!important;margin-bottom:2px}.dmp-search-panel .search-result-option mat-expansion-panel{box-shadow:none!important;margin:0;border-radius:0!important;background:transparent!important}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content{background:#0003}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:12px 16px!important}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:10px 12px!important}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{margin-bottom:10px;display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div:last-child{margin-bottom:0}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{font-size:11px;gap:6px}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{color:#bdc1c3cc!important;min-width:90px;font-weight:500;flex-shrink:0;font-size:13px}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{min-width:80px}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-value{color:#fff!important;font-weight:300;flex:1;word-break:break-word;font-size:13px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link:hover{color:#2180c9!important;text-decoration:underline!important}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link .link-icon{font-size:14px;width:14px;height:14px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section{display:flex;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .field-label{min-width:90px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option{color:#6ccb78!important;cursor:pointer;font-size:20px;width:20px;height:20px;transition:all .2s ease}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option:hover{color:#45a049!important;transform:scale(1.1)}.dmp-search-panel .search-result-option:first-child mat-expansion-panel .mat-expansion-panel-header{border-top-left-radius:4px!important;border-top-right-radius:4px!important}.dmp-search-panel .search-result-option:last-child mat-expansion-panel .mat-expansion-panel-header.mat-expanded{border-radius:0!important}.dmp-search-panel .search-result-option:last-child mat-expansion-panel .mat-expansion-panel-content{border-bottom-left-radius:4px!important;border-bottom-right-radius:4px!important}.dialog-header{position:relative}.dialog-header .close-button{position:absolute;top:-9px;right:-14px;color:#fff;cursor:pointer;border-radius:50%;transition:all .2s ease;font-size:18px;width:24px;height:24px;display:flex;justify-content:center;align-items:center;z-index:10;background-color:#ffffff1a}.dialog-header .close-button:hover{color:#e0d5d5}.field-label{color:#bdc1c3cc!important;margin-right:6px}.open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}.open-link:hover{color:#2180c9!important;text-decoration:underline!important}.field-value{color:#fff!important;font-weight:300}.add-layer-section{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}.dmp-item-list .dmp-item-container{display:flex;align-items:center;width:100%;gap:12px;min-width:0}.dmp-item-list .dmp-item-container .dmp-item-left{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer;flex-shrink:0}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon:hover{color:#d3d3d3}.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title{flex:1;min-width:0;overflow:hidden}.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title .title-text{color:#fff;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title .title-text{font-size:11px}}.dmp-item-list .dmp-item-container .dmp-item-center{display:flex;align-items:center;gap:8px;flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-center .zoom-off{color:#ef4444;font-size:16px;width:16px;height:16px}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center .zoom-off{font-size:14px;width:14px;height:14px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon{flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on{color:#6ccb78;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on:hover{color:#45a049}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off:hover{color:#d3d3d3}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-fail{color:#bdc1c3cc;font-size:18px;width:18px;height:18px}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-fail{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-right{display:flex;align-items:center;flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]{width:60px;height:4px;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none;cursor:pointer}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}.dmp-item-list .dmp-item-container .dmp-item-right input[type=range]::-moz-range-thumb:hover{background:#6ccb78}::ng-deep .dmp-item-list mat-expansion-panel{box-shadow:none!important}.group-header{display:flex;color:#fff;padding:8px 14px;font-weight:600;background:#ffffff08}.group-header mat-icon{margin-left:10px;cursor:pointer;color:#bdc1c3cc;transition:color .2s ease}.group-header mat-icon:hover{color:#6ccb78}.layer-selector-body-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:1000;max-width:calc(100vw - 8em);display:flex;flex-direction:column;transition:width .3s ease,max-width .3s ease;border-top-left-radius:5px;border-top-right-radius:5px;box-shadow:0 2px 10px #0000001a;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.layer-selector-body-wrapper.cdk-drag-dragging{opacity:.8;cursor:move;z-index:1001}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons{justify-content:space-between}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons .icon-left{order:1;margin-right:auto}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons .toggle-icon{order:3}.layer-selector-body-wrapper.collapsed .layer-selector-body{display:none}.layer-selector-body-wrapper.collapsed .drag-handle-selector{width:100%;min-width:100%;box-sizing:border-box;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content{width:100%}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons{width:100%;justify-content:space-between;gap:6px}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon{font-size:18px!important;flex-shrink:0}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.icon-left{cursor:default!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.toggle-icon{cursor:pointer!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.toggle-icon:hover{color:#d3d3d3!important}@media (max-width: 767px){.layer-selector-body-wrapper{max-width:calc(100vw - 7em);left:.5em}.layer-selector-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}@media (min-width: 768px) and (max-width: 1024px){.layer-selector-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}.drag-handle-selector{display:flex;justify-content:flex-end;border-radius:5px 5px 0 0;padding:0 2px;cursor:move}.drag-handle-content,.drag-handle-icons{display:flex;align-items:center;width:100%}.drag-handle-icons mat-icon{font-size:18px;transition:all .2s ease;display:flex;align-items:center;justify-content:center;flex-shrink:0}.icon-left{cursor:default!important}.toggle-icon{cursor:pointer!important}.toggle-icon:hover{color:#d3d3d3!important}::ng-deep .layer-selector-body{position:relative;left:auto;right:auto;bottom:auto;z-index:auto;width:100%;max-width:100%;max-height:317px;min-height:120px;overflow-y:auto;border-radius:0 0 5px 5px!important}::ng-deep .layer-selector-body .mat-expansion-panel-header-title{gap:6px}::ng-deep .layer-selector-body::-webkit-scrollbar{width:12px}::ng-deep .layer-selector-body::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .layer-selector-body::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .layer-selector-body::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .layer-selector-body::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .layer-selector-body::-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 .layer-selector-body::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .layer-selector-body::-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 .layer-selector-body::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}@media (max-width: 767px){::ng-deep .layer-selector-body{width:100%;max-height:70vh;min-height:140px}}@media (min-width: 768px) and (max-width: 1024px){::ng-deep .layer-selector-body{width:100%;max-width:445px;max-height:76vh;min-height:110px}}::ng-deep .layer-selector-body .search-section{display:flex;padding:12px 12px 8px;justify-content:center;align-items:center;gap:8px}@media (max-width: 767px){::ng-deep .layer-selector-body .search-section{padding:8px 8px 4px;gap:4px}}::ng-deep .layer-selector-body .search-section .search-field-wrapper{flex:1;display:flex;flex-direction:column}::ng-deep .layer-selector-body .search-section .search-label{color:#fff}::ng-deep .layer-selector-body .search-section mat-form-field{flex:1}::ng-deep .layer-selector-body .search-section mat-form-field .search-icon{color:#fff}::ng-deep .layer-selector-body .search-section mat-form-field ::ng-deep .mat-mdc-form-field-focus-overlay{background-color:transparent}::ng-deep .layer-selector-body .search-section>mat-icon{color:#fff;cursor:pointer;margin-top:0;transition:color .2s ease}::ng-deep .layer-selector-body .search-section>mat-icon:hover{color:#d3d3d3}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list{padding:4px;max-height:calc(60vh - 80px)}}@media (min-width: 768px) and (max-width: 1024px){::ng-deep .layer-selector-body .item-list{max-height:calc(77vh - 78px)}}::ng-deep .layer-selector-body .item-list .group{overflow:hidden;box-shadow:none}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel{background:transparent!important;box-shadow:none!important;margin-bottom:4px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header{padding:0 16px;height:40px!important}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title{display:flex;align-items:center;gap:6px;font-weight:600!important;color:#bdc1c3cc!important;transition:color .2s ease;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title{gap:4px;font-size:11px}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon{color:#bdc1c3cc;font-size:16px;width:16px;height:16px;transition:all .2s ease}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-on{color:#6ccb78;cursor:pointer}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-on:hover{color:#45a049}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-off{cursor:pointer;color:#bdc1c3cc}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-off:hover{color:#d3d3d3}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-fail{color:#bdc1c3cc}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-content{background:#0003}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:2px 0 2px 12px}}::ng-deep .layer-selector-body .item-list .group .item-list{padding:0}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel{background:transparent!important;box-shadow:none!important;margin-bottom:2px}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel .mat-expansion-panel-content{background:#00000026}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:8px 16px 12px 32px}::ng-deep .layer-selector-body .item-list .group .item-list .layer-description{font-size:12px;color:#fffc;line-height:1.5;margin-bottom:8px;margin-left:28px}::ng-deep .layer-selector-body .item-list .group .item{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:8px;background:transparent;transition:all .2s ease;color:#fff;cursor:pointer;font-size:13px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item{gap:4px;font-size:11px}}::ng-deep .layer-selector-body .item-list .group .item:hover{background-color:transparent}::ng-deep .layer-selector-body .item-list .group .item .item-left{display:flex;align-items:center;gap:4px;flex:1;min-width:0}::ng-deep .layer-selector-body .item-list .group .item .item-left .drag-indicator{color:#ffffff80;font-size:16px;width:16px;height:16px;cursor:move;flex-shrink:0}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left .drag-indicator{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info{cursor:pointer;color:#e0e0de;font-size:16px;width:16px;height:16px;flex-shrink:0;transition:all .2s ease}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info:hover{color:#ccb913}::ng-deep .layer-selector-body .item-list .group .item .item-left span{flex:1;font-size:13px;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;white-space:normal;color:#fff;font-weight:400}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left span{font-size:11px}}::ng-deep .layer-selector-body .item-list .group .item .item-center{display:flex;align-items:center;gap:4px;flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-center .zoom-off{color:#ef4444;font-size:16px;width:16px;height:16px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-center .zoom-off{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-right{display:flex;align-items:center;gap:8px;flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon{flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on{color:#6ccb78;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on:hover{color:#45a049}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off:hover{color:#d3d3d3}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-fail{color:#bdc1c3cc;font-size:18px;width:18px;height:18px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-fail{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]{width:60px;height:4px;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none;cursor:pointer}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}::ng-deep .layer-selector-body .item-list .group .item .item-right input[type=range]::-moz-range-thumb:hover{background:#6ccb78}::ng-deep .layer-selector-body-wrapper .result-title{color:#fff}::ng-deep .layer-selector-body-wrapper .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none!important}::ng-deep .layer-selector-body-wrapper .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .mat-expansion-panel-header.mat-expanded:hover{background:inherit!important}::ng-deep .layer-selector-body-wrapper .show-layer-highlight{font-size:18px;height:18px;width:18px}::ng-deep .layer-selector-body-wrapper .dmp-item{cursor:move;width:100%}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel-header.mat-expanded:hover,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel-header.mat-expanded:hover{background:#ffffff26!important}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel:not([class*=mat-elevation-z]),::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none!important}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-indicator:after,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-indicator:after{color:#fff!important;border-color:#fff!important}::ng-deep .layer-selector-body-wrapper mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding-left:0!important;padding-right:0!important;box-sizing:border-box}@media (max-width: 767px){::ng-deep .layer-selector-body-wrapper mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding-left:12px!important;padding-right:12px!important}}.cdk-drag-preview{box-sizing:border-box;border-radius:5px;box-shadow:0 5px 15px #00000026;background:#4c4d51;padding:8px 12px;color:#fff;display:flex;align-items:center;gap:8px}.cdk-drag-preview mat-icon{color:#fff}.cdk-drag-animating,.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .cdk-drag{transform:translateZ(0)!important}.power-on{color:#6ccb78!important;font-size:18px;width:18px;height:18px}.power-off{cursor:pointer;color:#bdc1c3cc!important}.power-fail{color:#bdc1c3cc!important}.add-option{color:#6ccb78!important}.add-option:hover{color:#37923a!important}::ng-deep .lightbulb{color:#dfca0e;width:18px;height:18px;font-size:18px}::ng-deep .arrow-up-layer{color:#fff;width:18px;height:18px;font-size:18px}::ng-deep .mdc-text-field--outlined{overflow:hidden!important}::ng-deep .drag-indicator{cursor:move!important}\n"] }]
|
|
1288
|
+
MatExpansionModule, MatInputModule, MatTooltipModule, MatOptionModule, MatDialogModule, MatDialogContent, MatDialogActions], template: "<div\n #layerSelectorBody\n class=\"layer-selector-body-wrapper global-wrapper-container\"\n cdkDrag\n cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"layerSelectorDragPosition\"\n (cdkDragEnded)=\"onLayerSelectorDragEnded($event)\"\n [class.collapsed]=\"collapsed\">\n\n <div class=\"drag-handle-selector\" cdkDragHandle>\n <div class=\"drag-handle-content\">\n <div class=\"drag-handle-icons\">\n <mat-icon \n class=\"icon-left\" \n matTooltip=\"Lag\" \n [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" \n matTooltipPosition=\"above\">\n layers\n </mat-icon>\n <mat-icon class=\"toggle-icon\" (click)=\"toggleLayerSelector()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n </div>\n\n <div class=\"ol-unselectable ol-control layer-selector-body\" *ngIf=\"!collapsed\">\n <div class=\"search-section\">\n <div class=\"search-field-wrapper\">\n <label class=\"search-label\">Filtrer</label>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"searchText\" \n (ngModelChange)=\"filterChanged()\"\n />\n </mat-form-field>\n </div>\n <mat-icon matTooltip=\"Nulstil\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" (click)=\"clearSearchText()\">\n replay</mat-icon>\n </div>\n <div\n cdkDropList\n [cdkDropListData]=\"filteredLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event, filteredLayerGroups)\"\n class=\"item-list\">\n @for (group of filteredLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"drag-indicator\" cdkDragHandle>drag_indicator</mat-icon>\n <span class=\"panel-title\">{{ group.name }}</span>\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon> \n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"!layer.description\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"item\" cdkDrag>\n <div class=\"item-left\">\n <mat-icon class=\"drag-indicator\" cdkDragHandle>drag_indicator</mat-icon>\n <span>{{ layer.name }}</span> \n <mat-icon></mat-icon>\n </div>\n <div class=\"item-center\">\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Lag vises ikke pga zoom niveau\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">browser_not_supported\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n\n }\n </div>\n <div class=\"item-right\">\n @if(layer.infoUrl) {\n <mat-icon \n class=\"layer-info\"\n matTooltip=\"Yderligere laginfo\"\n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n (click)=\"openUrl(layer.infoUrl)\"\n matTooltipPosition=\"above\"\n >info</mat-icon>\n }\n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n </div>\n <div class=\"item-slider\">\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.id, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.name }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"layer-description\">{{ layer.description }}</div>\n @if (showLegend) {\n <img [src]=\"legendUrl\" class=\"legend-thumbnail\"/>\n }\n </mat-expansion-panel>\n }\n </div>\n </mat-expansion-panel>\n <div *cdkDragPreview><span class=\"panel-title\">{{ group.name }} </span></div>\n </div>\n }\n </div>\n <div class=\"group-header\">Mine Temaer\n <mat-icon (click)=\"toggleDmpSearch(true)\"\n class=\"power-on\"\n matTooltip=\"S\u00F8g\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">add\n </mat-icon>\n </div>\n @if (filteredDmpLayers.length > 0) {\n <div class=\"dmp-item-list\" cdkDropList\n [cdkDropListData]=\"filteredDmpLayers\"\n (cdkDropListDropped)=\"dropDmpLayer($event)\">\n @for (layer of filteredDmpLayers; track layer.datasetId; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"true\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"dmp-item\" cdkDrag>\n <div class=\"dmp-item-container\">\n <div class=\"dmp-item-left\">\n <mat-icon (click)=\"deleteDmpLayer(layer, $event)\" class=\"delete-icon\" \n matTooltip=\"Slet\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">delete\n </mat-icon>\n <div class=\"dmp-item-title\">\n <span class=\"title-text\">{{ layer.title }}</span>\n </div>\n </div>\n \n <div class=\"dmp-item-center\">\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n }\n \n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.datasetId, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.datasetId, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n </div>\n </div>\n <div class=\"dmp-item-slider\">\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.datasetId, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.title }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n </mat-expansion-panel>\n }\n </div>\n }\n <div *ngIf=\"filteredBackgroundLayerGroups && filteredBackgroundLayerGroups.length > 0\" class=\"group-header\">Baggrundskort</div>\n <div\n cdkDropList\n [cdkDropListData]=\"filteredBackgroundLayerGroups\"\n (cdkDropListDropped)=\"dropGroup($event, filteredBackgroundLayerGroups)\"\n class=\"item-list\">\n @for (group of filteredBackgroundLayerGroups; track group.id; let gIndex = $index) {\n <div class=\"group\" cdkDrag>\n <mat-expansion-panel [(expanded)]=\"group.expanded\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n @if (group.expanded) {\n <mat-icon class=\"arrow-up-layer\">arrow_upward</mat-icon>\n }\n @if (!group.expanded) {\n <mat-icon>arrow_downward</mat-icon> \n }\n {{ group.name }}\n ({{ group.noOfVisibleLayers }}/{{ group.layers.length }})\n @if (group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon> \n }\n @if (!group.visible) {\n <mat-icon (click)=\"toggleGroup($event, group)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div\n cdkDropList\n [cdkDropListData]=\"group.layers\"\n (cdkDropListDropped)=\"dropLayer($event, group)\"\n class=\"item-list\">\n @for (layer of group.layers; track layer.id; let iIndex = $index) {\n <mat-expansion-panel expanded=\"false\" [disabled]=\"!layer.description\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"item\" cdkDrag>\n <div class=\"item-left\">\n <mat-icon class=\"drag-indicator\">drag_indicator</mat-icon>\n <span>{{ layer.name }}</span>\n </div>\n <div class=\"item-center\">\n @if (layer.maxZoom < currentZoomLevel || layer.minZoom > currentZoomLevel) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Zoom\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">browser_not_supported\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"zoom-off\" \n matTooltip=\"Fejl\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">priority_high\n </mat-icon>\n }\n </div>\n <div class=\"item-right\">\n @if (!layer.hasErrors && layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-on\" \n matTooltip=\"Sluk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (!layer.hasErrors && !layer.visible) {\n <mat-icon (click)=\"toggleLayer(layer.id, $event)\" class=\"power-off\"\n matTooltip=\"T\u00E6nd\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">power_settings_new\n </mat-icon>\n }\n @if (layer.hasErrors) {\n <mat-icon class=\"power-fail\">power_settings_new\n </mat-icon>\n }\n <input \n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n [(ngModel)]=\"layer.opacity\"\n (click)=\"stopDrag($event)\"\n (input)=\"updateOpacity(layer.id, layer.opacity)\"\n (mousedown)=\"stopDrag($event)\"\n (touchstart)=\"stopDrag($event)\"\n (pointerdown)=\"stopDrag($event)\"\n >\n </div>\n <div *cdkDragPreview><span class=\"panel-title\">{{ layer.name }} </span></div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"layer-description\">{{ layer.description }}</div>\n @if (showLegend) {\n <img [src]=\"legendUrl\" class=\"legend-thumbnail\"/>\n }\n </mat-expansion-panel>\n }\n </div>\n </mat-expansion-panel>\n <div *cdkDragPreview><span class=\"panel-title\">{{ group.name }} </span></div>\n </div>\n }\n </div>\n </div>\n <ng-template #dmpDialog>\n @if (dmpSearchMode) {\n <mat-dialog-content>\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <div class=\"search-field-wrapper\">\n <label class=\"search-label\">S\u00F8g</label>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\n <input \n matInput \n type=\"text\" \n [(ngModel)]=\"dmpSearchText\" \n (ngModelChange)=\"searchDmp()\"\n />\n </mat-form-field>\n </div>\n <mat-icon (click)=\"clearDmpSearchText()\" \n matTooltip=\"Nulstil\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\"\n class=\"undo-icon\" >undo\n </mat-icon>\n </div>\n <mat-icon \n class=\"close-button\" \n (click)=\"toggleDmpSearch(false)\"\n matTooltip=\"Luk\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"left\">\n close\n </mat-icon>\n </div>\n </mat-dialog-content>\n }\n\n @if (dmpLayerResults.length > 0) {\n <div class=\"dmp-search-panel global-wrapper-container\">\n <div *ngFor=\"let result of dmpLayerResults\" [attr.data-value]=\"result\" class=\"search-result-option\">\n <mat-expansion-panel expanded=\"false\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n <span class=\"result-title\">{{ result.title }}</span>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div><span class=\"field-label\">Status:</span><span class=\"field-value\"> {{ result.availability }}</span></div>\n <div><span class=\"field-label\">Kategori:</span><span class=\"field-value\"> {{ result.category }}</span></div>\n <div><span class=\"field-label\">Beskrivelse:</span><span class=\"field-value\"> {{ result.description }}</span></div>\n <div><span class=\"field-label\">Tags:</span><span class=\"field-value\"> {{ result.tags?.join(', ') }}</span></div>\n <div *ngIf=\"result.metaDataUrl\">\n <span class=\"field-label\">Metadata:</span>\n <a [href]=\"result.metaDataUrl\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n Vis metadata\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div *ngIf=\"result.license && result.license.url\">\n <span class=\"field-label\">Licens:</span>\n <a [href]=\"result.license.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n {{ result.license.title }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div *ngIf=\"result.dataLiabilityAgreement && result.dataLiabilityAgreement.url\">\n <span class=\"field-label\">Dataansvarsaftale:</span>\n <a [href]=\"result.dataLiabilityAgreement.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"open-link\">\n {{ result.dataLiabilityAgreement.title }}\n <mat-icon class=\"link-icon\">open_in_new</mat-icon>\n </a>\n </div>\n <div class=\"add-layer-section\">\n <span class=\"field-label\">Tilf\u00F8j {{ result.serviceType }}:</span>\n <mat-icon (click)=\"addDmpLayer(result)\" class=\"add-option\"\n matTooltip=\"Tilf\u00F8j\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipPosition=\"above\">add\n </mat-icon>\n </div>\n </mat-expansion-panel>\n </div>\n </div>}\n </ng-template>\n</div>", styles: [".layer-info{cursor:pointer}.legend-thumbnail{max-width:200px;max-height:200px;width:auto;height:auto;border:2px solid #dee2e6;padding:6px}::ng-deep .dmp-dialog-content mat-dialog-content .search-section{display:flex;align-items:center;gap:6px}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .undo-icon{color:#fff!important;cursor:pointer;flex-shrink:0}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .undo-icon:hover{color:#d3d3d3!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .search-field-wrapper{flex:1;display:flex;flex-direction:column}::ng-deep .dmp-dialog-content mat-dialog-content .search-section .search-label{color:#fff}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field{flex:1}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .search-icon{color:#fff}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#dee2e6!important;border-width:1px!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.mat-focused ::ng-deep .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field.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 .dmp-dialog-content mat-dialog-actions{display:none}::ng-deep .dmp-dialog-content .search-result-option{padding:0!important}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel{box-shadow:none!important;margin-bottom:2px;border-radius:0!important;background:transparent!important;color:#fff}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content{background:#0003}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:12px 16px!important}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:10px 12px!important}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{margin-bottom:10px;display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div:last-child{margin-bottom:0}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{font-size:11px;gap:6px}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{color:#bdc1c3cc!important;min-width:90px;font-weight:500;flex-shrink:0;font-size:13px}@media (max-width: 767px){::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{min-width:80px}}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-value{color:#fff!important;font-weight:300;flex:1;word-break:break-word;font-size:13px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link:hover{color:#2180c9!important;text-decoration:underline!important}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link .link-icon{font-size:14px;width:14px;height:14px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section{display:flex;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .field-label{min-width:90px}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option{color:#6ccb78!important;cursor:pointer;font-size:20px;width:20px;height:20px;transition:all .2s ease}::ng-deep .dmp-dialog-content .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option:hover{color:#45a049!important;transform:scale(1.1)}.dmp-search-panel{overflow-y:scroll;max-height:300px}.dmp-search-panel::-webkit-scrollbar{width:12px}.dmp-search-panel::-webkit-scrollbar-track{background:#757474;border-radius:8px}.dmp-search-panel::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.dmp-search-panel::-webkit-scrollbar-thumb:hover{background:#0f1012}.dmp-search-panel::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}.dmp-search-panel::-webkit-scrollbar-button:vertical:decrement{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 4l-4 4h8z'/%3E%3C/svg%3E\") no-repeat center;border-radius:8px 8px 0 0}.dmp-search-panel::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}.dmp-search-panel::-webkit-scrollbar-button:vertical:increment{background:#2a2c30 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8l4-4H2z'/%3E%3C/svg%3E\") no-repeat center;border-radius:0 0 8px 8px}.dmp-search-panel::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}.dmp-search-panel .search-result-option{padding:0!important;margin-bottom:2px}.dmp-search-panel .search-result-option mat-expansion-panel{box-shadow:none!important;margin:0;border-radius:0!important;background:transparent!important}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content{background:#0003}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:12px 16px!important}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:10px 12px!important}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{margin-bottom:10px;display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.5}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div:last-child{margin-bottom:0}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div{font-size:11px;gap:6px}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{color:#bdc1c3cc!important;min-width:90px;font-weight:500;flex-shrink:0;font-size:13px}@media (max-width: 767px){.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-label{min-width:80px}}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .field-value{color:#fff!important;font-weight:300;flex:1;word-break:break-word;font-size:13px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link:hover{color:#2180c9!important;text-decoration:underline!important}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body>div .open-link .link-icon{font-size:14px;width:14px;height:14px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section{display:flex;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .field-label{min-width:90px}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option{color:#6ccb78!important;cursor:pointer;font-size:20px;width:20px;height:20px;transition:all .2s ease}.dmp-search-panel .search-result-option mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body .add-layer-section .add-option:hover{color:#45a049!important;transform:scale(1.1)}.dmp-search-panel .search-result-option:first-child mat-expansion-panel .mat-expansion-panel-header{border-top-left-radius:4px!important;border-top-right-radius:4px!important}.dmp-search-panel .search-result-option:last-child mat-expansion-panel .mat-expansion-panel-header.mat-expanded{border-radius:0!important}.dmp-search-panel .search-result-option:last-child mat-expansion-panel .mat-expansion-panel-content{border-bottom-left-radius:4px!important;border-bottom-right-radius:4px!important}.dialog-header{position:relative}.dialog-header .close-button{position:absolute;top:-9px;right:-14px;color:#fff;cursor:pointer;border-radius:50%;transition:all .2s ease;font-size:18px;width:24px;height:24px;display:flex;justify-content:center;align-items:center;z-index:10;background-color:#ffffff1a}.dialog-header .close-button:hover{color:#e0d5d5}.field-label{color:#bdc1c3cc!important;margin-right:6px}.open-link{color:#2e98eb!important;text-decoration:none!important;display:inline-flex;align-items:center;gap:4px}.open-link:hover{color:#2180c9!important;text-decoration:underline!important}.field-value{color:#fff!important;font-weight:300}.add-layer-section{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}.dmp-item-list .dmp-item-container{display:flex;align-items:center;width:100%;gap:12px;min-width:0}.dmp-item-list .dmp-item-container .dmp-item-left{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer;flex-shrink:0}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-left .delete-icon:hover{color:#d3d3d3}.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title{flex:1;min-width:0;overflow:hidden}.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title .title-text{color:#fff;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-left .dmp-item-title .title-text{font-size:11px}}.dmp-item-list .dmp-item-container .dmp-item-center{display:flex;align-items:center;gap:8px;flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-center .zoom-off{color:#ef4444;font-size:16px;width:16px;height:16px}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center .zoom-off{font-size:14px;width:14px;height:14px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon{flex-shrink:0}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on{color:#6ccb78;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-on:hover{color:#45a049}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-off:hover{color:#d3d3d3}.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-fail{color:#bdc1c3cc;font-size:18px;width:18px;height:18px}@media (max-width: 767px){.dmp-item-list .dmp-item-container .dmp-item-center mat-icon.power-fail{font-size:16px;width:16px;height:16px}}.dmp-item-list .dmp-item-slider{display:flex;align-items:center;flex-shrink:0}@media (max-width: 767px){.dmp-item-list .dmp-item-slider{width:100%;margin-top:4px;margin-bottom:4px}}.dmp-item-list .dmp-item-slider input[type=range]{width:60px;height:4px;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none;cursor:pointer}@media (max-width: 767px){.dmp-item-list .dmp-item-slider input[type=range]{width:100%}}.dmp-item-list .dmp-item-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}.dmp-item-list .dmp-item-slider input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}.dmp-item-list .dmp-item-slider input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}.dmp-item-list .dmp-item-slider input[type=range]::-moz-range-thumb:hover{background:#6ccb78}.dmp-item-list ::ng-deep .dmp-item{cursor:move;width:100%;display:flex;flex-direction:column}@media (min-width: 768px){.dmp-item-list ::ng-deep .dmp-item{flex-direction:row;align-items:center}.dmp-item-list ::ng-deep .dmp-item .dmp-item-container{flex:1}.dmp-item-list ::ng-deep .dmp-item .dmp-item-slider{flex-shrink:0}}::ng-deep .dmp-item-list mat-expansion-panel{box-shadow:none!important}.group-header{display:flex;color:#fff;padding:8px 14px;font-weight:600;background:#ffffff08}.group-header mat-icon{margin-left:10px;cursor:pointer;color:#bdc1c3cc;transition:color .2s ease}.group-header mat-icon:hover{color:#6ccb78}.layer-selector-body-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:1000;max-width:calc(100vw - 8em);display:flex;flex-direction:column;transition:width .3s ease,max-width .3s ease;border-top-left-radius:5px;border-top-right-radius:5px;box-shadow:0 2px 10px #0000001a;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.layer-selector-body-wrapper.cdk-drag-dragging{opacity:.8;cursor:move;z-index:1001}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons{justify-content:space-between}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons .icon-left{order:1;margin-right:auto}.layer-selector-body-wrapper:not(.collapsed) .drag-handle-icons .toggle-icon{order:3}.layer-selector-body-wrapper.collapsed .layer-selector-body{display:none}.layer-selector-body-wrapper.collapsed .drag-handle-selector{width:100%;min-width:100%;box-sizing:border-box;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content{width:100%}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons{width:100%;justify-content:space-between;gap:6px}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon{font-size:18px!important;flex-shrink:0}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.icon-left{cursor:default!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.toggle-icon{cursor:pointer!important}.layer-selector-body-wrapper.collapsed .drag-handle-selector .drag-handle-content .drag-handle-icons mat-icon.toggle-icon:hover{color:#d3d3d3!important}@media (max-width: 767px){.layer-selector-body-wrapper{max-width:calc(100vw - 7em);left:.5em}.layer-selector-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}@media (min-width: 768px) and (max-width: 1024px){.layer-selector-body-wrapper.collapsed{width:90px!important;max-width:90px!important;min-width:90px!important}}.drag-handle-selector{display:flex;justify-content:flex-end;border-radius:5px 5px 0 0;padding:0 2px;cursor:move}.drag-handle-content,.drag-handle-icons{display:flex;align-items:center;width:100%}.drag-handle-icons mat-icon{font-size:18px;transition:all .2s ease;display:flex;align-items:center;justify-content:center;flex-shrink:0}.icon-left{cursor:default!important}.toggle-icon{cursor:pointer!important}.toggle-icon:hover{color:#d3d3d3!important}::ng-deep .layer-selector-body{position:relative;left:auto;right:auto;bottom:auto;z-index:auto;width:100%;max-width:100%;max-height:317px;min-height:120px;overflow-y:auto;border-radius:0 0 5px 5px!important}::ng-deep .layer-selector-body .mat-expansion-panel-header-title{gap:6px}::ng-deep .layer-selector-body::-webkit-scrollbar{width:12px}::ng-deep .layer-selector-body::-webkit-scrollbar-track{background:#757474;border-radius:8px}::ng-deep .layer-selector-body::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}::ng-deep .layer-selector-body::-webkit-scrollbar-thumb:hover{background:#0f1012}::ng-deep .layer-selector-body::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}::ng-deep .layer-selector-body::-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 .layer-selector-body::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}::ng-deep .layer-selector-body::-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 .layer-selector-body::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}@media (max-width: 767px){::ng-deep .layer-selector-body{width:100%;max-height:70vh;min-height:140px}}@media (min-width: 768px) and (max-width: 1024px){::ng-deep .layer-selector-body{width:100%;max-width:445px;max-height:76vh;min-height:110px}}::ng-deep .layer-selector-body .search-section{display:flex;padding:12px 12px 8px;justify-content:center;align-items:center;gap:8px}@media (max-width: 767px){::ng-deep .layer-selector-body .search-section{padding:8px 8px 4px;gap:4px}}::ng-deep .layer-selector-body .search-section .search-field-wrapper{flex:1;display:flex;flex-direction:column}::ng-deep .layer-selector-body .search-section .search-label{color:#fff}::ng-deep .layer-selector-body .search-section mat-form-field{flex:1}::ng-deep .layer-selector-body .search-section mat-form-field .search-icon{color:#fff}::ng-deep .layer-selector-body .search-section mat-form-field ::ng-deep .mat-mdc-form-field-focus-overlay{background-color:transparent}::ng-deep .layer-selector-body .search-section>mat-icon{color:#fff;cursor:pointer;margin-top:0;transition:color .2s ease}::ng-deep .layer-selector-body .search-section>mat-icon:hover{color:#d3d3d3}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list{padding:4px;max-height:calc(60vh - 80px)}}@media (min-width: 768px) and (max-width: 1024px){::ng-deep .layer-selector-body .item-list{max-height:calc(77vh - 78px)}}::ng-deep .layer-selector-body .item-list .group{overflow:hidden;box-shadow:none}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel{background:transparent!important;box-shadow:none!important;margin-bottom:4px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header{padding:0 16px;height:40px!important}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title{display:flex;align-items:center;gap:6px;font-weight:600!important;color:#bdc1c3cc!important;transition:color .2s ease;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title{gap:4px;font-size:11px}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon{color:#bdc1c3cc;font-size:16px;width:16px;height:16px;transition:all .2s ease}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-on{color:#6ccb78;cursor:pointer}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-on:hover{color:#45a049}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-off{cursor:pointer;color:#bdc1c3cc;font-size:24px;height:24px;width:24px}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-off:hover{color:#d3d3d3}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-header .mat-panel-title mat-icon.power-fail{color:#bdc1c3cc}::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-content{background:#0003}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group>mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:2px 0 2px 12px}}::ng-deep .layer-selector-body .item-list .group .item-list{padding:0}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel{background:transparent!important;box-shadow:none!important;margin-bottom:2px}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel .mat-expansion-panel-content{background:#00000026}::ng-deep .layer-selector-body .item-list .group .item-list mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding:8px 16px 12px 32px}::ng-deep .layer-selector-body .item-list .group .item-list .layer-description{font-size:12px;color:#fffc;line-height:1.5;margin-bottom:8px;margin-left:28px}::ng-deep .layer-selector-body .item-list .group .item{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:8px;background:transparent;transition:all .2s ease;color:#fff;cursor:pointer;font-size:13px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item{flex-wrap:wrap;gap:4px;font-size:11px}}::ng-deep .layer-selector-body .item-list .group .item:hover{background-color:transparent}::ng-deep .layer-selector-body .item-list .group .item .item-left{display:flex;align-items:center;gap:4px;flex:1;min-width:0}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left{flex:1;min-width:0}}::ng-deep .layer-selector-body .item-list .group .item .item-left .drag-indicator{color:#ffffff80;font-size:16px;width:16px;height:16px;cursor:move;flex-shrink:0}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left .drag-indicator{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info{cursor:pointer;color:#e0e0de;font-size:16px;width:16px;height:16px;flex-shrink:0;transition:all .2s ease}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-left .layer-info:hover{color:#ccb913}::ng-deep .layer-selector-body .item-list .group .item .item-left span{flex:1;font-size:13px;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;white-space:normal;color:#fff;font-weight:400}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-left span{font-size:11px}}::ng-deep .layer-selector-body .item-list .group .item .item-center{display:flex;align-items:center;gap:4px;flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-center .zoom-off{color:#ef4444;font-size:16px;width:16px;height:16px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-center .zoom-off{font-size:14px;width:14px;height:14px}}::ng-deep .layer-selector-body .item-list .group .item .item-right{display:flex;align-items:center;gap:8px;flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon{flex-shrink:0}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on{color:#6ccb78;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-on:hover{color:#45a049}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off{color:#bdc1c3cc;font-size:18px;width:18px;height:18px;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-off:hover{color:#d3d3d3}::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-fail{color:#bdc1c3cc;font-size:18px;width:18px;height:18px}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-right mat-icon.power-fail{font-size:16px;width:16px;height:16px}}::ng-deep .layer-selector-body .item-list .group .item .item-slider{display:flex;align-items:center;flex-shrink:0}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-slider{flex-basis:100%;width:100%;margin-bottom:4px}}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]{width:60px;height:4px;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none;cursor:pointer}@media (max-width: 767px){::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]{width:100%}}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}::ng-deep .layer-selector-body .item-list .group .item .item-slider input[type=range]::-moz-range-thumb:hover{background:#6ccb78}::ng-deep .layer-selector-body-wrapper .result-title{color:#fff}::ng-deep .layer-selector-body-wrapper .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none!important}::ng-deep .layer-selector-body-wrapper .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .mat-expansion-panel-header.mat-expanded:hover{background:inherit!important}::ng-deep .layer-selector-body-wrapper .show-layer-highlight{font-size:18px;height:18px;width:18px}::ng-deep .layer-selector-body-wrapper .dmp-item{cursor:move;width:100%}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel-header.mat-expanded:hover,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel-header.mat-expanded:focus,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel-header.mat-expanded:hover{background:#ffffff26!important}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-panel:not([class*=mat-elevation-z]),::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none!important}::ng-deep .layer-selector-body-wrapper .dmp-search-panel .mat-expansion-indicator:after,::ng-deep .layer-selector-body-wrapper .dmp-dialog-content .mat-expansion-indicator:after{color:#fff!important;border-color:#fff!important}::ng-deep .layer-selector-body-wrapper mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding-left:0!important;padding-right:0!important;box-sizing:border-box}@media (max-width: 767px){::ng-deep .layer-selector-body-wrapper mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-body{padding-left:12px!important;padding-right:12px!important}}.cdk-drag-preview{box-sizing:border-box;border-radius:5px;box-shadow:0 5px 15px #00000026;background:#4c4d51;padding:8px 12px;color:#fff;display:flex;align-items:center;gap:8px}.cdk-drag-preview mat-icon{color:#fff}.cdk-drag-animating,.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .cdk-drag{transform:translateZ(0)!important}.power-on{color:#6ccb78!important;font-size:24px;width:24px;height:24px}.power-off{cursor:pointer;color:#bdc1c3cc!important}.power-fail{color:#bdc1c3cc!important}.add-option{color:#6ccb78!important}.add-option:hover{color:#37923a!important}::ng-deep .lightbulb{color:#dfca0e;width:18px;height:18px;font-size:18px}::ng-deep .arrow-up-layer{color:#fff;width:18px;height:18px;font-size:18px}::ng-deep .mdc-text-field--outlined{overflow:hidden!important}::ng-deep .drag-indicator{cursor:move!important}\n"] }]
|
|
1291
1289
|
}], propDecorators: { contentBody: [{
|
|
1292
1290
|
type: ViewChild,
|
|
1293
1291
|
args: ['layerSelectorBody', { static: false }]
|
|
@@ -1520,29 +1518,10 @@ class UndoRedoService {
|
|
|
1520
1518
|
constructor(_drawlayerSourceService) {
|
|
1521
1519
|
this._drawlayerSourceService = _drawlayerSourceService;
|
|
1522
1520
|
}
|
|
1523
|
-
disable() {
|
|
1524
|
-
this._enabled = false;
|
|
1525
|
-
}
|
|
1526
|
-
enable() {
|
|
1527
|
-
this._enabled = true;
|
|
1528
|
-
}
|
|
1529
1521
|
_steps = [];
|
|
1530
1522
|
_currentStep = 0;
|
|
1531
|
-
_changing = false;
|
|
1532
|
-
_enabled = true;
|
|
1533
1523
|
init() {
|
|
1534
1524
|
this._steps[0] = this._drawlayerSourceService.allFeatures;
|
|
1535
|
-
// For every change, add the current state
|
|
1536
|
-
this._drawlayerSourceService.features$.pipe(filter(() => this._enabled)).subscribe({
|
|
1537
|
-
next: () => {
|
|
1538
|
-
if (this._changing) {
|
|
1539
|
-
this._changing = false;
|
|
1540
|
-
return;
|
|
1541
|
-
}
|
|
1542
|
-
this._steps = [...this._steps.slice(0, this._currentStep + 1), this._drawlayerSourceService.allFeatures];
|
|
1543
|
-
this._currentStep++;
|
|
1544
|
-
}
|
|
1545
|
-
});
|
|
1546
1525
|
}
|
|
1547
1526
|
get canUndo() {
|
|
1548
1527
|
return this._currentStep > 0;
|
|
@@ -1550,9 +1529,12 @@ class UndoRedoService {
|
|
|
1550
1529
|
get canRedo() {
|
|
1551
1530
|
return this._currentStep < this._steps.length - 1;
|
|
1552
1531
|
}
|
|
1532
|
+
addStep() {
|
|
1533
|
+
this._steps = [...this._steps.slice(0, this._currentStep + 1), this._drawlayerSourceService.allFeatures];
|
|
1534
|
+
this._currentStep++;
|
|
1535
|
+
}
|
|
1553
1536
|
undo() {
|
|
1554
1537
|
if (this.canUndo) {
|
|
1555
|
-
this._changing = true;
|
|
1556
1538
|
this._currentStep--;
|
|
1557
1539
|
const features = this._steps[this._currentStep];
|
|
1558
1540
|
this._drawlayerSourceService.setFeatures(features);
|
|
@@ -1560,14 +1542,12 @@ class UndoRedoService {
|
|
|
1560
1542
|
}
|
|
1561
1543
|
redo() {
|
|
1562
1544
|
if (this.canRedo) {
|
|
1563
|
-
this._changing = true;
|
|
1564
1545
|
this._currentStep++;
|
|
1565
1546
|
const features = this._steps[this._currentStep];
|
|
1566
1547
|
this._drawlayerSourceService.setFeatures(features);
|
|
1567
1548
|
}
|
|
1568
1549
|
}
|
|
1569
1550
|
reset() {
|
|
1570
|
-
this._changing = true;
|
|
1571
1551
|
if (this._currentStep === 0) {
|
|
1572
1552
|
return;
|
|
1573
1553
|
}
|
|
@@ -1584,6 +1564,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
1584
1564
|
class GeometrySplitService {
|
|
1585
1565
|
geoJsonFormat = new GeoJSON$1();
|
|
1586
1566
|
_featureHelper = inject(FeatureHelperService);
|
|
1567
|
+
_undoRedo = inject(UndoRedoService);
|
|
1587
1568
|
/**
|
|
1588
1569
|
* Split polygons in a vector source using a buffered LineString.
|
|
1589
1570
|
* @param lineFeature The drawn LineString feature.
|
|
@@ -1645,6 +1626,7 @@ class GeometrySplitService {
|
|
|
1645
1626
|
vectorSource.addFeatures(newFeatures);
|
|
1646
1627
|
}
|
|
1647
1628
|
});
|
|
1629
|
+
this._undoRedo.addStep();
|
|
1648
1630
|
}
|
|
1649
1631
|
isPointStrictlyInside(geom, coord) {
|
|
1650
1632
|
if (!geom.intersectsCoordinate(coord))
|
|
@@ -1656,13 +1638,10 @@ class GeometrySplitService {
|
|
|
1656
1638
|
return true; // inde og ikke kun på kanten
|
|
1657
1639
|
}
|
|
1658
1640
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometrySplitService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1659
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometrySplitService
|
|
1641
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometrySplitService });
|
|
1660
1642
|
}
|
|
1661
1643
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GeometrySplitService, decorators: [{
|
|
1662
|
-
type: Injectable
|
|
1663
|
-
args: [{
|
|
1664
|
-
providedIn: 'root'
|
|
1665
|
-
}]
|
|
1644
|
+
type: Injectable
|
|
1666
1645
|
}] });
|
|
1667
1646
|
|
|
1668
1647
|
class ZoomService {
|
|
@@ -1822,6 +1801,7 @@ class MergeFeaturesService {
|
|
|
1822
1801
|
_featureHelper = inject(FeatureHelperService);
|
|
1823
1802
|
_interactionHelper = inject(InteractionHelperService);
|
|
1824
1803
|
_drawLayerService = inject(DrawLayerSourceService);
|
|
1804
|
+
_undoRedoService = inject(UndoRedoService);
|
|
1825
1805
|
_selectedMergeFeature;
|
|
1826
1806
|
formatter = new GeoJSON$1();
|
|
1827
1807
|
_formatterOptions = { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:25832' };
|
|
@@ -1832,6 +1812,9 @@ class MergeFeaturesService {
|
|
|
1832
1812
|
if (this._featureHelper.typeId(f) !== typeId) {
|
|
1833
1813
|
return false;
|
|
1834
1814
|
}
|
|
1815
|
+
if (f.getGeometry()?.getType() !== 'Polygon') {
|
|
1816
|
+
return false;
|
|
1817
|
+
}
|
|
1835
1818
|
if (this._selectedMergeFeature) {
|
|
1836
1819
|
const previusFeatureObject = this.formatter.writeFeatureObject(this._selectedMergeFeature, this._formatterOptions);
|
|
1837
1820
|
const bufferedPreviouslySelected = buffer(previusFeatureObject, 5, { units: 'centimeters' });
|
|
@@ -1863,6 +1846,7 @@ class MergeFeaturesService {
|
|
|
1863
1846
|
const newFeature = this.formatter.readFeature(newFeatureObject, this._formatterOptions);
|
|
1864
1847
|
this._selectedMergeFeature.setGeometry(newFeature.getGeometry());
|
|
1865
1848
|
this._drawLayerService.source.removeFeature(evt.selected[0]);
|
|
1849
|
+
this._undoRedoService.addStep();
|
|
1866
1850
|
}
|
|
1867
1851
|
this._selectedMergeFeature = undefined;
|
|
1868
1852
|
map.removeInteraction(select);
|
|
@@ -2020,6 +2004,20 @@ class CenterPointService {
|
|
|
2020
2004
|
this._drawLayerService.remove(centerFeature.getId());
|
|
2021
2005
|
}
|
|
2022
2006
|
}
|
|
2007
|
+
checkAfterUpdate() {
|
|
2008
|
+
if (!this._current.gisKomponentSettings.centerPoint || !this._current.gisKomponentSettings.centerPoint.withinPolygon) {
|
|
2009
|
+
return;
|
|
2010
|
+
}
|
|
2011
|
+
const currentCenter = this._drawLayerService.source.getFeatures().filter(f => this.isCenterpoint(f));
|
|
2012
|
+
if (currentCenter && currentCenter.length === 1) {
|
|
2013
|
+
const polygonFeatures = this._drawLayerService.source.getFeatures().filter(f => f.getGeometry()?.getType() === 'Polygon');
|
|
2014
|
+
const centerFeatureObject = this._geoJson.writeFeatureObject(currentCenter[0]);
|
|
2015
|
+
const isInSomePoly = polygonFeatures.map(pf => this._geoJson.writeFeatureObject(pf)).some(pf => booleanPointInPolygon(centerFeatureObject, pf));
|
|
2016
|
+
if (!isInSomePoly) {
|
|
2017
|
+
this._drawLayerService.source.removeFeature(currentCenter[0]);
|
|
2018
|
+
}
|
|
2019
|
+
}
|
|
2020
|
+
}
|
|
2023
2021
|
isCenterpoint(feature) {
|
|
2024
2022
|
return feature.get(this._centerPointProperty) === true;
|
|
2025
2023
|
}
|
|
@@ -2027,7 +2025,7 @@ class CenterPointService {
|
|
|
2027
2025
|
const style$ = this._settingsHelper.getStyle(style, this._current.profile.styleRepositoryWorkspace, this._current.profile.styleRepositoryGeoserver, 'Point');
|
|
2028
2026
|
combineLatest([style$, this._current.map$]).subscribe({
|
|
2029
2027
|
next: ([loadedStyle, map]) => {
|
|
2030
|
-
let parentPolyId;
|
|
2028
|
+
// let parentPolyId: number | string | undefined;
|
|
2031
2029
|
const centerDraw = new Draw({
|
|
2032
2030
|
type: 'Point',
|
|
2033
2031
|
source: this._drawLayerService.source,
|
|
@@ -2048,7 +2046,7 @@ class CenterPointService {
|
|
|
2048
2046
|
return false;
|
|
2049
2047
|
}
|
|
2050
2048
|
// Save the parent polygon's id on the center. If the parent is deleted, the point will be deleted too
|
|
2051
|
-
parentPolyId = parentPoly.id;
|
|
2049
|
+
// parentPolyId = parentPoly.id;
|
|
2052
2050
|
return !!parentPoly;
|
|
2053
2051
|
},
|
|
2054
2052
|
style: loadedStyle
|
|
@@ -2063,7 +2061,7 @@ class CenterPointService {
|
|
|
2063
2061
|
}
|
|
2064
2062
|
// Mark feature as centerpoint - this is to find it again an remove
|
|
2065
2063
|
evt.feature.set(this._centerPointProperty, true);
|
|
2066
|
-
evt.feature.set('_parentPolyId', parentPolyId);
|
|
2064
|
+
// evt.feature.set('_parentPolyId', parentPolyId);
|
|
2067
2065
|
this._featureHelper.setId(evt.feature);
|
|
2068
2066
|
callBack();
|
|
2069
2067
|
});
|
|
@@ -2979,6 +2977,27 @@ class ToolboxComponent {
|
|
|
2979
2977
|
get showDocumentSearch() {
|
|
2980
2978
|
return this.settings?.showDocumentSearch !== false;
|
|
2981
2979
|
}
|
|
2980
|
+
get showInfo() {
|
|
2981
|
+
return this.settings.showInfoEnabled !== false;
|
|
2982
|
+
}
|
|
2983
|
+
get showDownloadAddresses() {
|
|
2984
|
+
return this.settings?.downloadAddressesEnabled !== false;
|
|
2985
|
+
}
|
|
2986
|
+
get showDownloadCadastres() {
|
|
2987
|
+
return this.settings?.downloadCadastresEnabled !== false;
|
|
2988
|
+
}
|
|
2989
|
+
get showChooseLocations() {
|
|
2990
|
+
return this.settings?.chooseLocationsEnabled !== false;
|
|
2991
|
+
}
|
|
2992
|
+
get showFeatureHighlight() {
|
|
2993
|
+
return this.settings?.featureHighlightEnabled !== false;
|
|
2994
|
+
}
|
|
2995
|
+
get showPickAndShowInList() {
|
|
2996
|
+
return this.settings?.pickAndShowInListEnabled !== false;
|
|
2997
|
+
}
|
|
2998
|
+
get showDrawElement() {
|
|
2999
|
+
return this.settings?.drawElementEnabled !== false;
|
|
3000
|
+
}
|
|
2982
3001
|
mapWidth = 0;
|
|
2983
3002
|
mapHeight = 0;
|
|
2984
3003
|
format = "image/png";
|
|
@@ -3114,12 +3133,13 @@ class ToolboxComponent {
|
|
|
3114
3133
|
return;
|
|
3115
3134
|
}
|
|
3116
3135
|
this._clearAllInteractions();
|
|
3117
|
-
this.selectedMeasureMode = 'measure-distance';
|
|
3118
|
-
this.activeMode = 'measure-distance';
|
|
3119
|
-
this._active = 'Distance';
|
|
3120
|
-
this.map.addLayer(this._distanceLayer);
|
|
3121
|
-
|
|
3122
|
-
|
|
3136
|
+
this.selectedMeasureMode = this.showMeasureDistance ? 'measure-distance' : 'measure-area';
|
|
3137
|
+
this.activeMode = this.showMeasureDistance ? 'measure-distance' : 'measure-area';
|
|
3138
|
+
this._active = this.showMeasureDistance ? 'Distance' : 'Area';
|
|
3139
|
+
this.map.addLayer(this.showMeasureDistance ? this._distanceLayer : this._areaLayer);
|
|
3140
|
+
if (this.showMeasureDistance)
|
|
3141
|
+
this.map.addLayer(this._distanceLabelLayer);
|
|
3142
|
+
this.map.addInteraction(this.showMeasureDistance ? this._distanceMeasureDraw : this._areaMeasureDraw);
|
|
3123
3143
|
}
|
|
3124
3144
|
_formatNumber(value, decimals) {
|
|
3125
3145
|
return value.toLocaleString('da-DK', {
|
|
@@ -3331,12 +3351,14 @@ class ToolboxComponent {
|
|
|
3331
3351
|
this._overlap.splitByFeature(feature)])
|
|
3332
3352
|
.subscribe({
|
|
3333
3353
|
next: ([style, features]) => {
|
|
3334
|
-
this._undoRedo.enable();
|
|
3335
3354
|
features.forEach(feature => {
|
|
3336
3355
|
this._featureHelper.setTypeId(feature, this.selectedDrawItem?.typeId || '');
|
|
3337
3356
|
this._featureHelper.setId(feature);
|
|
3338
3357
|
this._drawLayerService.source.addFeature(feature);
|
|
3339
3358
|
});
|
|
3359
|
+
if (features.length > 0) {
|
|
3360
|
+
this._undoRedo.addStep();
|
|
3361
|
+
}
|
|
3340
3362
|
//Clear results and close tool
|
|
3341
3363
|
this.activeMode = null;
|
|
3342
3364
|
this.showGeometryTypes = false;
|
|
@@ -3371,13 +3393,16 @@ class ToolboxComponent {
|
|
|
3371
3393
|
this._overlap.splitByFeature(feature, true)])
|
|
3372
3394
|
.subscribe({
|
|
3373
3395
|
next: ([style, features]) => {
|
|
3374
|
-
this._undoRedo.enable();
|
|
3375
3396
|
features.forEach(feature => {
|
|
3376
3397
|
this._featureHelper.setTypeId(feature, this.selectedDrawItem?.typeId || '');
|
|
3377
3398
|
this._featureHelper.setId(feature);
|
|
3378
3399
|
this._drawLayerService.source.addFeature(feature);
|
|
3379
3400
|
});
|
|
3380
3401
|
//Clear results and close tool
|
|
3402
|
+
if (features.length > 0) {
|
|
3403
|
+
this._centerPointService.checkAfterUpdate();
|
|
3404
|
+
this._undoRedo.addStep();
|
|
3405
|
+
}
|
|
3381
3406
|
this.activeMode = null;
|
|
3382
3407
|
this.showGeometryTypes = false;
|
|
3383
3408
|
this._disablePointSearch();
|
|
@@ -3464,6 +3489,9 @@ class ToolboxComponent {
|
|
|
3464
3489
|
if (f.length > 1) {
|
|
3465
3490
|
this._confirmService.open({ message: `Den indtegnede flade var ikke gyldig, men rettet til ${f.length} nye flader`, primaryText: 'OK', title: 'Advarsel' }).subscribe();
|
|
3466
3491
|
}
|
|
3492
|
+
if (f.length > 0) {
|
|
3493
|
+
this._undoRedo.addStep();
|
|
3494
|
+
}
|
|
3467
3495
|
}
|
|
3468
3496
|
}
|
|
3469
3497
|
});
|
|
@@ -3480,6 +3508,7 @@ class ToolboxComponent {
|
|
|
3480
3508
|
this._featureHelper.setId(feature);
|
|
3481
3509
|
this._zoomService.zoomToFeatures([feature]);
|
|
3482
3510
|
this._drawLayerService.source.addFeature(feature);
|
|
3511
|
+
this._undoRedo.addStep();
|
|
3483
3512
|
}
|
|
3484
3513
|
}
|
|
3485
3514
|
});
|
|
@@ -3530,7 +3559,11 @@ class ToolboxComponent {
|
|
|
3530
3559
|
});
|
|
3531
3560
|
this._interactionHelper.setAsTemp(clipHoleDraw);
|
|
3532
3561
|
clipHoleDraw.on('drawend', evt => {
|
|
3533
|
-
const featuresInExtent = this._drawLayerService.source
|
|
3562
|
+
const featuresInExtent = this._drawLayerService.source
|
|
3563
|
+
.getFeatures()
|
|
3564
|
+
.filter(f => !this._featureHelper.isLocked(f)
|
|
3565
|
+
&& f.getGeometry()?.getType() === 'Polygon'
|
|
3566
|
+
&& f.getGeometry()?.intersectsExtent(evt.feature.getGeometry().getExtent()));
|
|
3534
3567
|
const formatterOptions = { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:25832' };
|
|
3535
3568
|
const geoJsonFormat = new GeoJSON$1(formatterOptions);
|
|
3536
3569
|
const holeGeoJson = geoJsonFormat.writeFeatureObject(evt.feature);
|
|
@@ -3566,9 +3599,9 @@ class ToolboxComponent {
|
|
|
3566
3599
|
})).flatMap(f => f);
|
|
3567
3600
|
const featuresToRemove = validatedItems.map(item => item.feature);
|
|
3568
3601
|
this._drawLayerService.source.removeFeatures(featuresToRemove);
|
|
3569
|
-
this._undoRedo.disable();
|
|
3570
3602
|
this._drawLayerService.source.addFeatures(featuresToAdd);
|
|
3571
|
-
this.
|
|
3603
|
+
this._centerPointService.checkAfterUpdate();
|
|
3604
|
+
this._undoRedo.addStep();
|
|
3572
3605
|
}
|
|
3573
3606
|
});
|
|
3574
3607
|
});
|
|
@@ -3635,6 +3668,7 @@ class ToolboxComponent {
|
|
|
3635
3668
|
this._featureHelper.setTypeId(feature, typeId);
|
|
3636
3669
|
feature.setStyle(style);
|
|
3637
3670
|
this._drawLayerService.source.addFeature(feature);
|
|
3671
|
+
this._undoRedo.addStep();
|
|
3638
3672
|
});
|
|
3639
3673
|
this._interactionHelper.setAsTemp(drawInteraction);
|
|
3640
3674
|
this.map.addInteraction(drawInteraction);
|
|
@@ -3662,7 +3696,10 @@ class ToolboxComponent {
|
|
|
3662
3696
|
this._interactionHelper.setAsTemp(this.deleteSelect);
|
|
3663
3697
|
this.deleteSelect.on('select', evt => {
|
|
3664
3698
|
this._drawLayerService.source.removeFeatures(evt.selected);
|
|
3665
|
-
|
|
3699
|
+
this._centerPointService.checkAfterUpdate();
|
|
3700
|
+
if (evt.selected.length > 0) {
|
|
3701
|
+
this._undoRedo.addStep();
|
|
3702
|
+
}
|
|
3666
3703
|
});
|
|
3667
3704
|
return this._deleteSelect;
|
|
3668
3705
|
}
|
|
@@ -3678,17 +3715,15 @@ class ToolboxComponent {
|
|
|
3678
3715
|
const modifyRemove = new Modify({
|
|
3679
3716
|
source: this._drawLayerService.source,
|
|
3680
3717
|
filter: f => !this._featureHelper.isLocked(f),
|
|
3681
|
-
// condition: evt => {
|
|
3682
|
-
// // first, get all features from the draw-layer
|
|
3683
|
-
// const feature = this.map.forEachFeatureAtPixel(evt.pixel, f => f, { layerFilter: l => l == this._drawLayerService.layer });
|
|
3684
|
-
// if (!feature) { return false ;}
|
|
3685
|
-
// return !this._featureHelper.isLocked(feature as Feature);
|
|
3686
|
-
// },
|
|
3687
3718
|
// Make sure delete is allowed and other interactions are not.
|
|
3688
3719
|
deleteCondition: always,
|
|
3689
3720
|
insertVertexCondition: never,
|
|
3690
3721
|
snapToPointer: this.snap,
|
|
3691
3722
|
});
|
|
3723
|
+
modifyRemove.on('modifyend', evt => {
|
|
3724
|
+
this._centerPointService.checkAfterUpdate();
|
|
3725
|
+
this._undoRedo.addStep();
|
|
3726
|
+
});
|
|
3692
3727
|
this._interactionHelper.setAsTemp(modifyRemove);
|
|
3693
3728
|
this.map.addInteraction(modifyRemove);
|
|
3694
3729
|
this._addSnap();
|
|
@@ -3728,13 +3763,15 @@ class ToolboxComponent {
|
|
|
3728
3763
|
next: f => {
|
|
3729
3764
|
if (f) {
|
|
3730
3765
|
f.forEach(feature => {
|
|
3731
|
-
this._undoRedo.enable();
|
|
3732
3766
|
this._drawLayerService.source.addFeature(feature);
|
|
3733
3767
|
});
|
|
3734
3768
|
this._zoomService.zoomToFeatures(f);
|
|
3735
3769
|
if (f.length > 1) {
|
|
3736
3770
|
this._confirmService.open({ message: `Den indtegnede flade var ikke gyldig, men rettet til ${f.length} nye flader`, primaryText: 'OK', title: 'Advarsel' }).subscribe();
|
|
3737
3771
|
}
|
|
3772
|
+
if (f.length > 0) {
|
|
3773
|
+
this._undoRedo.addStep();
|
|
3774
|
+
}
|
|
3738
3775
|
//Clear results and close tool
|
|
3739
3776
|
this.activeMode = null;
|
|
3740
3777
|
this.showGeometryTypes = false;
|
|
@@ -3763,11 +3800,7 @@ class ToolboxComponent {
|
|
|
3763
3800
|
// condition: always,
|
|
3764
3801
|
insertVertexCondition: always,
|
|
3765
3802
|
});
|
|
3766
|
-
/* Modify fires changes to features a LOT, so to not flood the UndoRedo service, I disable until ending the modify
|
|
3767
|
-
and then force an update, to add the updated feature to the undo-service. */
|
|
3768
|
-
modify.on('modifystart', () => this._undoRedo.disable());
|
|
3769
3803
|
modify.on('modifyend', (evt) => {
|
|
3770
|
-
this._undoRedo.enable();
|
|
3771
3804
|
evt.features.forEach(f => {
|
|
3772
3805
|
f.set('updated', new Date().toISOString());
|
|
3773
3806
|
const geom = f.getGeometry();
|
|
@@ -3798,6 +3831,8 @@ class ToolboxComponent {
|
|
|
3798
3831
|
this._confirmService.open({ message: `Den indtegnede flade var ikke gyldig, men rettet til ${f.length} nye flader`, primaryText: 'OK', title: 'Advarsel' }).subscribe();
|
|
3799
3832
|
}
|
|
3800
3833
|
}
|
|
3834
|
+
this._centerPointService.checkAfterUpdate();
|
|
3835
|
+
this._undoRedo.addStep();
|
|
3801
3836
|
}
|
|
3802
3837
|
});
|
|
3803
3838
|
}
|
|
@@ -3824,7 +3859,6 @@ class ToolboxComponent {
|
|
|
3824
3859
|
source: new VectorSource(),
|
|
3825
3860
|
style: style
|
|
3826
3861
|
});
|
|
3827
|
-
this._undoRedo.disable();
|
|
3828
3862
|
drawInteraction.on('drawend', evt => {
|
|
3829
3863
|
if (geomType === 'Polygon') {
|
|
3830
3864
|
// Validate feature
|
|
@@ -3839,7 +3873,6 @@ class ToolboxComponent {
|
|
|
3839
3873
|
this._overlap.handleOverlaps(result).pipe(filter(f => !!f)).subscribe({
|
|
3840
3874
|
next: f => {
|
|
3841
3875
|
if (f) {
|
|
3842
|
-
this._undoRedo.enable();
|
|
3843
3876
|
f.forEach(feature => {
|
|
3844
3877
|
if (feature.getGeometry()?.getType() !== 'MultiPolygon') {
|
|
3845
3878
|
this._drawLayerService.source.addFeature(feature);
|
|
@@ -3857,6 +3890,9 @@ class ToolboxComponent {
|
|
|
3857
3890
|
if (f.length > 1) {
|
|
3858
3891
|
this._confirmService.open({ message: `Den indtegnede flade var ikke gyldig, men rettet til ${f.length} nye flader`, primaryText: 'OK', title: 'Advarsel' }).subscribe();
|
|
3859
3892
|
}
|
|
3893
|
+
if (f.length > 0) {
|
|
3894
|
+
this._undoRedo.addStep();
|
|
3895
|
+
}
|
|
3860
3896
|
}
|
|
3861
3897
|
}
|
|
3862
3898
|
});
|
|
@@ -3871,8 +3907,8 @@ class ToolboxComponent {
|
|
|
3871
3907
|
this._featureHelper.setTypeId(evt.feature, typeId);
|
|
3872
3908
|
this._featureHelper.setId(evt.feature);
|
|
3873
3909
|
evt.feature.setStyle(style);
|
|
3874
|
-
this._undoRedo.enable();
|
|
3875
3910
|
this._drawLayerService.source.addFeature(evt.feature);
|
|
3911
|
+
this._undoRedo.addStep();
|
|
3876
3912
|
}
|
|
3877
3913
|
});
|
|
3878
3914
|
this._interactionHelper.setAsTemp(drawInteraction);
|
|
@@ -4233,6 +4269,7 @@ class ToolboxComponent {
|
|
|
4233
4269
|
this._featureHelper.setTypeId(newFeature, this.selectedDrawItem?.typeId || '');
|
|
4234
4270
|
this._drawLayerService.source.removeFeature(feature);
|
|
4235
4271
|
this._drawLayerService.source.addFeature(newFeature);
|
|
4272
|
+
this._undoRedo.addStep();
|
|
4236
4273
|
}
|
|
4237
4274
|
}
|
|
4238
4275
|
});
|
|
@@ -4504,11 +4541,11 @@ class ToolboxComponent {
|
|
|
4504
4541
|
}));
|
|
4505
4542
|
}
|
|
4506
4543
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ToolboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4507
|
-
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)=\"toggleDocumentPointSearch()\"\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)=\"toggleDocumentPolygonSearch()\"\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]=\"deleteIconBase64\" \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:170px;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:#bdc1c3cc;float:right;padding-top:5px;font-size:18px;cursor:pointer}.geometry-search-panel .delete-all-icon:hover{color:#d3d3d3}.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 .item-right mat-icon{font-size:18px!important;color:#bdc1c3cc}::ng-deep .geometry-search-panel .item-right mat-icon:hover{color:#d3d3d3!important}::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" }] });
|
|
4544
|
+
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 @if (showInfo){ <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 }\n @if(showDownloadAddresses) {\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 }\n @if(showDownloadCadastres) {\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 @if (showChooseLocations) {\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 }\n @if (showDocumentSearch) {\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleDocumentPointSearch()\"\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)=\"toggleDocumentPolygonSearch()\"\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 @if (showFeatureHighlight) {\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 }\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 @if (showPickAndShowInList) {\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 @if (showDrawElement) {\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 }\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 }\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 @if(showMeasureArea || showMeasureDistance) {\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 }\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 @if (showMeasureDistance){\n <mat-option value=\"measure-distance\">M\u00E5l afstand</mat-option>\n }\n @if (showMeasureArea){\n <mat-option value=\"measure-area\">M\u00E5l areal</mat-option>\n } \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]=\"deleteIconBase64\" \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:170px;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;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important}.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;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important}.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:#bdc1c3cc;float:right;padding-top:5px;font-size:18px;cursor:pointer}.geometry-search-panel .delete-all-icon:hover{color:#d3d3d3}.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 .item-right mat-icon{font-size:18px!important;color:#bdc1c3cc}::ng-deep .geometry-search-panel .item-right mat-icon:hover{color:#d3d3d3!important}::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}@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" }] });
|
|
4508
4545
|
}
|
|
4509
4546
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ToolboxComponent, decorators: [{
|
|
4510
4547
|
type: Component,
|
|
4511
|
-
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)=\"toggleDocumentPointSearch()\"\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)=\"toggleDocumentPolygonSearch()\"\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]=\"deleteIconBase64\" \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:170px;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:#bdc1c3cc;float:right;padding-top:5px;font-size:18px;cursor:pointer}.geometry-search-panel .delete-all-icon:hover{color:#d3d3d3}.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 .item-right mat-icon{font-size:18px!important;color:#bdc1c3cc}::ng-deep .geometry-search-panel .item-right mat-icon:hover{color:#d3d3d3!important}::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"] }]
|
|
4548
|
+
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 @if (showInfo){ <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 }\n @if(showDownloadAddresses) {\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 }\n @if(showDownloadCadastres) {\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 @if (showChooseLocations) {\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 }\n @if (showDocumentSearch) {\n <img \n [src]=\"documentSearchBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"toggleDocumentPointSearch()\"\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)=\"toggleDocumentPolygonSearch()\"\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 @if (showFeatureHighlight) {\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 }\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 @if (showPickAndShowInList) {\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 @if (showDrawElement) {\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 }\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 }\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 @if(showMeasureArea || showMeasureDistance) {\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 }\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 @if (showMeasureDistance){\n <mat-option value=\"measure-distance\">M\u00E5l afstand</mat-option>\n }\n @if (showMeasureArea){\n <mat-option value=\"measure-area\">M\u00E5l areal</mat-option>\n } \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]=\"deleteIconBase64\" \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:170px;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;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important}.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;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important}.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:#bdc1c3cc;float:right;padding-top:5px;font-size:18px;cursor:pointer}.geometry-search-panel .delete-all-icon:hover{color:#d3d3d3}.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 .item-right mat-icon{font-size:18px!important;color:#bdc1c3cc}::ng-deep .geometry-search-panel .item-right mat-icon:hover{color:#d3d3d3!important}::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}@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"] }]
|
|
4512
4549
|
}], ctorParameters: () => [], propDecorators: { map: [{
|
|
4513
4550
|
type: Input,
|
|
4514
4551
|
args: [{ required: true }]
|
|
@@ -4776,11 +4813,11 @@ class ActiveObjectsComponent {
|
|
|
4776
4813
|
}
|
|
4777
4814
|
}
|
|
4778
4815
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ActiveObjectsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4779
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: ActiveObjectsComponent, isStandalone: true, selector: "activeObjects", inputs: { settings: "settings", profile: "profile" }, outputs: { sessionDone: "sessionDone" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"active-objects-wrapper global-wrapper-container\" cdkDrag cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"dragPosition\" (cdkDragEnded)=\"onDragEnded($event)\" [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-active-objects\" cdkDragHandle>\n <mat-icon class=\"active-object-icon\" (click)=\"zoomToAll()\" matTooltip=\"Aktive objekter\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n format_list_bulleted_add\n </mat-icon>\n\n <div class=\"right-icons\">\n <mat-icon class=\"toggle-icon\" (click)=\"togglePanel()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n\n <div class=\"active-objects-container\">\n @if(!collapsed) {\n <input type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" [(ngModel)]=\"opacity\" (input)=\"updateOpacity()\"\n (mousedown)=\"stopDrag($event)\" (touchstart)=\"stopDrag($event)\" (pointerdown)=\"stopDrag($event)\">\n <div class=\"header-icons\">\n <div class=\"header-left-controls\">\n <mat-icon class=\"zoom-icon\" [class.zoom-active]=\"isZoomedToAll\" (click)=\"zoomToAll()\"\n matTooltip=\"Zoom til alle\" matTooltipPosition=\"above\">\n fit_screen\n </mat-icon>\n <mat-icon class=\"reset-icon\" (click)=\"reset()\" matTooltip=\"Nulstil\" matTooltipPosition=\"above\">\n replay\n </mat-icon>\n </div>\n\n <div class=\"header-right-controls\">\n @if(!centerPointOk) {\n <mat-icon class=\"warning-icon\" matTooltip=\"Der er ikke noget centerpunkt og det skal der v\u00E6re\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n warning\n </mat-icon>\n } @else if (allFeaturesOk) { \n @if (endSessionButtonLabel) {\n <button (click)=\"endSession()\" matTooltip=\"Afslut\" [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n {{endSessionButtonLabel}}\n </button>\n } @else {\n <mat-icon class=\"end-session-icon\" (click)=\"endSession()\" matTooltip=\"Afslut\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n done_all\n </mat-icon>\n }\n }\n </div>\n </div>\n }\n\n @if(!collapsed) {\n <div class=\"active-objects-content\">\n <div class=\"item-list\">\n @for(item of activeFeatures; track item.id) {\n <div class=\"item\" [class.listhighlight]=\"listHighlightedIds.has(item.id)\" [attr.data-id]=\"item.id\">\n <div class=\"item-text\">\n <span (click)=\"highlight(item.id)\" class=\"item-id\">{{item.display}} {{item.area}}</span>\n @if(item.containedMissingIn && item.containedMissingIn.length > 0) {\n <div class=\"item-warning\">\n <mat-icon>error</mat-icon>\n <span>Udenfor {{item.containedMissingIn.join(', ')}}</span>\n </div>\n }\n </div>\n <img \n [src]=\"wktIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"showItemWKT(item.feature)\" \n matTooltip=\"Vis WKT\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Vis WKT\">\n \n\n @if(!item.locked) {\n <mat-icon (click)=\"delete(item.id)\" matTooltip=\"Slet\" [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n delete\n </mat-icon>\n }\n </div>\n }\n </div>\n\n </div>\n }\n </div>\n</div>", styles: [".active-objects-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:2;box-shadow:0 2px 10px #0000001a;width:350px;transition:width .3s ease,max-width .3s ease;border-radius:5px!important}.active-objects-wrapper.collapsed .drag-handle-active-objects .active-object-icon{cursor:default!important}.active-objects-wrapper.collapsed .drag-handle-active-objects .right-icons .toggle-icon{cursor:pointer!important}.active-objects-wrapper :not(.collapsed){max-width:350px}.active-objects-wrapper.cdk-drag-dragging{opacity:.8;z-index:1001}.listhighlight{color:#0af!important;font-weight:700}.item{display:flex;justify-content:space-between;align-items:center;padding:0 14px;border-radius:5px;background:transparent!important;transition:all .2s ease;color:#fff;min-height:40px;cursor:default}.item .item-text{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;gap:4px}.item .item-text .item-warning{display:inline-flex;align-items:center;gap:6px;font-size:11px;width:fit-content;max-width:100%;color:#dfca0e;margin-top:2px;margin-bottom:2px}.item .item-text .item-warning mat-icon{font-size:14px;width:14px;height:14px;color:#dfca0e;margin:0;cursor:default;flex-shrink:0}.item .item-text .item-warning mat-icon:hover{color:#ccb913}.item .item-text .item-warning span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.item .item-id{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}.item .item-area{color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}.item mat-icon{cursor:pointer;color:#bdc1c3cc;font-size:18px;width:18px;height:18px;flex-shrink:0;margin-left:8px;transition:color .2s ease,background .2s ease}.item mat-icon:hover{color:#d3d3d3}.highlight-active{color:#6ccb78!important;transition:all .2s ease}.drag-handle-active-objects .active-object-icon{cursor:default!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-active-objects .right-icons{display:flex;align-items:center;gap:7px}.drag-handle-active-objects .right-icons .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-active-objects .right-icons .toggle-icon:hover{color:#d3d3d3}.active-objects-container{display:flex;flex-direction:column;width:100%;transition:all .3s ease;cursor:default;box-sizing:border-box;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.active-objects-container .panel-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;cursor:default;background:color-mix(in srgb,#000 70%,transparent);border-bottom:1px solid rgba(255,255,255,.1)}.active-objects-container .collapsed-title{color:#fff;font-weight:600;font-size:12px;padding:8px 4px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease;white-space:nowrap;text-align:center}.active-objects-container .collapsed-title:hover{color:#1976d2}.active-objects-container input[type=range]{width:95%;height:4px;margin:8px auto;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none}.active-objects-container input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}.active-objects-container input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}.active-objects-container input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}.active-objects-container input[type=range]::-moz-range-thumb:hover{background:#6ccb78}.header-icons{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:8px!important;padding:5px 10px!important}.header-icons .header-left-controls,.header-icons .header-right-controls{display:flex;align-items:center;gap:8px}.header-icons .header-right-controls button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:0 12px;height:26px;min-width:56px;max-width:150px;background:linear-gradient(135deg,#6ccb781f,#6ccb780f);border:1px solid rgba(108,203,120,.55);border-radius:5px;color:#6ccb78;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;outline:none;box-shadow:0 0 #6ccb7800,inset 0 1px #ffffff0f;transition:background .22s ease,border-color .22s ease,color .22s ease,box-shadow .22s ease,transform .12s ease}.header-icons .header-right-controls button mat-icon{font-size:14px;width:14px;height:14px;flex-shrink:0;transition:transform .3s ease;margin:0}.header-icons .header-right-controls button:hover{background:linear-gradient(135deg,#6ccb7838,#6ccb781a);border-color:#6ccb78e6;color:#88d994}.header-icons .header-right-controls button:hover mat-icon{transform:scale(1.15)}.header-icons .header-right-controls button:active{background:#6ccb782e;border-color:#6ccb78;color:#fff;box-shadow:0 0 6px #6ccb7833,inset 0 2px 4px #0000004d;transform:translateY(0)}.header-icons .header-right-controls button:focus-visible{outline:2px solid rgba(108,203,120,.6);outline-offset:2px}.header-icons .header-right-controls .end-session-icon{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:5px;color:#fff;cursor:pointer;transition:color .2s ease,background .2s ease,box-shadow .2s ease,transform .12s ease}.header-icons .header-right-controls .end-session-icon:hover{color:#d3d3d3!important}.header-icons .zoom-icon{cursor:pointer;color:#fff;font-size:18px;transition:all .2s ease}.header-icons .zoom-icon:hover{color:#d3d3d3}.header-icons .zoom-icon.zoom-active{color:#d3d3d3!important}.header-icons .reset-icon{cursor:pointer;color:#fff;font-size:18px;transition:all .2s ease}.header-icons .reset-icon:hover{color:#d3d3d3}.header-icons .warning-icon{color:#6ccb78;font-size:18px;cursor:help}.header-icons .end-session-icon{cursor:pointer;color:#6ccb78;font-size:18px;transition:all .2s ease}.header-icons .end-session-icon:hover{color:#d3d3d3}.active-objects-content{display:block;width:100%;max-height:278px;overflow:auto;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.active-objects-content::-webkit-scrollbar{width:12px}.active-objects-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}.active-objects-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.active-objects-content::-webkit-scrollbar-thumb:hover{background:#0f1012}.active-objects-content::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}.active-objects-content::-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}.active-objects-content::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}.active-objects-content::-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}.active-objects-content::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}.active-objects-content .zoom-icon{color:#fff;font-size:18px;transition:all .2s ease}.active-objects-content .zoom-icon:hover{color:#6ccb78}.active-objects-content .zoom-icon.zoom-active{color:#6ccb78!important}mat-expansion-panel{border-radius:0!important;box-shadow:none!important;width:100%}mat-expansion-panel:last-child{border-bottom:none}mat-expansion-panel ::ng-deep .mat-expansion-panel-header .mat-content{display:flex;justify-content:space-between;align-items:center;color:#fff}mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding:0}.item-list{display:flex;flex-direction:column}@media (max-width: 768px){.active-objects-wrapper{right:.5em;top:8em;width:280px}.item{padding:6px 10px}}@media (max-width: 480px){.active-objects-wrapper{right:.5em;left:.5em;max-width:calc(100vw - 1em);width:auto}.item-list{max-height:200px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { 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.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { 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: MatExpansionModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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"] }] });
|
|
4816
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: ActiveObjectsComponent, isStandalone: true, selector: "activeObjects", inputs: { settings: "settings", profile: "profile" }, outputs: { sessionDone: "sessionDone" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"active-objects-wrapper global-wrapper-container\" cdkDrag cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"dragPosition\" (cdkDragEnded)=\"onDragEnded($event)\" [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-active-objects\" cdkDragHandle>\n <mat-icon class=\"active-object-icon\" (click)=\"zoomToAll()\" matTooltip=\"Aktive objekter\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n format_list_bulleted_add\n </mat-icon>\n\n <div class=\"right-icons\">\n <mat-icon class=\"toggle-icon\" (click)=\"togglePanel()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n\n <div class=\"active-objects-container\">\n @if(!collapsed) {\n <input type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" [(ngModel)]=\"opacity\" (input)=\"updateOpacity()\"\n (mousedown)=\"stopDrag($event)\" (touchstart)=\"stopDrag($event)\" (pointerdown)=\"stopDrag($event)\">\n <div class=\"header-icons\">\n <div class=\"header-left-controls\">\n <mat-icon class=\"zoom-icon\" [class.zoom-active]=\"isZoomedToAll\" (click)=\"zoomToAll()\"\n matTooltip=\"Zoom til alle\" matTooltipPosition=\"above\">\n fit_screen\n </mat-icon>\n <mat-icon class=\"reset-icon\" (click)=\"reset()\" matTooltip=\"Nulstil\" matTooltipPosition=\"above\">\n replay\n </mat-icon>\n </div>\n\n <div class=\"header-right-controls\">\n @if(!centerPointOk) {\n <mat-icon class=\"warning-icon\" matTooltip=\"Der er ikke noget centerpunkt og det skal der v\u00E6re\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n warning\n </mat-icon>\n } @else if (allFeaturesOk) { \n @if (endSessionButtonLabel) {\n <button (click)=\"endSession()\" matTooltip=\"Afslut\" [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n {{endSessionButtonLabel}}\n </button>\n } @else {\n <mat-icon class=\"end-session-icon\" (click)=\"endSession()\" matTooltip=\"Afslut\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n done_all\n </mat-icon>\n }\n }\n </div>\n </div>\n }\n\n @if(!collapsed) {\n <div class=\"active-objects-content\">\n <div class=\"item-list\">\n @for(item of activeFeatures; track item.id) {\n <div class=\"item\" [class.listhighlight]=\"listHighlightedIds.has(item.id)\" [attr.data-id]=\"item.id\">\n <div class=\"item-text\">\n <span (click)=\"highlight(item.id)\" class=\"item-id\">{{item.display}} {{item.area}}</span>\n @if(item.containedMissingIn && item.containedMissingIn.length > 0) {\n <div class=\"item-warning\">\n <mat-icon>error</mat-icon>\n <span>Udenfor {{item.containedMissingIn.join(', ')}}</span>\n </div>\n }\n </div>\n <img \n [src]=\"wktIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"showItemWKT(item.feature)\" \n matTooltip=\"Vis WKT\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Vis WKT\">\n \n\n @if(!item.locked) {\n <mat-icon (click)=\"delete(item.id)\" matTooltip=\"Slet\" [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n delete\n </mat-icon>\n }\n </div>\n }\n </div>\n\n </div>\n }\n </div>\n</div>", styles: [".active-objects-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:2;box-shadow:0 2px 10px #0000001a;width:350px;transition:width .3s ease,max-width .3s ease;border-radius:5px!important}.active-objects-wrapper.collapsed .drag-handle-active-objects .active-object-icon{cursor:default!important}.active-objects-wrapper.collapsed .drag-handle-active-objects .right-icons .toggle-icon{cursor:pointer!important}.active-objects-wrapper :not(.collapsed){max-width:350px}.active-objects-wrapper.cdk-drag-dragging{opacity:.8;z-index:1001}.listhighlight{color:#0af!important;font-weight:700}.item{display:flex;justify-content:space-between;align-items:center;padding:0 14px;border-radius:5px;background:transparent!important;transition:all .2s ease;color:#fff;min-height:40px;cursor:default}.item .item-text{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;gap:4px}.item .item-text .item-warning{display:inline-flex;align-items:center;gap:6px;font-size:11px;width:fit-content;max-width:100%;color:#dfca0e;margin-top:2px;margin-bottom:2px}.item .item-text .item-warning mat-icon{font-size:14px;width:14px;height:14px;color:#dfca0e;margin:0;cursor:default;flex-shrink:0}.item .item-text .item-warning mat-icon:hover{color:#ccb913}.item .item-text .item-warning span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.item .item-id{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}.item .item-area{color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}.item mat-icon{cursor:pointer;color:#bdc1c3cc;font-size:18px;width:18px;height:18px;flex-shrink:0;margin-left:8px;transition:color .2s ease,background .2s ease}.item mat-icon:hover{color:#d3d3d3}.highlight-active{color:#6ccb78!important;transition:all .2s ease}.drag-handle-active-objects .active-object-icon{cursor:default!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-active-objects .right-icons{display:flex;align-items:center;gap:7px}.drag-handle-active-objects .right-icons .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-active-objects .right-icons .toggle-icon:hover{color:#d3d3d3}.active-objects-container{display:flex;flex-direction:column;width:100%;transition:all .3s ease;cursor:default;box-sizing:border-box;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.active-objects-container .panel-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;cursor:default;background:color-mix(in srgb,#000 70%,transparent);border-bottom:1px solid rgba(255,255,255,.1)}.active-objects-container .collapsed-title{color:#fff;font-weight:600;font-size:12px;padding:8px 4px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease;white-space:nowrap;text-align:center}.active-objects-container .collapsed-title:hover{color:#1976d2}.active-objects-container input[type=range]{width:95%;height:4px;margin:8px auto;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none}.active-objects-container input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}.active-objects-container input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}.active-objects-container input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}.active-objects-container input[type=range]::-moz-range-thumb:hover{background:#6ccb78}.header-icons{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:8px!important;padding:5px 10px!important}.header-icons .header-left-controls,.header-icons .header-right-controls{display:flex;align-items:center;gap:8px}.header-icons .header-right-controls button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:0 12px;height:26px;min-width:56px;max-width:150px;background:linear-gradient(135deg,#6ccb781f,#6ccb780f);border:1px solid rgba(108,203,120,.55);border-radius:5px;color:#6ccb78;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;outline:none;box-shadow:0 0 #6ccb7800,inset 0 1px #ffffff0f;transition:background .22s ease,border-color .22s ease,color .22s ease,box-shadow .22s ease,transform .12s ease}.header-icons .header-right-controls button mat-icon{font-size:14px;width:14px;height:14px;flex-shrink:0;transition:transform .3s ease;margin:0}.header-icons .header-right-controls button:hover{background:linear-gradient(135deg,#6ccb7838,#6ccb781a);border-color:#6ccb78e6;color:#88d994}.header-icons .header-right-controls button:hover mat-icon{transform:scale(1.15)}.header-icons .header-right-controls button:active{background:#6ccb782e;border-color:#6ccb78;color:#fff;box-shadow:0 0 6px #6ccb7833,inset 0 2px 4px #0000004d;transform:translateY(0)}.header-icons .header-right-controls button:focus-visible{outline:2px solid rgba(108,203,120,.6);outline-offset:2px}.header-icons .header-right-controls .end-session-icon{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:5px;color:#fff;cursor:pointer;transition:color .2s ease,background .2s ease,box-shadow .2s ease,transform .12s ease}.header-icons .header-right-controls .end-session-icon:hover{color:#d3d3d3!important}.header-icons .zoom-icon{cursor:pointer;color:#fff;font-size:18px;transition:all .2s ease}.header-icons .zoom-icon:hover{color:#d3d3d3}.header-icons .zoom-icon.zoom-active{color:#d3d3d3!important}.header-icons .reset-icon{cursor:pointer;color:#fff;font-size:18px;transition:all .2s ease}.header-icons .reset-icon:hover{color:#d3d3d3}.header-icons .warning-icon{color:#6ccb78;font-size:18px;cursor:help}.header-icons .end-session-icon{cursor:pointer;color:#6ccb78;font-size:18px;transition:all .2s ease}.header-icons .end-session-icon:hover{color:#d3d3d3}.active-objects-content{display:block;width:100%;max-height:278px;overflow:auto;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.active-objects-content::-webkit-scrollbar{width:12px}.active-objects-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}.active-objects-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.active-objects-content::-webkit-scrollbar-thumb:hover{background:#0f1012}.active-objects-content::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}.active-objects-content::-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}.active-objects-content::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}.active-objects-content::-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}.active-objects-content::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}.active-objects-content .zoom-icon{color:#fff;font-size:18px;transition:all .2s ease}.active-objects-content .zoom-icon:hover{color:#6ccb78}.active-objects-content .zoom-icon.zoom-active{color:#6ccb78!important}mat-expansion-panel{border-radius:0!important;box-shadow:none!important;width:100%}mat-expansion-panel:last-child{border-bottom:none}mat-expansion-panel ::ng-deep .mat-expansion-panel-header .mat-content{display:flex;justify-content:space-between;align-items:center;color:#fff}mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding:0}.item-list{display:flex;flex-direction:column}@media (max-width: 768px){.active-objects-wrapper{right:.5em;top:8em;width:280px}.item{padding:6px 10px}}@media (max-width: 480px){.active-objects-wrapper{right:.5em;left:.5em;width:auto}.item-list{max-height:200px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { 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.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { 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: MatExpansionModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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"] }] });
|
|
4780
4817
|
}
|
|
4781
4818
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ActiveObjectsComponent, decorators: [{
|
|
4782
4819
|
type: Component,
|
|
4783
|
-
args: [{ selector: 'activeObjects', imports: [CommonModule, FormsModule, MatExpansionModule, MatIconModule, DragDropModule, MatTooltipModule], template: "<div class=\"active-objects-wrapper global-wrapper-container\" cdkDrag cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"dragPosition\" (cdkDragEnded)=\"onDragEnded($event)\" [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-active-objects\" cdkDragHandle>\n <mat-icon class=\"active-object-icon\" (click)=\"zoomToAll()\" matTooltip=\"Aktive objekter\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n format_list_bulleted_add\n </mat-icon>\n\n <div class=\"right-icons\">\n <mat-icon class=\"toggle-icon\" (click)=\"togglePanel()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n\n <div class=\"active-objects-container\">\n @if(!collapsed) {\n <input type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" [(ngModel)]=\"opacity\" (input)=\"updateOpacity()\"\n (mousedown)=\"stopDrag($event)\" (touchstart)=\"stopDrag($event)\" (pointerdown)=\"stopDrag($event)\">\n <div class=\"header-icons\">\n <div class=\"header-left-controls\">\n <mat-icon class=\"zoom-icon\" [class.zoom-active]=\"isZoomedToAll\" (click)=\"zoomToAll()\"\n matTooltip=\"Zoom til alle\" matTooltipPosition=\"above\">\n fit_screen\n </mat-icon>\n <mat-icon class=\"reset-icon\" (click)=\"reset()\" matTooltip=\"Nulstil\" matTooltipPosition=\"above\">\n replay\n </mat-icon>\n </div>\n\n <div class=\"header-right-controls\">\n @if(!centerPointOk) {\n <mat-icon class=\"warning-icon\" matTooltip=\"Der er ikke noget centerpunkt og det skal der v\u00E6re\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n warning\n </mat-icon>\n } @else if (allFeaturesOk) { \n @if (endSessionButtonLabel) {\n <button (click)=\"endSession()\" matTooltip=\"Afslut\" [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n {{endSessionButtonLabel}}\n </button>\n } @else {\n <mat-icon class=\"end-session-icon\" (click)=\"endSession()\" matTooltip=\"Afslut\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n done_all\n </mat-icon>\n }\n }\n </div>\n </div>\n }\n\n @if(!collapsed) {\n <div class=\"active-objects-content\">\n <div class=\"item-list\">\n @for(item of activeFeatures; track item.id) {\n <div class=\"item\" [class.listhighlight]=\"listHighlightedIds.has(item.id)\" [attr.data-id]=\"item.id\">\n <div class=\"item-text\">\n <span (click)=\"highlight(item.id)\" class=\"item-id\">{{item.display}} {{item.area}}</span>\n @if(item.containedMissingIn && item.containedMissingIn.length > 0) {\n <div class=\"item-warning\">\n <mat-icon>error</mat-icon>\n <span>Udenfor {{item.containedMissingIn.join(', ')}}</span>\n </div>\n }\n </div>\n <img \n [src]=\"wktIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"showItemWKT(item.feature)\" \n matTooltip=\"Vis WKT\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Vis WKT\">\n \n\n @if(!item.locked) {\n <mat-icon (click)=\"delete(item.id)\" matTooltip=\"Slet\" [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n delete\n </mat-icon>\n }\n </div>\n }\n </div>\n\n </div>\n }\n </div>\n</div>", styles: [".active-objects-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:2;box-shadow:0 2px 10px #0000001a;width:350px;transition:width .3s ease,max-width .3s ease;border-radius:5px!important}.active-objects-wrapper.collapsed .drag-handle-active-objects .active-object-icon{cursor:default!important}.active-objects-wrapper.collapsed .drag-handle-active-objects .right-icons .toggle-icon{cursor:pointer!important}.active-objects-wrapper :not(.collapsed){max-width:350px}.active-objects-wrapper.cdk-drag-dragging{opacity:.8;z-index:1001}.listhighlight{color:#0af!important;font-weight:700}.item{display:flex;justify-content:space-between;align-items:center;padding:0 14px;border-radius:5px;background:transparent!important;transition:all .2s ease;color:#fff;min-height:40px;cursor:default}.item .item-text{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;gap:4px}.item .item-text .item-warning{display:inline-flex;align-items:center;gap:6px;font-size:11px;width:fit-content;max-width:100%;color:#dfca0e;margin-top:2px;margin-bottom:2px}.item .item-text .item-warning mat-icon{font-size:14px;width:14px;height:14px;color:#dfca0e;margin:0;cursor:default;flex-shrink:0}.item .item-text .item-warning mat-icon:hover{color:#ccb913}.item .item-text .item-warning span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.item .item-id{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}.item .item-area{color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}.item mat-icon{cursor:pointer;color:#bdc1c3cc;font-size:18px;width:18px;height:18px;flex-shrink:0;margin-left:8px;transition:color .2s ease,background .2s ease}.item mat-icon:hover{color:#d3d3d3}.highlight-active{color:#6ccb78!important;transition:all .2s ease}.drag-handle-active-objects .active-object-icon{cursor:default!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-active-objects .right-icons{display:flex;align-items:center;gap:7px}.drag-handle-active-objects .right-icons .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-active-objects .right-icons .toggle-icon:hover{color:#d3d3d3}.active-objects-container{display:flex;flex-direction:column;width:100%;transition:all .3s ease;cursor:default;box-sizing:border-box;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.active-objects-container .panel-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;cursor:default;background:color-mix(in srgb,#000 70%,transparent);border-bottom:1px solid rgba(255,255,255,.1)}.active-objects-container .collapsed-title{color:#fff;font-weight:600;font-size:12px;padding:8px 4px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease;white-space:nowrap;text-align:center}.active-objects-container .collapsed-title:hover{color:#1976d2}.active-objects-container input[type=range]{width:95%;height:4px;margin:8px auto;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none}.active-objects-container input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}.active-objects-container input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}.active-objects-container input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}.active-objects-container input[type=range]::-moz-range-thumb:hover{background:#6ccb78}.header-icons{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:8px!important;padding:5px 10px!important}.header-icons .header-left-controls,.header-icons .header-right-controls{display:flex;align-items:center;gap:8px}.header-icons .header-right-controls button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:0 12px;height:26px;min-width:56px;max-width:150px;background:linear-gradient(135deg,#6ccb781f,#6ccb780f);border:1px solid rgba(108,203,120,.55);border-radius:5px;color:#6ccb78;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;outline:none;box-shadow:0 0 #6ccb7800,inset 0 1px #ffffff0f;transition:background .22s ease,border-color .22s ease,color .22s ease,box-shadow .22s ease,transform .12s ease}.header-icons .header-right-controls button mat-icon{font-size:14px;width:14px;height:14px;flex-shrink:0;transition:transform .3s ease;margin:0}.header-icons .header-right-controls button:hover{background:linear-gradient(135deg,#6ccb7838,#6ccb781a);border-color:#6ccb78e6;color:#88d994}.header-icons .header-right-controls button:hover mat-icon{transform:scale(1.15)}.header-icons .header-right-controls button:active{background:#6ccb782e;border-color:#6ccb78;color:#fff;box-shadow:0 0 6px #6ccb7833,inset 0 2px 4px #0000004d;transform:translateY(0)}.header-icons .header-right-controls button:focus-visible{outline:2px solid rgba(108,203,120,.6);outline-offset:2px}.header-icons .header-right-controls .end-session-icon{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:5px;color:#fff;cursor:pointer;transition:color .2s ease,background .2s ease,box-shadow .2s ease,transform .12s ease}.header-icons .header-right-controls .end-session-icon:hover{color:#d3d3d3!important}.header-icons .zoom-icon{cursor:pointer;color:#fff;font-size:18px;transition:all .2s ease}.header-icons .zoom-icon:hover{color:#d3d3d3}.header-icons .zoom-icon.zoom-active{color:#d3d3d3!important}.header-icons .reset-icon{cursor:pointer;color:#fff;font-size:18px;transition:all .2s ease}.header-icons .reset-icon:hover{color:#d3d3d3}.header-icons .warning-icon{color:#6ccb78;font-size:18px;cursor:help}.header-icons .end-session-icon{cursor:pointer;color:#6ccb78;font-size:18px;transition:all .2s ease}.header-icons .end-session-icon:hover{color:#d3d3d3}.active-objects-content{display:block;width:100%;max-height:278px;overflow:auto;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.active-objects-content::-webkit-scrollbar{width:12px}.active-objects-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}.active-objects-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.active-objects-content::-webkit-scrollbar-thumb:hover{background:#0f1012}.active-objects-content::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}.active-objects-content::-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}.active-objects-content::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}.active-objects-content::-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}.active-objects-content::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}.active-objects-content .zoom-icon{color:#fff;font-size:18px;transition:all .2s ease}.active-objects-content .zoom-icon:hover{color:#6ccb78}.active-objects-content .zoom-icon.zoom-active{color:#6ccb78!important}mat-expansion-panel{border-radius:0!important;box-shadow:none!important;width:100%}mat-expansion-panel:last-child{border-bottom:none}mat-expansion-panel ::ng-deep .mat-expansion-panel-header .mat-content{display:flex;justify-content:space-between;align-items:center;color:#fff}mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding:0}.item-list{display:flex;flex-direction:column}@media (max-width: 768px){.active-objects-wrapper{right:.5em;top:8em;width:280px}.item{padding:6px 10px}}@media (max-width: 480px){.active-objects-wrapper{right:.5em;left:.5em;max-width:calc(100vw - 1em);width:auto}.item-list{max-height:200px}}\n"] }]
|
|
4820
|
+
args: [{ selector: 'activeObjects', imports: [CommonModule, FormsModule, MatExpansionModule, MatIconModule, DragDropModule, MatTooltipModule], template: "<div class=\"active-objects-wrapper global-wrapper-container\" cdkDrag cdkDragBoundary=\".map-container\"\n [cdkDragFreeDragPosition]=\"dragPosition\" (cdkDragEnded)=\"onDragEnded($event)\" [class.collapsed]=\"collapsed\">\n <div class=\"drag-handle-active-objects\" cdkDragHandle>\n <mat-icon class=\"active-object-icon\" (click)=\"zoomToAll()\" matTooltip=\"Aktive objekter\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n format_list_bulleted_add\n </mat-icon>\n\n <div class=\"right-icons\">\n <mat-icon class=\"toggle-icon\" (click)=\"togglePanel()\">\n {{ collapsed ? 'flip_to_front' : 'remove' }}\n </mat-icon>\n </div>\n </div>\n\n <div class=\"active-objects-container\">\n @if(!collapsed) {\n <input type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" [(ngModel)]=\"opacity\" (input)=\"updateOpacity()\"\n (mousedown)=\"stopDrag($event)\" (touchstart)=\"stopDrag($event)\" (pointerdown)=\"stopDrag($event)\">\n <div class=\"header-icons\">\n <div class=\"header-left-controls\">\n <mat-icon class=\"zoom-icon\" [class.zoom-active]=\"isZoomedToAll\" (click)=\"zoomToAll()\"\n matTooltip=\"Zoom til alle\" matTooltipPosition=\"above\">\n fit_screen\n </mat-icon>\n <mat-icon class=\"reset-icon\" (click)=\"reset()\" matTooltip=\"Nulstil\" matTooltipPosition=\"above\">\n replay\n </mat-icon>\n </div>\n\n <div class=\"header-right-controls\">\n @if(!centerPointOk) {\n <mat-icon class=\"warning-icon\" matTooltip=\"Der er ikke noget centerpunkt og det skal der v\u00E6re\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n warning\n </mat-icon>\n } @else if (allFeaturesOk) { \n @if (endSessionButtonLabel) {\n <button (click)=\"endSession()\" matTooltip=\"Afslut\" [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n {{endSessionButtonLabel}}\n </button>\n } @else {\n <mat-icon class=\"end-session-icon\" (click)=\"endSession()\" matTooltip=\"Afslut\"\n [matTooltipShowDelay]=\"500\" [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n done_all\n </mat-icon>\n }\n }\n </div>\n </div>\n }\n\n @if(!collapsed) {\n <div class=\"active-objects-content\">\n <div class=\"item-list\">\n @for(item of activeFeatures; track item.id) {\n <div class=\"item\" [class.listhighlight]=\"listHighlightedIds.has(item.id)\" [attr.data-id]=\"item.id\">\n <div class=\"item-text\">\n <span (click)=\"highlight(item.id)\" class=\"item-id\">{{item.display}} {{item.area}}</span>\n @if(item.containedMissingIn && item.containedMissingIn.length > 0) {\n <div class=\"item-warning\">\n <mat-icon>error</mat-icon>\n <span>Udenfor {{item.containedMissingIn.join(', ')}}</span>\n </div>\n }\n </div>\n <img \n [src]=\"wktIconBase64\" \n class=\"compact-icon custom-image-icon\"\n (click)=\"showItemWKT(item.feature)\" \n matTooltip=\"Vis WKT\" \n [matTooltipShowDelay]=\"200\"\n [matTooltipHideDelay]=\"300\" \n matTooltipClass=\"custom-tooltip\"\n matTooltipPosition=\"below\"\n alt=\"Vis WKT\">\n \n\n @if(!item.locked) {\n <mat-icon (click)=\"delete(item.id)\" matTooltip=\"Slet\" [matTooltipShowDelay]=\"500\"\n [matTooltipHideDelay]=\"100\" matTooltipPosition=\"above\">\n delete\n </mat-icon>\n }\n </div>\n }\n </div>\n\n </div>\n }\n </div>\n</div>", styles: [".active-objects-wrapper{position:absolute;top:0!important;left:0!important;margin:0!important;z-index:2;box-shadow:0 2px 10px #0000001a;width:350px;transition:width .3s ease,max-width .3s ease;border-radius:5px!important}.active-objects-wrapper.collapsed .drag-handle-active-objects .active-object-icon{cursor:default!important}.active-objects-wrapper.collapsed .drag-handle-active-objects .right-icons .toggle-icon{cursor:pointer!important}.active-objects-wrapper :not(.collapsed){max-width:350px}.active-objects-wrapper.cdk-drag-dragging{opacity:.8;z-index:1001}.listhighlight{color:#0af!important;font-weight:700}.item{display:flex;justify-content:space-between;align-items:center;padding:0 14px;border-radius:5px;background:transparent!important;transition:all .2s ease;color:#fff;min-height:40px;cursor:default}.item .item-text{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;gap:4px}.item .item-text .item-warning{display:inline-flex;align-items:center;gap:6px;font-size:11px;width:fit-content;max-width:100%;color:#dfca0e;margin-top:2px;margin-bottom:2px}.item .item-text .item-warning mat-icon{font-size:14px;width:14px;height:14px;color:#dfca0e;margin:0;cursor:default;flex-shrink:0}.item .item-text .item-warning mat-icon:hover{color:#ccb913}.item .item-text .item-warning span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.item .item-id{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}.item .item-area{color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:250px}.item mat-icon{cursor:pointer;color:#bdc1c3cc;font-size:18px;width:18px;height:18px;flex-shrink:0;margin-left:8px;transition:color .2s ease,background .2s ease}.item mat-icon:hover{color:#d3d3d3}.highlight-active{color:#6ccb78!important;transition:all .2s ease}.drag-handle-active-objects .active-object-icon{cursor:default!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-active-objects .right-icons{display:flex;align-items:center;gap:7px}.drag-handle-active-objects .right-icons .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-active-objects .right-icons .toggle-icon:hover{color:#d3d3d3}.active-objects-container{display:flex;flex-direction:column;width:100%;transition:all .3s ease;cursor:default;box-sizing:border-box;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.active-objects-container .panel-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;cursor:default;background:color-mix(in srgb,#000 70%,transparent);border-bottom:1px solid rgba(255,255,255,.1)}.active-objects-container .collapsed-title{color:#fff;font-weight:600;font-size:12px;padding:8px 4px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease;white-space:nowrap;text-align:center}.active-objects-container .collapsed-title:hover{color:#1976d2}.active-objects-container input[type=range]{width:95%;height:4px;margin:8px auto;-webkit-appearance:none;background:#fff3;border-radius:2px;outline:none}.active-objects-container input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:background .2s ease}.active-objects-container input[type=range]::-webkit-slider-thumb:hover{background:#6ccb78}.active-objects-container input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none}.active-objects-container input[type=range]::-moz-range-thumb:hover{background:#6ccb78}.header-icons{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:8px!important;padding:5px 10px!important}.header-icons .header-left-controls,.header-icons .header-right-controls{display:flex;align-items:center;gap:8px}.header-icons .header-right-controls button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:0 12px;height:26px;min-width:56px;max-width:150px;background:linear-gradient(135deg,#6ccb781f,#6ccb780f);border:1px solid rgba(108,203,120,.55);border-radius:5px;color:#6ccb78;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;outline:none;box-shadow:0 0 #6ccb7800,inset 0 1px #ffffff0f;transition:background .22s ease,border-color .22s ease,color .22s ease,box-shadow .22s ease,transform .12s ease}.header-icons .header-right-controls button mat-icon{font-size:14px;width:14px;height:14px;flex-shrink:0;transition:transform .3s ease;margin:0}.header-icons .header-right-controls button:hover{background:linear-gradient(135deg,#6ccb7838,#6ccb781a);border-color:#6ccb78e6;color:#88d994}.header-icons .header-right-controls button:hover mat-icon{transform:scale(1.15)}.header-icons .header-right-controls button:active{background:#6ccb782e;border-color:#6ccb78;color:#fff;box-shadow:0 0 6px #6ccb7833,inset 0 2px 4px #0000004d;transform:translateY(0)}.header-icons .header-right-controls button:focus-visible{outline:2px solid rgba(108,203,120,.6);outline-offset:2px}.header-icons .header-right-controls .end-session-icon{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:5px;color:#fff;cursor:pointer;transition:color .2s ease,background .2s ease,box-shadow .2s ease,transform .12s ease}.header-icons .header-right-controls .end-session-icon:hover{color:#d3d3d3!important}.header-icons .zoom-icon{cursor:pointer;color:#fff;font-size:18px;transition:all .2s ease}.header-icons .zoom-icon:hover{color:#d3d3d3}.header-icons .zoom-icon.zoom-active{color:#d3d3d3!important}.header-icons .reset-icon{cursor:pointer;color:#fff;font-size:18px;transition:all .2s ease}.header-icons .reset-icon:hover{color:#d3d3d3}.header-icons .warning-icon{color:#6ccb78;font-size:18px;cursor:help}.header-icons .end-session-icon{cursor:pointer;color:#6ccb78;font-size:18px;transition:all .2s ease}.header-icons .end-session-icon:hover{color:#d3d3d3}.active-objects-content{display:block;width:100%;max-height:278px;overflow:auto;border-bottom-left-radius:5px!important;border-bottom-right-radius:5px!important}.active-objects-content::-webkit-scrollbar{width:12px}.active-objects-content::-webkit-scrollbar-track{background:#757474;border-radius:8px}.active-objects-content::-webkit-scrollbar-thumb{background:#1a1c1f;border-radius:8px;border:2px solid #2a2c30}.active-objects-content::-webkit-scrollbar-thumb:hover{background:#0f1012}.active-objects-content::-webkit-scrollbar-button{width:12px;height:16px;background:#2a2c30;border:1px solid #1a1c1f}.active-objects-content::-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}.active-objects-content::-webkit-scrollbar-button:vertical:decrement:hover{background-color:#1a1c1f}.active-objects-content::-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}.active-objects-content::-webkit-scrollbar-button:vertical:increment:hover{background-color:#1a1c1f}.active-objects-content .zoom-icon{color:#fff;font-size:18px;transition:all .2s ease}.active-objects-content .zoom-icon:hover{color:#6ccb78}.active-objects-content .zoom-icon.zoom-active{color:#6ccb78!important}mat-expansion-panel{border-radius:0!important;box-shadow:none!important;width:100%}mat-expansion-panel:last-child{border-bottom:none}mat-expansion-panel ::ng-deep .mat-expansion-panel-header .mat-content{display:flex;justify-content:space-between;align-items:center;color:#fff}mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding:0}.item-list{display:flex;flex-direction:column}@media (max-width: 768px){.active-objects-wrapper{right:.5em;top:8em;width:280px}.item{padding:6px 10px}}@media (max-width: 480px){.active-objects-wrapper{right:.5em;left:.5em;width:auto}.item-list{max-height:200px}}\n"] }]
|
|
4784
4821
|
}], ctorParameters: () => [], propDecorators: { settings: [{
|
|
4785
4822
|
type: Input,
|
|
4786
4823
|
args: [{ required: true }]
|
|
@@ -5206,12 +5243,12 @@ class LegendsListComponent {
|
|
|
5206
5243
|
})));
|
|
5207
5244
|
}
|
|
5208
5245
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LegendsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5209
|
-
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{
|
|
5246
|
+
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{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.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"] }] });
|
|
5210
5247
|
}
|
|
5211
5248
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LegendsListComponent, decorators: [{
|
|
5212
5249
|
type: Component,
|
|
5213
5250
|
args: [{ selector: 'lib-legends-list', imports: [MatFormFieldModule, CommonModule, MatIconModule, FormsModule, DragDropModule,
|
|
5214
|
-
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{
|
|
5251
|
+
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{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.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"] }]
|
|
5215
5252
|
}], propDecorators: { map: [{
|
|
5216
5253
|
type: Input
|
|
5217
5254
|
}], profile: [{
|
|
@@ -5235,7 +5272,6 @@ class FeatureLoaderService {
|
|
|
5235
5272
|
return;
|
|
5236
5273
|
const allTheFeatures = settings.geometryTypeSettings.filter(gt => gt.features).map(gt => {
|
|
5237
5274
|
const rawFeatures = this.fomatter.readFeatures(gt.features);
|
|
5238
|
-
console.log("🚀 ~ FeatureLoaderService ~ loadFeaturesSettings ~ rawFeatures:", rawFeatures);
|
|
5239
5275
|
rawFeatures.forEach(f => {
|
|
5240
5276
|
this._featureHelper.setId(f);
|
|
5241
5277
|
this._featureHelper.setTypeId(f, gt.typeId);
|
|
@@ -5753,7 +5789,7 @@ class GisKomponentComponent {
|
|
|
5753
5789
|
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,
|
|
5754
5790
|
HighlightService, ShowInfoService, InfoSearchProvider, InteractionHelperService, ConflictAnalysisSearchProvider,
|
|
5755
5791
|
MergeFeaturesService, OverlapService, CowiService, SearchProviderService, AddressSearchService, CadastreSearchService, ShowDocumentInfoService, DocumentSearchService,
|
|
5756
|
-
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=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out,::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 .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:100%;display:flex;justify-content:end}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important}\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" }] });
|
|
5792
|
+
DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService], viewQueries: [{ propertyName: "toolbarRef", first: true, predicate: ["toolbarRef"], descendants: true, static: true }, { propertyName: "legendsListRef", first: true, predicate: ["legendsListRef"], descendants: true, static: true }, { propertyName: "layerSelectorRef", first: true, predicate: ["layerSelectorRef"], descendants: true, static: true }, { propertyName: "activeObjectsRef", first: true, predicate: ["activeObjectsRef"], descendants: true, static: true }, { propertyName: "documentInfoRef", first: true, predicate: ["documentInfoRef"], descendants: true, static: true }], ngImport: i0, template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out,::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}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:100%;display:flex;justify-content:end}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important}\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" }] });
|
|
5757
5793
|
}
|
|
5758
5794
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: GisKomponentComponent, decorators: [{
|
|
5759
5795
|
type: Component,
|
|
@@ -5761,7 +5797,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
5761
5797
|
LegendsListComponent, DocumentSearchInfoComponent], providers: [CurrentItemsService, FeatureLoaderService, DrawLayerSourceService, ZoomService, UndoRedoService, ShowInfoHoverService, HoverInfoSearchService, CenterPointService, PrintDrawLayerSourceService,
|
|
5762
5798
|
HighlightService, ShowInfoService, InfoSearchProvider, InteractionHelperService, ConflictAnalysisSearchProvider,
|
|
5763
5799
|
MergeFeaturesService, OverlapService, CowiService, SearchProviderService, AddressSearchService, CadastreSearchService, ShowDocumentInfoService, DocumentSearchService,
|
|
5764
|
-
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=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out,::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 .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:100%;display:flex;justify-content:end}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important}\n"] }]
|
|
5800
|
+
DmpCatalogService, OlCapabilitiesService, DmpLayerMapperService, GeometrySearchService, GeometrySplitService], template: "<div #layerSelectorRef class=\"layer-selector-container\">\n @if (selectedProfile && selectedProfile.showLayerSelector) {\n <lib-layer-selector [map]=\"map\" [profile]=\"selectedProfile\" [currentZoomLevel]=\"currentZoomLevel\"></lib-layer-selector>\n }\n</div>\n\n<div #legendsListRef class=\"legends-list-container\">\n @if (selectedProfile && selectedProfile.showLegends) {\n <lib-legends-list [map]=\"map\" [profile]=\"selectedProfile\"></lib-legends-list>\n }\n</div>\n\n<div #documentInfoRef class=\"documents-features-wrapper\">\n <document-search-info></document-search-info>\n</div>\n\n<div #activeObjectsRef class=\"active-objects-container\">\n @if(showActiveObjects && settings && selectedProfile) {\n <activeObjects [settings]=\"settings\" [profile]=\"selectedProfile\" (sessionDone)=\"sessionDoneFromActiveObject()\"></activeObjects>\n }\n</div>\n\n<div #toolbarRef class=\"map-toolbar-container\">\n @if (settings) {\n <map-toolbox [map]=\"map\" \n [profile]=\"selectedProfile\"\n [settings]=\"settings\"\n [class.toolbox-hidden]=\"!profileShowToolbox\"\n [collapsed]=\"toolbarCollapsed\" [WKTInputEnabled]=\"settings?.WKTInputEnabled\" [deleteEnabled]=\"settings?.deleteEnabled\" [showMeasureArea]=\"selectedProfile?.showAreaMeasurement || false\" [showMeasureDistance]=\"selectedProfile?.showDistanceMeasurement || false\"></map-toolbox>\n }\n</div>\n\n<div class=\"map-container\">\n <lib-map-search *ngIf=\"showSearch\" [profile]=\"selectedProfile\"></lib-map-search>\n\n <!-- Kort -->\n <div id=\"map\" class=\"map\"></div>\n</div>\n", styles: ["::ng-deep .global-wrapper-container{background:#4c4d51}::ng-deep .dmp-dialog-content mat-dialog-content{background:#4c4d51!important}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input{color:#fff!important;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}::ng-deep .dmp-dialog-content mat-dialog-content .search-section mat-form-field input .search-icon{color:#fff!important}::ng-deep button.ol-zoom-in,::ng-deep button.ol-zoom-out,::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}::ng-deep .mat-mdc-tooltip{--mdc-plain-tooltip-container-color: #050505 !important;--mdc-plain-tooltip-supporting-text-color: white !important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip .mdc-tooltip__surface{background-color:#050505!important;color:#fff!important;border-radius:6px;font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mat-mdc-tooltip-surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}::ng-deep .mdc-tooltip .mdc-tooltip__surface{font-family:Avenir Next W01,Lato,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;font-weight:500}:host{display:block;width:100%;height:100%;overflow:hidden}::ng-deep .lib-error-snackbar{background-color:#d32f2f;color:#fff;font-weight:500}::ng-deep .map-container{position:relative;height:81vh;width:100%;overflow:hidden}::ng-deep .toolbox-hidden{visibility:hidden!important}::ng-deep #map{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}::ng-deep .ol-viewport{overflow:hidden!important}::ng-deep ::ng-deep .ol-logo{position:absolute;left:auto;right:3em;top:6.25em}::ng-deep ::ng-deep .ol-copyright{background-color:transparent;position:absolute;bottom:10px;width:100%;display:flex;justify-content:end}::ng-deep ::ng-deep .toolbar{position:absolute;top:10px;left:10px;background:#fff;padding:4px;border-radius:4px;display:flex;flex-direction:column;transition:width .3s;z-index:1000;overflow:hidden}::ng-deep ::ng-deep .toolbar.collapsed{width:40px;overflow:hidden}::ng-deep .object-panel{position:absolute;bottom:10px;left:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .object-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep .conflict-panel{position:absolute;bottom:10px;right:10px;background:#fff;padding:8px;border-radius:4px;z-index:1000;max-height:calc(85vh - 20px);overflow-y:auto}::ng-deep .conflict-panel .header{display:flex;justify-content:space-between;padding:8px;cursor:pointer;background:#f0f0f0}::ng-deep ::ng-deep .ol-zoom.ol-unselectable.ol-control{display:flex;flex-direction:column;position:absolute}::ng-deep ::ng-deep .ol-scale-text{display:flex}::ng-deep .ol-scale-bar.ol-unselectable{position:absolute;bottom:3rem}::ng-deep .ol-mouse-position{position:absolute;bottom:10px;left:6px;top:auto;background:#0000004d;color:#fffcfc;width:189px;height:30px;padding:2px;border-radius:5px;text-align:center;display:flex;align-items:center;justify-content:flex-start;z-index:1000}::ng-deep .documents-features-wrapper{position:absolute!important}\n"] }]
|
|
5765
5801
|
}], ctorParameters: () => [], propDecorators: { identifier: [{
|
|
5766
5802
|
type: Input,
|
|
5767
5803
|
args: [{ required: true }]
|