@acorex/cdk 18.10.4 → 18.10.6

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.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9tYXAvc3JjL2Fjb3JleC1jZGstbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './map.class';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9tYXAvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tYXAuY2xhc3MnO1xuIl19
@@ -0,0 +1,154 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as L from 'leaflet';
3
+ import 'leaflet-draw';
4
+ import 'leaflet.locatecontrol';
5
+ export class AXLeafletService {
6
+ constructor(mapElement, location, zoom) {
7
+ this.drawnItems = new L.FeatureGroup();
8
+ this.onMarkerChanged = new EventEmitter();
9
+ this.onMarkerAdded = new EventEmitter();
10
+ this.onLocationFound = new EventEmitter();
11
+ this.setCustomIcons();
12
+ const map = L.map(mapElement).setView([location.latitude, location.longitude], zoom);
13
+ L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
14
+ maxZoom: 18,
15
+ attribution: '© ACoreX',
16
+ }).addTo(map);
17
+ this.drawnItems.addTo(map);
18
+ this.map = map;
19
+ }
20
+ setCustomIcons() {
21
+ // Define the paths to your custom icons
22
+ const iconPath = './';
23
+ const defaultIcon = new L.Icon({
24
+ iconUrl: `${iconPath}marker-icon.png`, // Custom marker icon path
25
+ iconSize: [25, 41], // Size of the icon
26
+ iconAnchor: [12, 41], // Point of the icon which will correspond to marker's location
27
+ shadowUrl: `${iconPath}marker-shadow.png`, // Custom marker shadow path
28
+ shadowSize: [41, 41], // Size of the shadow
29
+ shadowAnchor: [12, 41], // Point of the shadow which will correspond to marker's location
30
+ });
31
+ // Set the custom icon as the default icon
32
+ L.Marker.prototype.options.icon = defaultIcon;
33
+ }
34
+ getMap() {
35
+ return this.map;
36
+ }
37
+ setZoomLevel(zoom) {
38
+ this.map.setZoom(zoom);
39
+ }
40
+ setCenter(location) {
41
+ this.map.setView([location.latitude, location.longitude], this.map.getZoom());
42
+ }
43
+ flyTo(location, zoom, setMarker = false, duration = 1.0) {
44
+ if (this.map) {
45
+ this.map.flyTo([location.latitude, location.longitude], zoom || this.map.getZoom(), {
46
+ animate: true,
47
+ duration: duration,
48
+ });
49
+ this.map.once('moveend', () => {
50
+ if (setMarker) {
51
+ this.addMarker(location);
52
+ }
53
+ });
54
+ }
55
+ }
56
+ addMarker(locations) {
57
+ const locationsArray = Array.isArray(locations) ? locations : [locations];
58
+ locationsArray.forEach((location) => {
59
+ L.marker([location.latitude, location.longitude]).addTo(this.drawnItems);
60
+ this.onMarkerAdded.emit(location);
61
+ });
62
+ }
63
+ getMarkers() {
64
+ return this.drawnItems
65
+ .getLayers()
66
+ .filter((layer) => layer instanceof L.Marker)
67
+ .map((marker) => {
68
+ const latLng = marker.getLatLng();
69
+ return {
70
+ latitude: latLng.lat,
71
+ longitude: latLng.lng,
72
+ };
73
+ });
74
+ }
75
+ addDrawControl(position = 'topleft') {
76
+ const drawControl = new L.Control.Draw({
77
+ position: position,
78
+ edit: {
79
+ featureGroup: this.drawnItems,
80
+ },
81
+ draw: {
82
+ polygon: false,
83
+ polyline: false,
84
+ rectangle: false,
85
+ circle: false,
86
+ circlemarker: false,
87
+ },
88
+ });
89
+ this.drawControl = drawControl;
90
+ this.map.addControl(drawControl);
91
+ this.map.on(L.Draw.Event.CREATED, (event) => {
92
+ const layer = event.layer;
93
+ this.drawnItems.addLayer(layer);
94
+ const latLng = event.layer.getLatLng();
95
+ this.onMarkerAdded.emit({ latitude: latLng.lat, longitude: latLng.lng });
96
+ });
97
+ this.map.on(L.Draw.Event.DELETED, () => {
98
+ this.onMarkerChanged.emit(this.getMarkers());
99
+ });
100
+ this.map.on(L.Draw.Event.EDITED, () => {
101
+ this.onMarkerChanged.emit(this.getMarkers());
102
+ });
103
+ }
104
+ addLocateControl(position = 'bottomright') {
105
+ const locateControl = L.control
106
+ .locate({
107
+ position: position,
108
+ flyTo: true,
109
+ setView: 'untilPanOrZoom',
110
+ showPopup: true,
111
+ onLocationError: (e) => alert(e.message),
112
+ onLocationOutsideMapBounds: (control) => control.stop(),
113
+ locateOptions: {
114
+ enableHighAccuracy: true,
115
+ },
116
+ strings: {
117
+ title: 'Show my location',
118
+ popup: 'You are within {distance} meters from this point',
119
+ outsideMapBoundsMsg: 'You seem to be outside the map bounds',
120
+ },
121
+ })
122
+ .addTo(this.map);
123
+ this.locateControl = locateControl;
124
+ this.map.on('locationfound', (event) => {
125
+ const location = {
126
+ latitude: event.latitude,
127
+ longitude: event.longitude,
128
+ precision: event.accuracy,
129
+ };
130
+ this.onLocationFound.emit(location);
131
+ });
132
+ }
133
+ removeDrawControl() {
134
+ if (this.drawControl) {
135
+ this.map.removeControl(this.drawControl);
136
+ this.drawnItems.clearLayers();
137
+ this.drawControl = undefined;
138
+ this.map.off(L.Draw.Event.CREATED);
139
+ }
140
+ }
141
+ removeLocateControl() {
142
+ if (this.locateControl) {
143
+ this.map.removeControl(this.locateControl);
144
+ this.locateControl = undefined;
145
+ this.map.off('locationfound');
146
+ this.map.off('locationerror');
147
+ }
148
+ }
149
+ destroyMap() {
150
+ this.map.off();
151
+ this.map.remove();
152
+ }
153
+ }
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvbWFwL3NyYy9tYXAuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLGNBQWMsQ0FBQztBQUN0QixPQUFPLHVCQUF1QixDQUFDO0FBVS9CLE1BQU0sT0FBTyxnQkFBZ0I7SUFTM0IsWUFBWSxVQUF3QixFQUFFLFFBQXdCLEVBQUUsSUFBYTtRQUxyRSxlQUFVLEdBQW1CLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDdEQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNsRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRzFELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXJGLENBQUMsQ0FBQyxTQUFTLENBQUMsb0RBQW9ELEVBQUU7WUFDaEUsT0FBTyxFQUFFLEVBQUU7WUFDWCxXQUFXLEVBQUUsVUFBVTtTQUN4QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUNPLGNBQWM7UUFDcEIsd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElB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dCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgJ2xlYWZsZXQtZHJhdyc7XG5pbXBvcnQgJ2xlYWZsZXQubG9jYXRlY29udHJvbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhNYXBMb2NhdGlvbiB7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgQVhNYXBDb250cm9sUGxhY2UgPSAndG9wbGVmdCcgfCAndG9wcmlnaHQnIHwgJ2JvdHRvbWxlZnQnIHwgJ2JvdHRvbXJpZ2h0JztcblxuZXhwb3J0IGNsYXNzIEFYTGVhZmxldFNlcnZpY2Uge1xuICBwcml2YXRlIG1hcD86IEwuTWFwO1xuICBwcml2YXRlIGRyYXdDb250cm9sPzogTC5Db250cm9sLkRyYXc7XG4gIHByaXZhdGUgbG9jYXRlQ29udHJvbD86IEwuQ29udHJvbC5Mb2NhdGU7XG4gIHByaXZhdGUgZHJhd25JdGVtczogTC5GZWF0dXJlR3JvdXAgPSBuZXcgTC5GZWF0dXJlR3JvdXAoKTtcbiAgcHJpdmF0ZSBvbk1hcmtlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFYTWFwTG9jYXRpb25bXT4oKTtcbiAgcHJpdmF0ZSBvbk1hcmtlckFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBWE1hcExvY2F0aW9uPigpO1xuICBwcml2YXRlIG9uTG9jYXRpb25Gb3VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8QVhNYXBMb2NhdGlvbj4oKTtcblxuICBjb25zdHJ1Y3RvcihtYXBFbGVtZW50PzogSFRNTEVsZW1lbnQsIGxvY2F0aW9uPzogQVhNYXBMb2NhdGlvbiwgem9vbT86IG51bWJlcikge1xuICAgIHRoaXMuc2V0Q3VzdG9tSWNvbnMoKTtcblxuICAgIGNvbnN0IG1hcCA9IEwubWFwKG1hcEVsZW1lbnQpLnNldFZpZXcoW2xvY2F0aW9uLmxhdGl0dWRlLCBsb2NhdGlvbi5sb25naXR1ZGVdLCB6b29tKTtcblxuICAgIEwudGlsZUxheWVyKCdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsIHtcbiAgICAgIG1heFpvb206IDE4LFxuICAgICAgYXR0cmlidXRpb246ICfCqSBBQ29yZVgnLFxuICAgIH0pLmFkZFRvKG1hcCk7XG5cbiAgICB0aGlzLmRyYXduSXRlbXMuYWRkVG8obWFwKTtcbiAgICB0aGlzLm1hcCA9IG1hcDtcbiAgfVxuICBwcml2YXRlIHNldEN1c3RvbUljb25zKCkge1xuICAgIC8vIERlZmluZSB0aGUgcGF0aHMgdG8geW91ciBjdXN0b20gaWNvbnNcbiAgICBjb25zdCBpY29uUGF0aCA9ICcuLyc7XG4gICAgY29uc3QgZGVmYXVsdEljb24gPSBuZXcgTC5JY29uKHtcbiAgICAgIGljb25Vcmw6IGAke2ljb25QYXRofW1hcmtlci1pY29uLnBuZ2AsIC8vIEN1c3RvbSBtYXJrZXIgaWNvbiBwYXRoXG4gICAgICBpY29uU2l6ZTogWzI1LCA0MV0sIC8vIFNpemUgb2YgdGhlIGljb25cbiAgICAgIGljb25BbmNob3I6IFsxMiwgNDFdLCAvLyBQb2ludCBvZiB0aGUgaWNvbiB3aGljaCB3aWxsIGNvcnJlc3BvbmQgdG8gbWFya2VyJ3MgbG9jYXRpb25cbiAgICAgIHNoYWRvd1VybDogYCR7aWNvblBhdGh9bWFya2VyLXNoYWRvdy5wbmdgLCAvLyBDdXN0b20gbWFya2VyIHNoYWRvdyBwYXRoXG4gICAgICBzaGFkb3dTaXplOiBbNDEsIDQxXSwgLy8gU2l6ZSBvZiB0aGUgc2hhZG93XG4gICAgICBzaGFkb3dBbmNob3I6IFsxMiwgNDFdLCAvLyBQb2ludCBvZiB0aGUgc2hhZG93IHdoaWNoIHdpbGwgY29ycmVzcG9uZCB0byBtYXJrZXIncyBsb2NhdGlvblxuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRoZSBjdXN0b20gaWNvbiBhcyB0aGUgZGVmYXVsdCBpY29uXG4gICAgTC5NYXJrZXIucHJvdG90eXBlLm9wdGlvbnMuaWNvbiA9IGRlZmF1bHRJY29uO1xuICB9XG5cbiAgZ2V0TWFwKCk6IEwuTWFwIHtcbiAgICByZXR1cm4gdGhpcy5tYXA7XG4gIH1cblxuICBzZXRab29tTGV2ZWwoem9vbTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXAuc2V0Wm9vbSh6b29tKTtcbiAgfVxuXG4gIHNldENlbnRlcihsb2NhdGlvbjogQVhNYXBMb2NhdGlvbik6IHZvaWQge1xuICAgIHRoaXMubWFwLnNldFZpZXcoW2xvY2F0aW9uLmxhdGl0dWRlLCBsb2NhdGlvbi5sb25naXR1ZGVdLCB0aGlzLm1hcC5nZXRab29tKCkpO1xuICB9XG5cbiAgZmx5VG8obG9jYXRpb246IEFYTWFwTG9jYXRpb24sIHpvb20/OiBudW1iZXIsIHNldE1hcmtlciA9IGZhbHNlLCBkdXJhdGlvbiA9IDEuMCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgdGhpcy5tYXAuZmx5VG8oW2xvY2F0aW9uLmxhdGl0dWRlLCBsb2NhdGlvbi5sb25naXR1ZGVdLCB6b29tIHx8IHRoaXMubWFwLmdldFpvb20oKSwge1xuICAgICAgICBhbmltYXRlOiB0cnVlLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFwLm9uY2UoJ21vdmVlbmQnLCAoKSA9PiB7XG4gICAgICAgIGlmIChzZXRNYXJrZXIpIHtcbiAgICAgICAgICB0aGlzLmFkZE1hcmtlcihsb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFkZE1hcmtlcihsb2NhdGlvbnM6IEFYTWFwTG9jYXRpb24gfCBBWE1hcExvY2F0aW9uW10pOiB2b2lkIHtcbiAgICBjb25zdCBsb2NhdGlvbnNBcnJheSA9IEFycmF5LmlzQXJyYXkobG9jYXRpb25zKSA/IGxvY2F0aW9ucyA6IFtsb2NhdGlvbnNdO1xuICAgIGxvY2F0aW9uc0FycmF5LmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBMLm1hcmtlcihbbG9jYXRpb24ubGF0aXR1ZGUsIGxvY2F0aW9uLmxvbmdpdHVkZV0pLmFkZFRvKHRoaXMuZHJhd25JdGVtcyk7XG4gICAgICB0aGlzLm9uTWFya2VyQWRkZWQuZW1pdChsb2NhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBnZXRNYXJrZXJzKCk6IEFYTWFwTG9jYXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuZHJhd25JdGVtc1xuICAgICAgLmdldExheWVycygpXG4gICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIgaW5zdGFuY2VvZiBMLk1hcmtlcilcbiAgICAgIC5tYXAoKG1hcmtlcikgPT4ge1xuICAgICAgICBjb25zdCBsYXRMbmcgPSAobWFya2VyIGFzIEwuTWFya2VyKS5nZXRMYXRMbmcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYXRpdHVkZTogbGF0TG5nLmxhdCxcbiAgICAgICAgICBsb25naXR1ZGU6IGxhdExuZy5sbmcsXG4gICAgICAgIH0gYXMgQVhNYXBMb2NhdGlvbjtcbiAgICAgIH0pO1xuICB9XG5cbiAgYWRkRHJhd0NvbnRyb2wocG9zaXRpb246IEFYTWFwQ29udHJvbFBsYWNlID0gJ3RvcGxlZnQnKTogdm9pZCB7XG4gICAgY29uc3QgZHJhd0NvbnRyb2wgPSBuZXcgTC5Db250cm9sLkRyYXcoe1xuICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgZWRpdDoge1xuICAgICAgICBmZWF0dXJlR3JvdXA6IHRoaXMuZHJhd25JdGVtcyxcbiAgICAgIH0sXG4gICAgICBkcmF3OiB7XG4gICAgICAgIHBvbHlnb246IGZhbHNlLFxuICAgICAgICBwb2x5bGluZTogZmFsc2UsXG4gICAgICAgIHJlY3RhbmdsZTogZmFsc2UsXG4gICAgICAgIGNpcmNsZTogZmFsc2UsXG4gICAgICAgIGNpcmNsZW1hcmtlcjogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmF3Q29udHJvbCA9IGRyYXdDb250cm9sO1xuICAgIHRoaXMubWFwLmFkZENvbnRyb2woZHJhd0NvbnRyb2wpO1xuXG4gICAgdGhpcy5tYXAub24oTC5EcmF3LkV2ZW50LkNSRUFURUQsIChldmVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBsYXllciA9IGV2ZW50LmxheWVyO1xuICAgICAgdGhpcy5kcmF3bkl0ZW1zLmFkZExheWVyKGxheWVyKTtcbiAgICAgIGNvbnN0IGxhdExuZyA9IGV2ZW50LmxheWVyLmdldExhdExuZygpO1xuICAgICAgdGhpcy5vbk1hcmtlckFkZGVkLmVtaXQoeyBsYXRpdHVkZTogbGF0TG5nLmxhdCwgbG9uZ2l0dWRlOiBsYXRMbmcubG5nIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tYXAub24oTC5EcmF3LkV2ZW50LkRFTEVURUQsICgpID0+IHtcbiAgICAgIHRoaXMub25NYXJrZXJDaGFuZ2VkLmVtaXQodGhpcy5nZXRNYXJrZXJzKCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tYXAub24oTC5EcmF3LkV2ZW50LkVESVRFRCwgKCkgPT4ge1xuICAgICAgdGhpcy5vbk1hcmtlckNoYW5nZWQuZW1pdCh0aGlzLmdldE1hcmtlcnMoKSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMb2NhdGVDb250cm9sKHBvc2l0aW9uOiBBWE1hcENvbnRyb2xQbGFjZSA9ICdib3R0b21yaWdodCcpOiB2b2lkIHtcbiAgICBjb25zdCBsb2NhdGVDb250cm9sID0gTC5jb250cm9sXG4gICAgICAubG9jYXRlKHtcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBmbHlUbzogdHJ1ZSxcbiAgICAgICAgc2V0VmlldzogJ3VudGlsUGFuT3Jab29tJyxcbiAgICAgICAgc2hvd1BvcHVwOiB0cnVlLFxuICAgICAgICBvbkxvY2F0aW9uRXJyb3I6IChlKSA9PiBhbGVydChlLm1lc3NhZ2UpLFxuICAgICAgICBvbkxvY2F0aW9uT3V0c2lkZU1hcEJvdW5kczogKGNvbnRyb2wpID0+IGNvbnRyb2wuc3RvcCgpLFxuICAgICAgICBsb2NhdGVPcHRpb25zOiB7XG4gICAgICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzdHJpbmdzOiB7XG4gICAgICAgICAgdGl0bGU6ICdTaG93IG15IGxvY2F0aW9uJyxcbiAgICAgICAgICBwb3B1cDogJ1lvdSBhcmUgd2l0aGluIHtkaXN0YW5jZX0gbWV0ZXJzIGZyb20gdGhpcyBwb2ludCcsXG4gICAgICAgICAgb3V0c2lkZU1hcEJvdW5kc01zZzogJ1lvdSBzZWVtIHRvIGJlIG91dHNpZGUgdGhlIG1hcCBib3VuZHMnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5hZGRUbyh0aGlzLm1hcCk7XG5cbiAgICB0aGlzLmxvY2F0ZUNvbnRyb2wgPSBsb2NhdGVDb250cm9sO1xuXG4gICAgdGhpcy5tYXAub24oJ2xvY2F0aW9uZm91bmQnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgbG9jYXRpb246IEFYTWFwTG9jYXRpb24gPSB7XG4gICAgICAgIGxhdGl0dWRlOiBldmVudC5sYXRpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlOiBldmVudC5sb25naXR1ZGUsXG4gICAgICAgIHByZWNpc2lvbjogZXZlbnQuYWNjdXJhY3ksXG4gICAgICB9O1xuICAgICAgdGhpcy5vbkxvY2F0aW9uRm91bmQuZW1pdChsb2NhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVEcmF3Q29udHJvbCgpIHtcbiAgICBpZiAodGhpcy5kcmF3Q29udHJvbCkge1xuICAgICAgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLmRyYXdDb250cm9sKTtcbiAgICAgIHRoaXMuZHJhd25JdGVtcy5jbGVhckxheWVycygpO1xuICAgICAgdGhpcy5kcmF3Q29udHJvbCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubWFwLm9mZihMLkRyYXcuRXZlbnQuQ1JFQVRFRCk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTG9jYXRlQ29udHJvbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2NhdGVDb250cm9sKSB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVDb250cm9sKHRoaXMubG9jYXRlQ29udHJvbCk7XG4gICAgICB0aGlzLmxvY2F0ZUNvbnRyb2wgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1hcC5vZmYoJ2xvY2F0aW9uZm91bmQnKTtcbiAgICAgIHRoaXMubWFwLm9mZignbG9jYXRpb25lcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3lNYXAoKSB7XG4gICAgdGhpcy5tYXAub2ZmKCk7XG4gICAgdGhpcy5tYXAucmVtb3ZlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,161 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as L from 'leaflet';
3
+ import 'leaflet-draw';
4
+ import 'leaflet.locatecontrol';
5
+
6
+ class AXLeafletService {
7
+ constructor(mapElement, location, zoom) {
8
+ this.drawnItems = new L.FeatureGroup();
9
+ this.onMarkerChanged = new EventEmitter();
10
+ this.onMarkerAdded = new EventEmitter();
11
+ this.onLocationFound = new EventEmitter();
12
+ this.setCustomIcons();
13
+ const map = L.map(mapElement).setView([location.latitude, location.longitude], zoom);
14
+ L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
15
+ maxZoom: 18,
16
+ attribution: '© ACoreX',
17
+ }).addTo(map);
18
+ this.drawnItems.addTo(map);
19
+ this.map = map;
20
+ }
21
+ setCustomIcons() {
22
+ // Define the paths to your custom icons
23
+ const iconPath = './';
24
+ const defaultIcon = new L.Icon({
25
+ iconUrl: `${iconPath}marker-icon.png`, // Custom marker icon path
26
+ iconSize: [25, 41], // Size of the icon
27
+ iconAnchor: [12, 41], // Point of the icon which will correspond to marker's location
28
+ shadowUrl: `${iconPath}marker-shadow.png`, // Custom marker shadow path
29
+ shadowSize: [41, 41], // Size of the shadow
30
+ shadowAnchor: [12, 41], // Point of the shadow which will correspond to marker's location
31
+ });
32
+ // Set the custom icon as the default icon
33
+ L.Marker.prototype.options.icon = defaultIcon;
34
+ }
35
+ getMap() {
36
+ return this.map;
37
+ }
38
+ setZoomLevel(zoom) {
39
+ this.map.setZoom(zoom);
40
+ }
41
+ setCenter(location) {
42
+ this.map.setView([location.latitude, location.longitude], this.map.getZoom());
43
+ }
44
+ flyTo(location, zoom, setMarker = false, duration = 1.0) {
45
+ if (this.map) {
46
+ this.map.flyTo([location.latitude, location.longitude], zoom || this.map.getZoom(), {
47
+ animate: true,
48
+ duration: duration,
49
+ });
50
+ this.map.once('moveend', () => {
51
+ if (setMarker) {
52
+ this.addMarker(location);
53
+ }
54
+ });
55
+ }
56
+ }
57
+ addMarker(locations) {
58
+ const locationsArray = Array.isArray(locations) ? locations : [locations];
59
+ locationsArray.forEach((location) => {
60
+ L.marker([location.latitude, location.longitude]).addTo(this.drawnItems);
61
+ this.onMarkerAdded.emit(location);
62
+ });
63
+ }
64
+ getMarkers() {
65
+ return this.drawnItems
66
+ .getLayers()
67
+ .filter((layer) => layer instanceof L.Marker)
68
+ .map((marker) => {
69
+ const latLng = marker.getLatLng();
70
+ return {
71
+ latitude: latLng.lat,
72
+ longitude: latLng.lng,
73
+ };
74
+ });
75
+ }
76
+ addDrawControl(position = 'topleft') {
77
+ const drawControl = new L.Control.Draw({
78
+ position: position,
79
+ edit: {
80
+ featureGroup: this.drawnItems,
81
+ },
82
+ draw: {
83
+ polygon: false,
84
+ polyline: false,
85
+ rectangle: false,
86
+ circle: false,
87
+ circlemarker: false,
88
+ },
89
+ });
90
+ this.drawControl = drawControl;
91
+ this.map.addControl(drawControl);
92
+ this.map.on(L.Draw.Event.CREATED, (event) => {
93
+ const layer = event.layer;
94
+ this.drawnItems.addLayer(layer);
95
+ const latLng = event.layer.getLatLng();
96
+ this.onMarkerAdded.emit({ latitude: latLng.lat, longitude: latLng.lng });
97
+ });
98
+ this.map.on(L.Draw.Event.DELETED, () => {
99
+ this.onMarkerChanged.emit(this.getMarkers());
100
+ });
101
+ this.map.on(L.Draw.Event.EDITED, () => {
102
+ this.onMarkerChanged.emit(this.getMarkers());
103
+ });
104
+ }
105
+ addLocateControl(position = 'bottomright') {
106
+ const locateControl = L.control
107
+ .locate({
108
+ position: position,
109
+ flyTo: true,
110
+ setView: 'untilPanOrZoom',
111
+ showPopup: true,
112
+ onLocationError: (e) => alert(e.message),
113
+ onLocationOutsideMapBounds: (control) => control.stop(),
114
+ locateOptions: {
115
+ enableHighAccuracy: true,
116
+ },
117
+ strings: {
118
+ title: 'Show my location',
119
+ popup: 'You are within {distance} meters from this point',
120
+ outsideMapBoundsMsg: 'You seem to be outside the map bounds',
121
+ },
122
+ })
123
+ .addTo(this.map);
124
+ this.locateControl = locateControl;
125
+ this.map.on('locationfound', (event) => {
126
+ const location = {
127
+ latitude: event.latitude,
128
+ longitude: event.longitude,
129
+ precision: event.accuracy,
130
+ };
131
+ this.onLocationFound.emit(location);
132
+ });
133
+ }
134
+ removeDrawControl() {
135
+ if (this.drawControl) {
136
+ this.map.removeControl(this.drawControl);
137
+ this.drawnItems.clearLayers();
138
+ this.drawControl = undefined;
139
+ this.map.off(L.Draw.Event.CREATED);
140
+ }
141
+ }
142
+ removeLocateControl() {
143
+ if (this.locateControl) {
144
+ this.map.removeControl(this.locateControl);
145
+ this.locateControl = undefined;
146
+ this.map.off('locationfound');
147
+ this.map.off('locationerror');
148
+ }
149
+ }
150
+ destroyMap() {
151
+ this.map.off();
152
+ this.map.remove();
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Generated bundle index. Do not edit.
158
+ */
159
+
160
+ export { AXLeafletService };
161
+ //# sourceMappingURL=acorex-cdk-map.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-cdk-map.mjs","sources":["../../../../libs/cdk/map/src/map.class.ts","../../../../libs/cdk/map/src/acorex-cdk-map.ts"],"sourcesContent":["import { EventEmitter } from '@angular/core';\nimport * as L from 'leaflet';\nimport 'leaflet-draw';\nimport 'leaflet.locatecontrol';\n\nexport interface AXMapLocation {\n latitude: number;\n longitude: number;\n precision?: number;\n title?: string;\n}\nexport type AXMapControlPlace = 'topleft' | 'topright' | 'bottomleft' | 'bottomright';\n\nexport class AXLeafletService {\n private map?: L.Map;\n private drawControl?: L.Control.Draw;\n private locateControl?: L.Control.Locate;\n private drawnItems: L.FeatureGroup = new L.FeatureGroup();\n private onMarkerChanged = new EventEmitter<AXMapLocation[]>();\n private onMarkerAdded = new EventEmitter<AXMapLocation>();\n private onLocationFound = new EventEmitter<AXMapLocation>();\n\n constructor(mapElement?: HTMLElement, location?: AXMapLocation, zoom?: number) {\n this.setCustomIcons();\n\n const map = L.map(mapElement).setView([location.latitude, location.longitude], zoom);\n\n L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n maxZoom: 18,\n attribution: '© ACoreX',\n }).addTo(map);\n\n this.drawnItems.addTo(map);\n this.map = map;\n }\n private setCustomIcons() {\n // Define the paths to your custom icons\n const iconPath = './';\n const defaultIcon = new L.Icon({\n iconUrl: `${iconPath}marker-icon.png`, // Custom marker icon path\n iconSize: [25, 41], // Size of the icon\n iconAnchor: [12, 41], // Point of the icon which will correspond to marker's location\n shadowUrl: `${iconPath}marker-shadow.png`, // Custom marker shadow path\n shadowSize: [41, 41], // Size of the shadow\n shadowAnchor: [12, 41], // Point of the shadow which will correspond to marker's location\n });\n\n // Set the custom icon as the default icon\n L.Marker.prototype.options.icon = defaultIcon;\n }\n\n getMap(): L.Map {\n return this.map;\n }\n\n setZoomLevel(zoom: number): void {\n this.map.setZoom(zoom);\n }\n\n setCenter(location: AXMapLocation): void {\n this.map.setView([location.latitude, location.longitude], this.map.getZoom());\n }\n\n flyTo(location: AXMapLocation, zoom?: number, setMarker = false, duration = 1.0): void {\n if (this.map) {\n this.map.flyTo([location.latitude, location.longitude], zoom || this.map.getZoom(), {\n animate: true,\n duration: duration,\n });\n this.map.once('moveend', () => {\n if (setMarker) {\n this.addMarker(location);\n }\n });\n }\n }\n\n addMarker(locations: AXMapLocation | AXMapLocation[]): void {\n const locationsArray = Array.isArray(locations) ? locations : [locations];\n locationsArray.forEach((location) => {\n L.marker([location.latitude, location.longitude]).addTo(this.drawnItems);\n this.onMarkerAdded.emit(location);\n });\n }\n\n getMarkers(): AXMapLocation[] {\n return this.drawnItems\n .getLayers()\n .filter((layer) => layer instanceof L.Marker)\n .map((marker) => {\n const latLng = (marker as L.Marker).getLatLng();\n return {\n latitude: latLng.lat,\n longitude: latLng.lng,\n } as AXMapLocation;\n });\n }\n\n addDrawControl(position: AXMapControlPlace = 'topleft'): void {\n const drawControl = new L.Control.Draw({\n position: position,\n edit: {\n featureGroup: this.drawnItems,\n },\n draw: {\n polygon: false,\n polyline: false,\n rectangle: false,\n circle: false,\n circlemarker: false,\n },\n });\n\n this.drawControl = drawControl;\n this.map.addControl(drawControl);\n\n this.map.on(L.Draw.Event.CREATED, (event: any) => {\n const layer = event.layer;\n this.drawnItems.addLayer(layer);\n const latLng = event.layer.getLatLng();\n this.onMarkerAdded.emit({ latitude: latLng.lat, longitude: latLng.lng });\n });\n\n this.map.on(L.Draw.Event.DELETED, () => {\n this.onMarkerChanged.emit(this.getMarkers());\n });\n\n this.map.on(L.Draw.Event.EDITED, () => {\n this.onMarkerChanged.emit(this.getMarkers());\n });\n }\n\n addLocateControl(position: AXMapControlPlace = 'bottomright'): void {\n const locateControl = L.control\n .locate({\n position: position,\n flyTo: true,\n setView: 'untilPanOrZoom',\n showPopup: true,\n onLocationError: (e) => alert(e.message),\n onLocationOutsideMapBounds: (control) => control.stop(),\n locateOptions: {\n enableHighAccuracy: true,\n },\n strings: {\n title: 'Show my location',\n popup: 'You are within {distance} meters from this point',\n outsideMapBoundsMsg: 'You seem to be outside the map bounds',\n },\n })\n .addTo(this.map);\n\n this.locateControl = locateControl;\n\n this.map.on('locationfound', (event: any) => {\n const location: AXMapLocation = {\n latitude: event.latitude,\n longitude: event.longitude,\n precision: event.accuracy,\n };\n this.onLocationFound.emit(location);\n });\n }\n\n removeDrawControl() {\n if (this.drawControl) {\n this.map.removeControl(this.drawControl);\n this.drawnItems.clearLayers();\n this.drawControl = undefined;\n this.map.off(L.Draw.Event.CREATED);\n }\n }\n\n removeLocateControl(): void {\n if (this.locateControl) {\n this.map.removeControl(this.locateControl);\n this.locateControl = undefined;\n this.map.off('locationfound');\n this.map.off('locationerror');\n }\n }\n\n destroyMap() {\n this.map.off();\n this.map.remove();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/map/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @acorex/cdk/map
2
+
3
+ Secondary entry point of `@acorex/cdk`. It can be used by importing from `@acorex/cdk/map`.
package/map/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './map.class';
@@ -0,0 +1,32 @@
1
+ import * as L from 'leaflet';
2
+ import 'leaflet-draw';
3
+ import 'leaflet.locatecontrol';
4
+ export interface AXMapLocation {
5
+ latitude: number;
6
+ longitude: number;
7
+ precision?: number;
8
+ title?: string;
9
+ }
10
+ export type AXMapControlPlace = 'topleft' | 'topright' | 'bottomleft' | 'bottomright';
11
+ export declare class AXLeafletService {
12
+ private map?;
13
+ private drawControl?;
14
+ private locateControl?;
15
+ private drawnItems;
16
+ private onMarkerChanged;
17
+ private onMarkerAdded;
18
+ private onLocationFound;
19
+ constructor(mapElement?: HTMLElement, location?: AXMapLocation, zoom?: number);
20
+ private setCustomIcons;
21
+ getMap(): L.Map;
22
+ setZoomLevel(zoom: number): void;
23
+ setCenter(location: AXMapLocation): void;
24
+ flyTo(location: AXMapLocation, zoom?: number, setMarker?: boolean, duration?: number): void;
25
+ addMarker(locations: AXMapLocation | AXMapLocation[]): void;
26
+ getMarkers(): AXMapLocation[];
27
+ addDrawControl(position?: AXMapControlPlace): void;
28
+ addLocateControl(position?: AXMapControlPlace): void;
29
+ removeDrawControl(): void;
30
+ removeLocateControl(): void;
31
+ destroyMap(): void;
32
+ }
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@acorex/cdk",
3
- "version": "18.10.4",
3
+ "version": "18.10.6",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0",
7
7
  "quill": "^2.0.2",
8
8
  "quill-delta-to-html": "^0.12.1",
9
- "qrcode": "^1.5.4"
9
+ "qrcode": "^1.5.4",
10
+ "leaflet": "^1.9.4",
11
+ "leaflet-draw": "^1.0.4",
12
+ "leaflet.locatecontrol": "^0.81.1"
10
13
  },
11
14
  "sideEffects": false,
12
15
  "module": "fesm2022/acorex-cdk.mjs",
@@ -21,6 +24,12 @@
21
24
  "esm": "./esm2022/acorex-cdk.mjs",
22
25
  "default": "./fesm2022/acorex-cdk.mjs"
23
26
  },
27
+ "./map": {
28
+ "types": "./map/index.d.ts",
29
+ "esm2022": "./esm2022/map/acorex-cdk-map.mjs",
30
+ "esm": "./esm2022/map/acorex-cdk-map.mjs",
31
+ "default": "./fesm2022/acorex-cdk-map.mjs"
32
+ },
24
33
  "./qrcode": {
25
34
  "types": "./qrcode/index.d.ts",
26
35
  "esm2022": "./esm2022/qrcode/acorex-cdk-qrcode.mjs",