@smartbit4all/ng-client 4.0.149 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/esm2022/lib/smart-client/smart-component-api-client.mjs +32 -7
  2. package/esm2022/lib/smart-client/smart.component.mjs +12 -5
  3. package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +18 -1
  4. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +5 -2
  5. package/esm2022/lib/smart-map/abstract-map.mjs +74 -0
  6. package/esm2022/lib/smart-map/api/api/api.mjs +4 -0
  7. package/esm2022/lib/smart-map/api/api/geoMap.service.mjs +312 -0
  8. package/esm2022/lib/smart-map/api/api.module.mjs +40 -0
  9. package/esm2022/lib/smart-map/api/configuration.mjs +91 -0
  10. package/esm2022/lib/smart-map/api/encoder.mjs +19 -0
  11. package/esm2022/lib/smart-map/api/index.mjs +7 -0
  12. package/esm2022/lib/smart-map/api/model/gPSPosition.mjs +13 -0
  13. package/esm2022/lib/smart-map/api/model/geoMapChange.mjs +2 -0
  14. package/esm2022/lib/smart-map/api/model/geoMapDataLoadingMode.mjs +17 -0
  15. package/esm2022/lib/smart-map/api/model/geoMapDataSourceDescriptor.mjs +2 -0
  16. package/esm2022/lib/smart-map/api/model/geoMapDataSourceType.mjs +18 -0
  17. package/esm2022/lib/smart-map/api/model/geoMapInteraction.mjs +2 -0
  18. package/esm2022/lib/smart-map/api/model/geoMapItem.mjs +2 -0
  19. package/esm2022/lib/smart-map/api/model/geoMapItemKind.mjs +18 -0
  20. package/esm2022/lib/smart-map/api/model/geoMapLayer.mjs +2 -0
  21. package/esm2022/lib/smart-map/api/model/geoMapLayerChange.mjs +2 -0
  22. package/esm2022/lib/smart-map/api/model/geoMapLayerDescriptor.mjs +2 -0
  23. package/esm2022/lib/smart-map/api/model/geoMapModel.mjs +2 -0
  24. package/esm2022/lib/smart-map/api/model/geoMapOperationMode.mjs +18 -0
  25. package/esm2022/lib/smart-map/api/model/geoMapSelectionMode.mjs +18 -0
  26. package/esm2022/lib/smart-map/api/model/geoMapServerModel.mjs +2 -0
  27. package/esm2022/lib/smart-map/api/model/geoMapTextType.mjs +17 -0
  28. package/esm2022/lib/smart-map/api/model/geoMapViewState.mjs +2 -0
  29. package/esm2022/lib/smart-map/api/model/geoMapViewport.mjs +2 -0
  30. package/esm2022/lib/smart-map/api/model/models.mjs +19 -0
  31. package/esm2022/lib/smart-map/api/param.mjs +2 -0
  32. package/esm2022/lib/smart-map/api/variables.mjs +9 -0
  33. package/esm2022/lib/smart-map/api-default/api-default.mjs +2 -0
  34. package/esm2022/lib/smart-map/impl/google-map.mjs +220 -0
  35. package/esm2022/lib/smart-map/impl/leaflet-map.mjs +165 -0
  36. package/esm2022/lib/smart-map/projects.mjs +9 -0
  37. package/esm2022/lib/smart-map/smart-map.component.mjs +193 -0
  38. package/esm2022/lib/smart-map/smart-map.module.mjs +22 -0
  39. package/esm2022/lib/smart-map/smart-map.types.mjs +2 -0
  40. package/esm2022/projects.mjs +2 -1
  41. package/fesm2022/smartbit4all-ng-client.mjs +1415 -140
  42. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  43. package/lib/smart-client/smart-component-api-client.d.ts +9 -6
  44. package/lib/smart-client/smart.component.d.ts +7 -4
  45. package/lib/smart-component-layout/smart-component-layout-utility.d.ts +3 -1
  46. package/lib/smart-component-layout/smart-component-layout.component.d.ts +3 -0
  47. package/lib/smart-map/abstract-map.d.ts +32 -0
  48. package/lib/smart-map/api/api/api.d.ts +3 -0
  49. package/lib/smart-map/api/api/geoMap.service.d.ts +101 -0
  50. package/lib/smart-map/api/api.module.d.ts +11 -0
  51. package/lib/smart-map/api/configuration.d.ts +104 -0
  52. package/lib/smart-map/api/encoder.d.ts +11 -0
  53. package/lib/smart-map/api/index.d.ts +6 -0
  54. package/lib/smart-map/api/model/gPSPosition.d.ts +32 -0
  55. package/lib/smart-map/api/model/geoMapChange.d.ts +19 -0
  56. package/lib/smart-map/api/model/geoMapDataLoadingMode.d.ts +15 -0
  57. package/lib/smart-map/api/model/geoMapDataSourceDescriptor.d.ts +50 -0
  58. package/lib/smart-map/api/model/geoMapDataSourceType.d.ts +16 -0
  59. package/lib/smart-map/api/model/geoMapInteraction.d.ts +22 -0
  60. package/lib/smart-map/api/model/geoMapItem.d.ts +38 -0
  61. package/lib/smart-map/api/model/geoMapItemKind.d.ts +16 -0
  62. package/lib/smart-map/api/model/geoMapLayer.d.ts +19 -0
  63. package/lib/smart-map/api/model/geoMapLayerChange.d.ts +20 -0
  64. package/lib/smart-map/api/model/geoMapLayerDescriptor.d.ts +28 -0
  65. package/lib/smart-map/api/model/geoMapModel.d.ts +27 -0
  66. package/lib/smart-map/api/model/geoMapOperationMode.d.ts +16 -0
  67. package/lib/smart-map/api/model/geoMapSelectionMode.d.ts +16 -0
  68. package/lib/smart-map/api/model/geoMapServerModel.d.ts +28 -0
  69. package/lib/smart-map/api/model/geoMapTextType.d.ts +15 -0
  70. package/lib/smart-map/api/model/geoMapViewState.d.ts +25 -0
  71. package/lib/smart-map/api/model/geoMapViewport.d.ts +20 -0
  72. package/lib/smart-map/api/model/models.d.ts +18 -0
  73. package/lib/smart-map/api/param.d.ts +37 -0
  74. package/lib/smart-map/api/variables.d.ts +8 -0
  75. package/lib/smart-map/api-default/api-default.d.ts +2 -0
  76. package/lib/smart-map/impl/google-map.d.ts +21 -0
  77. package/lib/smart-map/impl/leaflet-map.d.ts +15 -0
  78. package/lib/smart-map/projects.d.ts +8 -0
  79. package/lib/smart-map/smart-map.component.d.ts +33 -0
  80. package/lib/smart-map/smart-map.module.d.ts +11 -0
  81. package/lib/smart-map/smart-map.types.d.ts +21 -0
  82. package/package.json +1 -1
  83. package/projects.d.ts +1 -0
  84. package/smartbit4all-ng-client-4.1.1.tgz +0 -0
  85. package/smartbit4all-ng-client-4.0.149.tgz +0 -0
@@ -0,0 +1,165 @@
1
+ import { Component } from '@angular/core';
2
+ import { AbstractMap } from '../abstract-map';
3
+ import { GeoMapItemKind } from '../api';
4
+ import * as i0 from "@angular/core";
5
+ function createLeafletMapItem(item) {
6
+ switch (item.kind) {
7
+ case GeoMapItemKind.MARKER:
8
+ return L.marker(L.latLng(item.position.latitude, item.position.longitude), {
9
+ title: item.label,
10
+ });
11
+ case GeoMapItemKind.POLYGON:
12
+ return L.polygon(item.bounds.map((p) => [p.latitude, p.longitude]), { title: item.label });
13
+ }
14
+ throw new Error('Foo!');
15
+ }
16
+ export class LeafletMap extends AbstractMap {
17
+ constructor(el, cd, zone) {
18
+ super(el, cd, zone, createLeafletMapItem);
19
+ }
20
+ ngAfterViewChecked() {
21
+ if (!this.map && this.el.nativeElement.offsetParent) {
22
+ this.initialize();
23
+ }
24
+ }
25
+ initialize() {
26
+ const options = this.createLeafletMapOptions();
27
+ this.map = L.map('leaflet').setView(options.centre, options.zoom);
28
+ L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
29
+ maxZoom: 19,
30
+ attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
31
+ }).addTo(this.map);
32
+ const items = this.items();
33
+ const toAdd = items.map((it) => ({
34
+ id: it.id,
35
+ record: createLeafletMapItem(it),
36
+ }));
37
+ this.handleItemChanges([], toAdd);
38
+ const model = this.model();
39
+ if (model.viewState?.fitToInitialItems) {
40
+ const datasetBounds = this.findDatasetBounds();
41
+ if (datasetBounds) {
42
+ const { a, b } = datasetBounds;
43
+ const pntA = L.latLng(a.x, a.y);
44
+ const pntB = L.latLng(b.x, b.y);
45
+ const bounds = L.latLngBounds(pntA, pntB);
46
+ this.zone.run(() => {
47
+ this.map.fitBounds(bounds);
48
+ });
49
+ }
50
+ }
51
+ this.map.on('click', (event) => {
52
+ this.zone.run(() => {
53
+ const pos = event.latlng;
54
+ this.onMapClick.emit({
55
+ coordinates: {
56
+ latitude: pos.lat,
57
+ longitude: pos.lng,
58
+ },
59
+ originalEvent: event,
60
+ });
61
+ });
62
+ });
63
+ this.map.on('moveend', (event) => {
64
+ this.zone.run(() => {
65
+ const viewport = this.getViewport();
66
+ this.onMapDragEnd.emit({
67
+ viewport,
68
+ originalEvent: event,
69
+ });
70
+ });
71
+ });
72
+ this.map.on('zoomend', (event) => {
73
+ this.zone.run(() => {
74
+ const viewport = this.getViewport();
75
+ this.onMapDragEnd.emit({
76
+ viewport,
77
+ originalEvent: event,
78
+ });
79
+ });
80
+ });
81
+ }
82
+ getViewport() {
83
+ if (!this.map) {
84
+ throw new Error('Map is not yet initialised!');
85
+ }
86
+ const center = this.map.getCenter();
87
+ const zoomLevel = this.map.getZoom();
88
+ const leafletBounds = this.map.getBounds();
89
+ const { lat: swLat, lng: swLng } = leafletBounds.getSouthWest();
90
+ const { lat: neLat, lng: neLng } = leafletBounds.getNorthEast();
91
+ return {
92
+ center: {
93
+ latitude: center.lat,
94
+ longitude: center.lng,
95
+ },
96
+ zoomLevel,
97
+ bounds: [
98
+ { latitude: swLat, longitude: swLng },
99
+ { latitude: neLat, longitude: neLng },
100
+ ],
101
+ };
102
+ }
103
+ createLeafletMapOptions() {
104
+ const viewport = this.model().viewport;
105
+ return {
106
+ centre: [viewport.center.latitude, viewport.center.longitude],
107
+ zoom: viewport.zoomLevel,
108
+ };
109
+ }
110
+ handleItemChanges(toRemove, toAdd) {
111
+ if (!this.map) {
112
+ return;
113
+ }
114
+ toRemove.forEach((it) => {
115
+ it.record.remove();
116
+ this.overlays.delete(it.id);
117
+ });
118
+ toAdd.forEach((it) => {
119
+ it.record.on('click', (event) => {
120
+ this.zone.run(() => {
121
+ this.onOverlayClick.emit({
122
+ itemId: it.id,
123
+ originalEvent: {
124
+ originalEvent: event,
125
+ overlay: it.record,
126
+ map: this.map,
127
+ },
128
+ });
129
+ });
130
+ });
131
+ it.record.addTo(this.map);
132
+ this.overlays.set(it.id, it.record);
133
+ });
134
+ }
135
+ findDatasetBounds() {
136
+ const items = this.items()
137
+ .flatMap((it) => (it.position ? [it.position] : []))
138
+ .map((it) => {
139
+ return { x: it.latitude, y: it.longitude };
140
+ });
141
+ if (!items || items.length === 0) {
142
+ return null;
143
+ }
144
+ let southwest = { x: items[0].x, y: items[0].y };
145
+ let northeast = { x: items[0].x, y: items[0].y };
146
+ items.forEach((it) => {
147
+ if (it.x < southwest.x)
148
+ southwest.x = it.x;
149
+ if (it.y < southwest.y)
150
+ southwest.y = it.y;
151
+ if (it.x > northeast.x)
152
+ northeast.x = it.x;
153
+ if (it.y > northeast.y)
154
+ northeast.y = it.y;
155
+ });
156
+ return { a: southwest, b: northeast };
157
+ }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LeafletMap, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: LeafletMap, selector: "leaflet-map", usesInheritance: true, ngImport: i0, template: ` <div id="leaflet"></div>`, isInline: true, styles: ["#leaflet{height:720px}\n"] }); }
160
+ }
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LeafletMap, decorators: [{
162
+ type: Component,
163
+ args: [{ selector: 'leaflet-map', template: ` <div id="leaflet"></div>`, styles: ["#leaflet{height:720px}\n"] }]
164
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }] });
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1tYXAvaW1wbC9sZWFmbGV0LW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVDLFNBQVMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQWMsY0FBYyxFQUFrQixNQUFNLFFBQVEsQ0FBQzs7QUFVcEUsU0FBUyxvQkFBb0IsQ0FBQyxJQUFnQjtJQUM1QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLGNBQWMsQ0FBQyxNQUFNO1lBQ3hCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQzNFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNsQixDQUFDLENBQUM7UUFDTCxLQUFLLGNBQWMsQ0FBQyxPQUFPO1lBQ3pCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FDZCxJQUFJLENBQUMsTUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUNsRCxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQ3RCLENBQUM7SUFDTixDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBVUQsTUFBTSxPQUFPLFVBQVcsU0FBUSxXQUFXO0lBQ3pDLFlBQVksRUFBYyxFQUFFLEVBQXFCLEVBQUUsSUFBWTtRQUM3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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hELElBQUksU0FBUyxHQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV4RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTNDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUN4QyxDQUFDOytHQTFKVSxVQUFVO21HQUFWLFVBQVUsMEVBTlgsMkJBQTJCOzs0RkFNMUIsVUFBVTtrQkFSdEIsU0FBUzsrQkFDRSxhQUFhLFlBQ2IsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0TWFwLCBSZWNvcmRXaXRoSWQgfSBmcm9tICcuLi9hYnN0cmFjdC1tYXAnO1xyXG5pbXBvcnQgeyBHZW9NYXBJdGVtLCBHZW9NYXBJdGVtS2luZCwgR2VvTWFwVmlld3BvcnQgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQgeyBDb29yZCB9IGZyb20gJy4uL3NtYXJ0LW1hcC50eXBlcyc7XHJcblxyXG5kZWNsYXJlIHZhciBMOiBhbnk7XHJcblxyXG5pbnRlcmZhY2UgTGVhZmxldE1hcE9wdGlvbnMge1xyXG4gIGNlbnRyZTogQXJyYXk8bnVtYmVyPjtcclxuICB6b29tOiBudW1iZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUxlYWZsZXRNYXBJdGVtKGl0ZW06IEdlb01hcEl0ZW0pOiBhbnkge1xyXG4gIHN3aXRjaCAoaXRlbS5raW5kKSB7XHJcbiAgICBjYXNlIEdlb01hcEl0ZW1LaW5kLk1BUktFUjpcclxuICAgICAgcmV0dXJuIEwubWFya2VyKEwubGF0TG5nKGl0ZW0ucG9zaXRpb24hLmxhdGl0dWRlLCBpdGVtLnBvc2l0aW9uIS5sb25naXR1ZGUpLCB7XHJcbiAgICAgICAgdGl0bGU6IGl0ZW0ubGFiZWwsXHJcbiAgICAgIH0pO1xyXG4gICAgY2FzZSBHZW9NYXBJdGVtS2luZC5QT0xZR09OOlxyXG4gICAgICByZXR1cm4gTC5wb2x5Z29uKFxyXG4gICAgICAgIGl0ZW0uYm91bmRzIS5tYXAoKHApID0+IFtwLmxhdGl0dWRlLCBwLmxvbmdpdHVkZV0pLFxyXG4gICAgICAgIHsgdGl0bGU6IGl0ZW0ubGFiZWwgfVxyXG4gICAgICApO1xyXG4gIH1cclxuICB0aHJvdyBuZXcgRXJyb3IoJ0ZvbyEnKTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsZWFmbGV0LW1hcCcsXHJcbiAgdGVtcGxhdGU6IGAgPGRpdiBpZD1cImxlYWZsZXRcIj48L2Rpdj5gLFxyXG4gIHN0eWxlczogYFxyXG4gICAgICAjbGVhZmxldCB7XHJcbiAgICAgICAgICBoZWlnaHQ6IDcyMHB4O1xyXG4gICAgICB9YCxcclxufSlcclxuZXhwb3J0IGNsYXNzIExlYWZsZXRNYXAgZXh0ZW5kcyBBYnN0cmFjdE1hcCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIGNvbnN0cnVjdG9yKGVsOiBFbGVtZW50UmVmLCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHpvbmU6IE5nWm9uZSkge1xyXG4gICAgc3VwZXIoZWwsIGNkLCB6b25lLCBjcmVhdGVMZWFmbGV0TWFwSXRlbSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubWFwICYmIHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jcmVhdGVMZWFmbGV0TWFwT3B0aW9ucygpO1xyXG4gICAgdGhpcy5tYXAgPSBMLm1hcCgnbGVhZmxldCcpLnNldFZpZXcob3B0aW9ucy5jZW50cmUsIG9wdGlvbnMuem9vbSk7XHJcbiAgICBMLnRpbGVMYXllcignaHR0cHM6Ly90aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsIHtcclxuICAgICAgbWF4Wm9vbTogMTksXHJcbiAgICAgIGF0dHJpYnV0aW9uOiAnJmNvcHk7IDxhIGhyZWY9XCJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+JyxcclxuICAgIH0pLmFkZFRvKHRoaXMubWFwKTtcclxuXHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMoKTtcclxuICAgIGNvbnN0IHRvQWRkOiBBcnJheTxSZWNvcmRXaXRoSWQ+ID0gaXRlbXMubWFwKChpdCkgPT4gKHtcclxuICAgICAgaWQ6IGl0LmlkISxcclxuICAgICAgcmVjb3JkOiBjcmVhdGVMZWFmbGV0TWFwSXRlbShpdCksXHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLmhhbmRsZUl0ZW1DaGFuZ2VzKFtdLCB0b0FkZCk7XHJcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWwoKTtcclxuICAgIGlmIChtb2RlbC52aWV3U3RhdGU/LmZpdFRvSW5pdGlhbEl0ZW1zKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFzZXRCb3VuZHMgPSB0aGlzLmZpbmREYXRhc2V0Qm91bmRzKCk7XHJcbiAgICAgIGlmIChkYXRhc2V0Qm91bmRzKSB7XHJcbiAgICAgICAgY29uc3QgeyBhLCBiIH0gPSBkYXRhc2V0Qm91bmRzO1xyXG4gICAgICAgIGNvbnN0IHBudEEgPSBMLmxhdExuZyhhLngsIGEueSk7XHJcbiAgICAgICAgY29uc3QgcG50QiA9IEwubGF0TG5nKGIueCwgYi55KTtcclxuICAgICAgICBjb25zdCBib3VuZHMgPSBMLmxhdExuZ0JvdW5kcyhwbnRBLCBwbnRCKTtcclxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubWFwLmZpdEJvdW5kcyhib3VuZHMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hcC5vbignY2xpY2snLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBjb25zdCBwb3MgPSBldmVudC5sYXRsbmc7XHJcbiAgICAgICAgdGhpcy5vbk1hcENsaWNrLmVtaXQoe1xyXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IHtcclxuICAgICAgICAgICAgbGF0aXR1ZGU6IHBvcy5sYXQgYXMgbnVtYmVyLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IHBvcy5sbmcgYXMgbnVtYmVyLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubWFwLm9uKCdtb3ZlZW5kJywgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmdldFZpZXdwb3J0KCk7XHJcbiAgICAgICAgdGhpcy5vbk1hcERyYWdFbmQuZW1pdCh7XHJcbiAgICAgICAgICB2aWV3cG9ydCxcclxuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubWFwLm9uKCd6b29tZW5kJywgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmdldFZpZXdwb3J0KCk7XHJcbiAgICAgICAgdGhpcy5vbk1hcERyYWdFbmQuZW1pdCh7XHJcbiAgICAgICAgICB2aWV3cG9ydCxcclxuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Vmlld3BvcnQoKTogR2VvTWFwVmlld3BvcnQge1xyXG4gICAgaWYgKCF0aGlzLm1hcCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hcCBpcyBub3QgeWV0IGluaXRpYWxpc2VkIScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNlbnRlciA9IHRoaXMubWFwLmdldENlbnRlcigpO1xyXG4gICAgY29uc3Qgem9vbUxldmVsID0gdGhpcy5tYXAuZ2V0Wm9vbSgpIGFzIG51bWJlcjtcclxuICAgIGNvbnN0IGxlYWZsZXRCb3VuZHMgPSB0aGlzLm1hcC5nZXRCb3VuZHMoKTtcclxuICAgIGNvbnN0IHsgbGF0OiBzd0xhdCwgbG5nOiBzd0xuZyB9ID0gbGVhZmxldEJvdW5kcy5nZXRTb3V0aFdlc3QoKTtcclxuICAgIGNvbnN0IHsgbGF0OiBuZUxhdCwgbG5nOiBuZUxuZyB9ID0gbGVhZmxldEJvdW5kcy5nZXROb3J0aEVhc3QoKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjZW50ZXI6IHtcclxuICAgICAgICBsYXRpdHVkZTogY2VudGVyLmxhdCBhcyBudW1iZXIsXHJcbiAgICAgICAgbG9uZ2l0dWRlOiBjZW50ZXIubG5nIGFzIG51bWJlcixcclxuICAgICAgfSxcclxuICAgICAgem9vbUxldmVsLFxyXG4gICAgICBib3VuZHM6IFtcclxuICAgICAgICB7IGxhdGl0dWRlOiBzd0xhdCwgbG9uZ2l0dWRlOiBzd0xuZyB9LFxyXG4gICAgICAgIHsgbGF0aXR1ZGU6IG5lTGF0LCBsb25naXR1ZGU6IG5lTG5nIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVMZWFmbGV0TWFwT3B0aW9ucygpOiBMZWFmbGV0TWFwT3B0aW9ucyB7XHJcbiAgICBjb25zdCB2aWV3cG9ydDogR2VvTWFwVmlld3BvcnQgPSB0aGlzLm1vZGVsKCkudmlld3BvcnQhO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY2VudHJlOiBbdmlld3BvcnQuY2VudGVyIS5sYXRpdHVkZSwgdmlld3BvcnQuY2VudGVyIS5sb25naXR1ZGVdLFxyXG4gICAgICB6b29tOiB2aWV3cG9ydC56b29tTGV2ZWwhLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGhhbmRsZUl0ZW1DaGFuZ2VzKHRvUmVtb3ZlOiBBcnJheTxSZWNvcmRXaXRoSWQ+LCB0b0FkZDogQXJyYXk8UmVjb3JkV2l0aElkPik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLm1hcCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdG9SZW1vdmUuZm9yRWFjaCgoaXQpID0+IHtcclxuICAgICAgaXQucmVjb3JkLnJlbW92ZSgpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlzLmRlbGV0ZShpdC5pZCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0FkZC5mb3JFYWNoKChpdCkgPT4ge1xyXG4gICAgICBpdC5yZWNvcmQub24oJ2NsaWNrJywgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMub25PdmVybGF5Q2xpY2suZW1pdCh7XHJcbiAgICAgICAgICAgIGl0ZW1JZDogaXQuaWQsXHJcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IHtcclxuICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcclxuICAgICAgICAgICAgICBvdmVybGF5OiBpdC5yZWNvcmQsXHJcbiAgICAgICAgICAgICAgbWFwOiB0aGlzLm1hcCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgaXQucmVjb3JkLmFkZFRvKHRoaXMubWFwKTtcclxuICAgICAgdGhpcy5vdmVybGF5cy5zZXQoaXQuaWQsIGl0LnJlY29yZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZERhdGFzZXRCb3VuZHMoKTogeyBhOiBDb29yZDsgYjogQ29vcmQgfSB8IG51bGwge1xyXG4gICAgY29uc3QgaXRlbXM6IEFycmF5PENvb3JkPiA9IHRoaXMuaXRlbXMoKVxyXG4gICAgICAuZmxhdE1hcCgoaXQpID0+IChpdC5wb3NpdGlvbiA/IFtpdC5wb3NpdGlvbl0gOiBbXSkpXHJcbiAgICAgIC5tYXAoKGl0KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHsgeDogaXQubGF0aXR1ZGUsIHk6IGl0LmxvbmdpdHVkZSB9O1xyXG4gICAgICB9KTtcclxuICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzb3V0aHdlc3Q6IENvb3JkID0geyB4OiBpdGVtc1swXS54LCB5OiBpdGVtc1swXS55IH07XHJcbiAgICBsZXQgbm9ydGhlYXN0OiBDb29yZCA9IHsgeDogaXRlbXNbMF0ueCwgeTogaXRlbXNbMF0ueSB9O1xyXG5cclxuICAgIGl0ZW1zLmZvckVhY2goKGl0KSA9PiB7XHJcbiAgICAgIGlmIChpdC54IDwgc291dGh3ZXN0LngpIHNvdXRod2VzdC54ID0gaXQueDtcclxuICAgICAgaWYgKGl0LnkgPCBzb3V0aHdlc3QueSkgc291dGh3ZXN0LnkgPSBpdC55O1xyXG5cclxuICAgICAgaWYgKGl0LnggPiBub3J0aGVhc3QueCkgbm9ydGhlYXN0LnggPSBpdC54O1xyXG4gICAgICBpZiAoaXQueSA+IG5vcnRoZWFzdC55KSBub3J0aGVhc3QueSA9IGl0Lnk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4geyBhOiBzb3V0aHdlc3QsIGI6IG5vcnRoZWFzdCB9O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,9 @@
1
+ export * from './smart-map.component';
2
+ export * from './smart-map.module';
3
+ export * from './impl/google-map';
4
+ export * from './impl/leaflet-map';
5
+ export * from './api/model/models';
6
+ export * from './smart-map.types';
7
+ export * from './abstract-map';
8
+ export * from './api-default/api-default';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1tYXAvcHJvamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zbWFydC1tYXAuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9zbWFydC1tYXAubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbXBsL2dvb2dsZS1tYXAnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ltcGwvbGVhZmxldC1tYXAnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FwaS9tb2RlbC9tb2RlbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0LW1hcC50eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3QtbWFwJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcGktZGVmYXVsdC9hcGktZGVmYXVsdCc7XHJcbiJdfQ==
@@ -0,0 +1,193 @@
1
+ import { Component, computed, Inject, InjectionToken, Input, signal, } from '@angular/core';
2
+ import { lastValueFrom } from 'rxjs';
3
+ import { GeoMapItemKind, GeoMapOperationMode, } from './api';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./api";
6
+ import * as i2 from "./impl/google-map";
7
+ import * as i3 from "./impl/leaflet-map";
8
+ export var MapEngine;
9
+ (function (MapEngine) {
10
+ MapEngine["GOOGLE"] = "GOOGLE";
11
+ MapEngine["LEAFLET"] = "LEAFLET";
12
+ })(MapEngine || (MapEngine = {}));
13
+ export const MAP_ENGINE = new InjectionToken('MAP_ENGINE');
14
+ const itemEq = (a, b) => {
15
+ const positions = new Set(a.map((it) => it.position));
16
+ b.forEach((it) => positions.delete(it.position));
17
+ return a.length === b.length && positions.size === 0;
18
+ };
19
+ export class SmartMapComponent {
20
+ constructor(mapEngine, api) {
21
+ this.mapEngine = mapEngine;
22
+ this.api = api;
23
+ this.MapEngine = MapEngine;
24
+ this.model = signal(undefined);
25
+ this.items = computed(() => {
26
+ const model = this.model();
27
+ return model?.layers.flatMap((l) => l.items ?? []) ?? [];
28
+ });
29
+ this.selection = computed(() => new Set(this.items()
30
+ .filter((it) => !!it.selected)
31
+ .map((it) => it.id)
32
+ .values()));
33
+ }
34
+ ngOnInit() {
35
+ // this.load();
36
+ }
37
+ ngAfterViewInit() {
38
+ this.load();
39
+ }
40
+ async load() {
41
+ const model = await lastValueFrom(this.api.load(this.uuid, this.identifier));
42
+ if (!model.viewport) {
43
+ throw new Error('GeoMapModel contains no viewport!');
44
+ }
45
+ this.model.update(() => model);
46
+ }
47
+ async move(viewport) {
48
+ this.model.update((it) => {
49
+ console.log('model update is running!');
50
+ if (it) {
51
+ it.viewport = viewport;
52
+ }
53
+ return it;
54
+ });
55
+ const change = await lastValueFrom(this.api.move(this.uuid, this.identifier, viewport));
56
+ this.handleChange(change);
57
+ }
58
+ async update(mapState) {
59
+ this.model.update((it) => {
60
+ if (it) {
61
+ it.viewState = mapState;
62
+ }
63
+ return it;
64
+ });
65
+ const change = await lastValueFrom(this.api.update(this.uuid, this.identifier, mapState));
66
+ this.handleChange(change);
67
+ }
68
+ handleChange(change) {
69
+ if (!change.items) {
70
+ return;
71
+ }
72
+ this.model.update((it) => {
73
+ const layersById = new Map();
74
+ if (!it) {
75
+ return it;
76
+ }
77
+ it.layers.forEach((layer) => layersById.set(layer.code, layer));
78
+ for (const layerChange of change.items) {
79
+ const layerId = layerChange.code;
80
+ const toAdd = layerChange.toAdd;
81
+ layersById.set(layerId, {
82
+ code: layerId,
83
+ items: toAdd,
84
+ });
85
+ }
86
+ return {
87
+ ...it,
88
+ layers: [...layersById.values()],
89
+ };
90
+ });
91
+ }
92
+ handleMapClick(position) {
93
+ const operationMode = this.model()?.viewState?.operationMode ?? GeoMapOperationMode.ACTION;
94
+ switch (operationMode) {
95
+ case GeoMapOperationMode.ACTION:
96
+ // TODO: Fire action for layer, if applicable (maybe only on double click).
97
+ break;
98
+ case GeoMapOperationMode.SELECTION:
99
+ // no-op, can't select empty space.
100
+ break;
101
+ case GeoMapOperationMode.PLACEMENT:
102
+ lastValueFrom(this.api.interact(this.uuid, this.identifier, {
103
+ operationMode,
104
+ targetItem: {
105
+ kind: GeoMapItemKind.MARKER, // FIXME: We shall support more item kinds!
106
+ position,
107
+ icons: {},
108
+ bounds: [],
109
+ actions: [],
110
+ },
111
+ targetLayer: '',
112
+ inverse: false,
113
+ })).then((change) => {
114
+ if (!this.viewContextService) {
115
+ console.warn('Smart Map has no ViewContext Service set up!');
116
+ return null;
117
+ }
118
+ else {
119
+ return this.viewContextService.handlePerformActionResponse(change);
120
+ }
121
+ }, (err) => {
122
+ console.warn('Could not submit selection change! ', err);
123
+ });
124
+ }
125
+ }
126
+ handleItemClick(id) {
127
+ const operationMode = this.model()?.viewState?.operationMode ?? GeoMapOperationMode.ACTION;
128
+ const targetItem = this.items().find((it) => id === it.id);
129
+ if (!targetItem) {
130
+ console.warn('Selection item is seemingly missing from known items: ', id);
131
+ return;
132
+ }
133
+ switch (operationMode) {
134
+ case GeoMapOperationMode.ACTION:
135
+ // TODO: fire action!
136
+ break;
137
+ case GeoMapOperationMode.SELECTION:
138
+ lastValueFrom(this.api.interact(this.uuid, this.identifier, {
139
+ operationMode,
140
+ targetItem,
141
+ targetLayer: '',
142
+ inverse: this.selection().has(id),
143
+ })).then((change) => {
144
+ if (!this.viewContextService) {
145
+ console.warn('Smart Map has no ViewContext Service set up!');
146
+ return null;
147
+ }
148
+ else {
149
+ return this.viewContextService.handlePerformActionResponse(change);
150
+ }
151
+ }, (err) => {
152
+ console.warn('Could not submit selection change! ', err);
153
+ });
154
+ break;
155
+ case GeoMapOperationMode.PLACEMENT:
156
+ // clicking an item may remove it, if it's only a pending item. To reposition existing
157
+ // items, we shall react to dragEnd events only.
158
+ lastValueFrom(this.api.interact(this.uuid, this.identifier, {
159
+ operationMode,
160
+ targetItem,
161
+ targetLayer: '',
162
+ inverse: true,
163
+ })).then((change) => {
164
+ if (!this.viewContextService) {
165
+ console.warn('Smart Map has no ViewContext Service set up!');
166
+ return null;
167
+ }
168
+ else {
169
+ return this.viewContextService.handlePerformActionResponse(change);
170
+ }
171
+ }, (err) => {
172
+ console.warn('Could not submit placement change! ', err);
173
+ });
174
+ break;
175
+ }
176
+ }
177
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapComponent, deps: [{ token: MAP_ENGINE }, { token: i1.GeoMapService }], target: i0.ɵɵFactoryTarget.Component }); }
178
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartMapComponent, selector: "smart-map", inputs: { uuid: "uuid", identifier: "identifier", parent: "parent" }, ngImport: i0, template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.GoogleMap, selector: "google-map", inputs: ["style", "styleClass"], outputs: ["onOverlayDblClick", "onOverlayDragStart", "onOverlayDrag", "onOverlayDragEnd", "onMapReady"] }, { kind: "component", type: i3.LeafletMap, selector: "leaflet-map" }] }); }
179
+ }
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapComponent, decorators: [{
181
+ type: Component,
182
+ args: [{ selector: 'smart-map', template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n" }]
183
+ }], ctorParameters: () => [{ type: MapEngine, decorators: [{
184
+ type: Inject,
185
+ args: [MAP_ENGINE]
186
+ }] }, { type: i1.GeoMapService }], propDecorators: { uuid: [{
187
+ type: Input
188
+ }], identifier: [{
189
+ type: Input
190
+ }], parent: [{
191
+ type: Input
192
+ }] } });
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LW1hcC9zbWFydC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtbWFwL3NtYXJ0LW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBR0wsY0FBYyxFQUdkLG1CQUFtQixHQUtwQixNQUFNLE9BQU8sQ0FBQzs7Ozs7QUFJZixNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLDhCQUFpQixDQUFBO0lBQ2pCLGdDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBWSxZQUFZLENBQUMsQ0FBQztBQUV0RSxNQUFNLE1BQU0sR0FBdUMsQ0FBQyxDQUFvQixFQUFFLENBQW9CLEVBQUUsRUFBRTtJQUNoRyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBYyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9B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clxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBJbmplY3QsXHJcbiAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgVmFsdWVFcXVhbGl0eUZuLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTbWFydENvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LWNsaWVudC9zbWFydC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgR2VvTWFwQ2hhbmdlLFxyXG4gIEdlb01hcEl0ZW0sXHJcbiAgR2VvTWFwSXRlbUtpbmQsXHJcbiAgR2VvTWFwTGF5ZXIsXHJcbiAgR2VvTWFwTW9kZWwsXHJcbiAgR2VvTWFwT3BlcmF0aW9uTW9kZSxcclxuICBHZW9NYXBTZXJ2aWNlLFxyXG4gIEdlb01hcFZpZXdwb3J0LFxyXG4gIEdlb01hcFZpZXdTdGF0ZSxcclxuICBHUFNQb3NpdGlvbixcclxufSBmcm9tICcuL2FwaSc7XHJcbmltcG9ydCB7IFZpZXdDb250ZXh0Q2hhbmdlIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L2FwaSc7XHJcbmltcG9ydCB7IFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3NtYXJ0LXZpZXctY29udGV4dC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBlbnVtIE1hcEVuZ2luZSB7XHJcbiAgR09PR0xFID0gJ0dPT0dMRScsXHJcbiAgTEVBRkxFVCA9ICdMRUFGTEVUJyxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE1BUF9FTkdJTkUgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwRW5naW5lPignTUFQX0VOR0lORScpO1xyXG5cclxuY29uc3QgaXRlbUVxOiBWYWx1ZUVxdWFsaXR5Rm48QXJyYXk8R2VvTWFwSXRlbT4+ID0gKGE6IEFycmF5PEdlb01hcEl0ZW0+LCBiOiBBcnJheTxHZW9NYXBJdGVtPikgPT4ge1xyXG4gIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBTZXQoYS5tYXAoKGl0OiBHZW9NYXBJdGVtKSA9PiBpdC5wb3NpdGlvbikpO1xyXG4gIGIuZm9yRWFjaCgoaXQ6IEdlb01hcEl0ZW0pID0+IHBvc2l0aW9ucy5kZWxldGUoaXQucG9zaXRpb24pKTtcclxuICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIHBvc2l0aW9ucy5zaXplID09PSAwO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC1tYXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1tYXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zbWFydC1tYXAuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydE1hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgTWFwRW5naW5lID0gTWFwRW5naW5lO1xyXG5cclxuICBASW5wdXQoKSB1dWlkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkZW50aWZpZXIhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGFyZW50PzogU21hcnRDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgcmVhZG9ubHkgbW9kZWw6IFdyaXRhYmxlU2lnbmFsPEdlb01hcE1vZGVsIHwgdW5kZWZpbmVkPiA9IHNpZ25hbCh1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5IGl0ZW1zOiBTaWduYWw8QXJyYXk8R2VvTWFwSXRlbT4+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsKCk7XHJcbiAgICByZXR1cm4gbW9kZWw/LmxheWVycy5mbGF0TWFwKChsKSA9PiBsLml0ZW1zID8/IFtdKSA/PyBbXTtcclxuICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgc2VsZWN0aW9uOiBTaWduYWw8U2V0PHN0cmluZz4+ID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PlxyXG4gICAgICBuZXcgU2V0KFxyXG4gICAgICAgIHRoaXMuaXRlbXMoKVxyXG4gICAgICAgICAgLmZpbHRlcigoaXQpID0+ICEhaXQuc2VsZWN0ZWQpXHJcbiAgICAgICAgICAubWFwKChpdCkgPT4gaXQuaWQhKVxyXG4gICAgICAgICAgLnZhbHVlcygpXHJcbiAgICAgIClcclxuICApO1xyXG5cclxuICB2aWV3Q29udGV4dFNlcnZpY2U/OiBTbWFydFZpZXdDb250ZXh0U2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BUF9FTkdJTkUpXHJcbiAgICBwdWJsaWMgbWFwRW5naW5lOiBNYXBFbmdpbmUsXHJcbiAgICBwcml2YXRlIGFwaTogR2VvTWFwU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLmxvYWQoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMubG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IG1vZGVsOiBHZW9NYXBNb2RlbCA9IGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy5hcGkubG9hZCh0aGlzLnV1aWQsIHRoaXMuaWRlbnRpZmllcikpO1xyXG4gICAgaWYgKCFtb2RlbC52aWV3cG9ydCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dlb01hcE1vZGVsIGNvbnRhaW5zIG5vIHZpZXdwb3J0IScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RlbC51cGRhdGUoKCkgPT4gbW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbW92ZSh2aWV3cG9ydDogR2VvTWFwVmlld3BvcnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMubW9kZWwudXBkYXRlKChpdCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnbW9kZWwgdXBkYXRlIGlzIHJ1bm5pbmchJyk7XHJcbiAgICAgIGlmIChpdCkge1xyXG4gICAgICAgIGl0LnZpZXdwb3J0ID0gdmlld3BvcnQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGl0O1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjaGFuZ2U6IEdlb01hcENoYW5nZSA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgIHRoaXMuYXBpLm1vdmUodGhpcy51dWlkLCB0aGlzLmlkZW50aWZpZXIsIHZpZXdwb3J0KVxyXG4gICAgKTtcclxuICAgIHRoaXMuaGFuZGxlQ2hhbmdlKGNoYW5nZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGUobWFwU3RhdGU6IEdlb01hcFZpZXdTdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5tb2RlbC51cGRhdGUoKGl0KSA9PiB7XHJcbiAgICAgIGlmIChpdCkge1xyXG4gICAgICAgIGl0LnZpZXdTdGF0ZSA9IG1hcFN0YXRlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBpdDtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY2hhbmdlOiBHZW9NYXBDaGFuZ2UgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxyXG4gICAgICB0aGlzLmFwaS51cGRhdGUodGhpcy51dWlkLCB0aGlzLmlkZW50aWZpZXIsIG1hcFN0YXRlKVxyXG4gICAgKTtcclxuICAgIHRoaXMuaGFuZGxlQ2hhbmdlKGNoYW5nZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNoYW5nZShjaGFuZ2U6IEdlb01hcENoYW5nZSk6IHZvaWQge1xyXG4gICAgaWYgKCFjaGFuZ2UuaXRlbXMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubW9kZWwudXBkYXRlKChpdCkgPT4ge1xyXG4gICAgICBjb25zdCBsYXllcnNCeUlkOiBNYXA8c3RyaW5nLCBHZW9NYXBMYXllcj4gPSBuZXcgTWFwKCk7XHJcbiAgICAgIGlmICghaXQpIHtcclxuICAgICAgICByZXR1cm4gaXQ7XHJcbiAgICAgIH1cclxuICAgICAgaXQubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiBsYXllcnNCeUlkLnNldChsYXllci5jb2RlISwgbGF5ZXIpKTtcclxuICAgICAgZm9yIChjb25zdCBsYXllckNoYW5nZSBvZiBjaGFuZ2UuaXRlbXMpIHtcclxuICAgICAgICBjb25zdCBsYXllcklkID0gbGF5ZXJDaGFuZ2UuY29kZSE7XHJcbiAgICAgICAgY29uc3QgdG9BZGQgPSBsYXllckNoYW5nZS50b0FkZDtcclxuICAgICAgICBsYXllcnNCeUlkLnNldChsYXllcklkLCB7XHJcbiAgICAgICAgICBjb2RlOiBsYXllcklkLFxyXG4gICAgICAgICAgaXRlbXM6IHRvQWRkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uaXQsXHJcbiAgICAgICAgbGF5ZXJzOiBbLi4ubGF5ZXJzQnlJZC52YWx1ZXMoKV0sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU1hcENsaWNrKHBvc2l0aW9uOiBHUFNQb3NpdGlvbik6IHZvaWQge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9uTW9kZSA9IHRoaXMubW9kZWwoKT8udmlld1N0YXRlPy5vcGVyYXRpb25Nb2RlID8/IEdlb01hcE9wZXJhdGlvbk1vZGUuQUNUSU9OO1xyXG4gICAgc3dpdGNoIChvcGVyYXRpb25Nb2RlKSB7XHJcbiAgICAgIGNhc2UgR2VvTWFwT3BlcmF0aW9uTW9kZS5BQ1RJT046XHJcbiAgICAgICAgLy8gVE9ETzogRmlyZSBhY3Rpb24gZm9yIGxheWVyLCBpZiBhcHBsaWNhYmxlIChtYXliZSBvbmx5IG9uIGRvdWJsZSBjbGljaykuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgR2VvTWFwT3BlcmF0aW9uTW9kZS5TRUxFQ1RJT046XHJcbiAgICAgICAgLy8gbm8tb3AsIGNhbid0IHNlbGVjdCBlbXB0eSBzcGFjZS5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBHZW9NYXBPcGVyYXRpb25Nb2RlLlBMQUNFTUVOVDpcclxuICAgICAgICBsYXN0VmFsdWVGcm9tKFxyXG4gICAgICAgICAgdGhpcy5hcGkuaW50ZXJhY3QodGhpcy51dWlkLCB0aGlzLmlkZW50aWZpZXIsIHtcclxuICAgICAgICAgICAgb3BlcmF0aW9uTW9kZSxcclxuICAgICAgICAgICAgdGFyZ2V0SXRlbToge1xyXG4gICAgICAgICAgICAgIGtpbmQ6IEdlb01hcEl0ZW1LaW5kLk1BUktFUiwgLy8gRklYTUU6IFdlIHNoYWxsIHN1cHBvcnQgbW9yZSBpdGVtIGtpbmRzIVxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgIGljb25zOiB7fSxcclxuICAgICAgICAgICAgICBib3VuZHM6IFtdLFxyXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0YXJnZXRMYXllcjogJycsXHJcbiAgICAgICAgICAgIGludmVyc2U6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApLnRoZW4oXHJcbiAgICAgICAgICAoY2hhbmdlOiBWaWV3Q29udGV4dENoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlld0NvbnRleHRTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTbWFydCBNYXAgaGFzIG5vIFZpZXdDb250ZXh0IFNlcnZpY2Ugc2V0IHVwIScpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoY2hhbmdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzdWJtaXQgc2VsZWN0aW9uIGNoYW5nZSEgJywgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSXRlbUNsaWNrKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9wZXJhdGlvbk1vZGUgPSB0aGlzLm1vZGVsKCk/LnZpZXdTdGF0ZT8ub3BlcmF0aW9uTW9kZSA/PyBHZW9NYXBPcGVyYXRpb25Nb2RlLkFDVElPTjtcclxuICAgIGNvbnN0IHRhcmdldEl0ZW0gPSB0aGlzLml0ZW1zKCkuZmluZCgoaXQpID0+IGlkID09PSBpdC5pZCk7XHJcbiAgICBpZiAoIXRhcmdldEl0ZW0pIHtcclxuICAgICAgY29uc29sZS53YXJuKCdTZWxlY3Rpb24gaXRlbSBpcyBzZWVtaW5nbHkgbWlzc2luZyBmcm9tIGtub3duIGl0ZW1zOiAnLCBpZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKG9wZXJhdGlvbk1vZGUpIHtcclxuICAgICAgY2FzZSBHZW9NYXBPcGVyYXRpb25Nb2RlLkFDVElPTjpcclxuICAgICAgICAvLyBUT0RPOiBmaXJlIGFjdGlvbiFcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBHZW9NYXBPcGVyYXRpb25Nb2RlLlNFTEVDVElPTjpcclxuICAgICAgICBsYXN0VmFsdWVGcm9tKFxyXG4gICAgICAgICAgdGhpcy5hcGkuaW50ZXJhY3QodGhpcy51dWlkLCB0aGlzLmlkZW50aWZpZXIsIHtcclxuICAgICAgICAgICAgb3BlcmF0aW9uTW9kZSxcclxuICAgICAgICAgICAgdGFyZ2V0SXRlbSxcclxuICAgICAgICAgICAgdGFyZ2V0TGF5ZXI6ICcnLFxyXG4gICAgICAgICAgICBpbnZlcnNlOiB0aGlzLnNlbGVjdGlvbigpLmhhcyhpZCksXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkudGhlbihcclxuICAgICAgICAgIChjaGFuZ2U6IFZpZXdDb250ZXh0Q2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy52aWV3Q29udGV4dFNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NtYXJ0IE1hcCBoYXMgbm8gVmlld0NvbnRleHQgU2VydmljZSBzZXQgdXAhJyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShjaGFuZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IHN1Ym1pdCBzZWxlY3Rpb24gY2hhbmdlISAnLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgR2VvTWFwT3BlcmF0aW9uTW9kZS5QTEFDRU1FTlQ6XHJcbiAgICAgICAgLy8gY2xpY2tpbmcgYW4gaXRlbSBtYXkgcmVtb3ZlIGl0LCBpZiBpdCdzIG9ubHkgYSBwZW5kaW5nIGl0ZW0uIFRvIHJlcG9zaXRpb24gZXhpc3RpbmdcclxuICAgICAgICAvLyBpdGVtcywgd2Ugc2hhbGwgcmVhY3QgdG8gZHJhZ0VuZCBldmVudHMgb25seS5cclxuICAgICAgICBsYXN0VmFsdWVGcm9tKFxyXG4gICAgICAgICAgdGhpcy5hcGkuaW50ZXJhY3QodGhpcy51dWlkLCB0aGlzLmlkZW50aWZpZXIsIHtcclxuICAgICAgICAgICAgb3BlcmF0aW9uTW9kZSxcclxuICAgICAgICAgICAgdGFyZ2V0SXRlbSxcclxuICAgICAgICAgICAgdGFyZ2V0TGF5ZXI6ICcnLFxyXG4gICAgICAgICAgICBpbnZlcnNlOiB0cnVlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApLnRoZW4oXHJcbiAgICAgICAgICAoY2hhbmdlOiBWaWV3Q29udGV4dENoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlld0NvbnRleHRTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTbWFydCBNYXAgaGFzIG5vIFZpZXdDb250ZXh0IFNlcnZpY2Ugc2V0IHVwIScpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoY2hhbmdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzdWJtaXQgcGxhY2VtZW50IGNoYW5nZSEgJywgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaWYgKG1vZGVsKCkpIHsgQGlmIChtYXBFbmdpbmUgPT09IE1hcEVuZ2luZS5HT09HTEUpIHtcclxuPGdvb2dsZS1tYXBcclxuICBbbW9kZWxdPVwibW9kZWwoKSFcIlxyXG4gIFtpdGVtc109XCJpdGVtcygpXCJcclxuICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICczMjBweCcgfVwiXHJcbiAgKG9uTWFwRHJhZ0VuZCk9XCJtb3ZlKCRldmVudC52aWV3cG9ydClcIlxyXG4gIChvblpvb21DaGFuZ2VkKT1cIm1vdmUoJGV2ZW50LnZpZXdwb3J0KVwiXHJcbiAgKG9uTWFwQ2xpY2spPVwiaGFuZGxlTWFwQ2xpY2soJGV2ZW50LmNvb3JkaW5hdGVzKVwiXHJcbiAgKG9uT3ZlcmxheUNsaWNrKT1cImhhbmRsZUl0ZW1DbGljaygkZXZlbnQuaXRlbUlkKVwiXHJcbj5cclxuPC9nb29nbGUtbWFwPlxyXG59IEBlbHNlIGlmIChtYXBFbmdpbmUgPT09IE1hcEVuZ2luZS5MRUFGTEVUKSB7XHJcbjxsZWFmbGV0LW1hcFxyXG4gIFttb2RlbF09XCJtb2RlbCgpIVwiXHJcbiAgW2l0ZW1zXT1cIml0ZW1zKClcIlxyXG4gIChvbk1hcERyYWdFbmQpPVwibW92ZSgkZXZlbnQudmlld3BvcnQpXCJcclxuICAob25ab29tQ2hhbmdlZCk9XCJtb3ZlKCRldmVudC52aWV3cG9ydClcIlxyXG4gIChvbk1hcENsaWNrKT1cImhhbmRsZU1hcENsaWNrKCRldmVudC5jb29yZGluYXRlcylcIlxyXG4gIChvbk92ZXJsYXlDbGljayk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50Lml0ZW1JZClcIlxyXG4+XHJcbjwvbGVhZmxldC1tYXA+XHJcbn0gQGVsc2Uge1xyXG48cD5cclxuICA8c3Ryb25nPk5vdCByZWNvZ25pc2VkIG1hcCBlbmdpbmU6IFsge3sgbWFwRW5naW5lIH19IF08L3N0cm9uZz5cclxuPC9wPlxyXG48cD5QbGVhc2UgcHJvdmlkZSBhIHZhbGlkIGNob2ljZSBvZiBtYXAgZW5naW5lITwvcD5cclxufSB9XHJcbiJdfQ==
@@ -0,0 +1,22 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { MAP_ENGINE, MapEngine, SmartMapComponent } from './smart-map.component';
3
+ import { BrowserModule } from '@angular/platform-browser';
4
+ import { CommonModule } from '@angular/common';
5
+ import { GoogleMap } from './impl/google-map';
6
+ import { LeafletMap } from './impl/leaflet-map';
7
+ import * as i0 from "@angular/core";
8
+ export class SmartMapModule {
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, declarations: [SmartMapComponent, GoogleMap, LeafletMap], imports: [CommonModule, BrowserModule], exports: [SmartMapComponent, GoogleMap, LeafletMap] }); }
11
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, providers: [{ provide: MAP_ENGINE, useValue: MapEngine.GOOGLE }], imports: [CommonModule, BrowserModule] }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ declarations: [SmartMapComponent, GoogleMap, LeafletMap],
17
+ imports: [CommonModule, BrowserModule],
18
+ providers: [{ provide: MAP_ENGINE, useValue: MapEngine.GOOGLE }],
19
+ exports: [SmartMapComponent, GoogleMap, LeafletMap],
20
+ }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbWFwLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LW1hcC9zbWFydC1tYXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBUWhELE1BQU0sT0FBTyxjQUFjOytHQUFkLGNBQWM7Z0hBQWQsY0FBYyxpQkFMVixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxhQUM3QyxZQUFZLEVBQUUsYUFBYSxhQUUzQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVTtnSEFFdkMsY0FBYyxhQUhkLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsWUFEdEQsWUFBWSxFQUFFLGFBQWE7OzRGQUkxQixjQUFjO2tCQU4xQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7b0JBQ3hELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNoRSxPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO2lCQUNwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BUF9FTkdJTkUsIE1hcEVuZ2luZSwgU21hcnRNYXBDb21wb25lbnQgfSBmcm9tICcuL3NtYXJ0LW1hcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEdvb2dsZU1hcCB9IGZyb20gJy4vaW1wbC9nb29nbGUtbWFwJztcclxuaW1wb3J0IHsgTGVhZmxldE1hcCB9IGZyb20gJy4vaW1wbC9sZWFmbGV0LW1hcCc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1NtYXJ0TWFwQ29tcG9uZW50LCBHb29nbGVNYXAsIExlYWZsZXRNYXBdLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJyb3dzZXJNb2R1bGVdLFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTUFQX0VOR0lORSwgdXNlVmFsdWU6IE1hcEVuZ2luZS5HT09HTEUgfV0sXHJcbiAgZXhwb3J0czogW1NtYXJ0TWFwQ29tcG9uZW50LCBHb29nbGVNYXAsIExlYWZsZXRNYXBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRNYXBNb2R1bGUge31cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbWFwLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtbWFwL3NtYXJ0LW1hcC50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VvTWFwVmlld3BvcnQsIEdQU1Bvc2l0aW9uIH0gZnJvbSAnLi9hcGknO1xyXG5cclxuZXhwb3J0IHR5cGUgTWFwRHJhZ2dlZEV2ZW50ID0ge1xyXG4gIHZpZXdwb3J0OiBHZW9NYXBWaWV3cG9ydDtcclxuICBvcmlnaW5hbEV2ZW50OiBhbnk7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNYXBab29tQ2hhbmdlZEV2ZW50ID0ge1xyXG4gIHZpZXdwb3J0OiBHZW9NYXBWaWV3cG9ydDtcclxuICBvcmlnaW5hbEV2ZW50OiBhbnk7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNYXBJdGVtQ2xpY2tlZEV2ZW50ID0ge1xyXG4gIGl0ZW1JZDogc3RyaW5nO1xyXG4gIG9yaWdpbmFsRXZlbnQ6IGFueTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIE1hcENsaWNrZWRFdmVudCA9IHtcclxuICBjb29yZGluYXRlczogR1BTUG9zaXRpb247XHJcbiAgb3JpZ2luYWxFdmVudDogYW55O1xyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb29yZCB7XHJcbiAgeDogbnVtYmVyO1xyXG4gIHk6IG51bWJlcjtcclxufVxyXG4iXX0=
@@ -23,4 +23,5 @@ export * from './lib/smart-tree/projects';
23
23
  export * from './lib/view-context/projects';
24
24
  export * from './lib/smart-filter-editor/project';
25
25
  export * from './lib/shared/projects';
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL3Byb2plY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsc0VBQXNFLENBQUM7QUFDckYsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBzbWFydC1uZy1jbGllbnRcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1uZy1jbGllbnQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LW5nLWNsaWVudC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1jbGllbnQvc21hcnQtZmlsZS11cGxvYWRlci9zbWFydC1maWxlLXVwbG9hZGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWNsaWVudC9wcm9qZWN0cyc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2Vzc2lvbi9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQvcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1kaWFsb2cvcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24vcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1maWx0ZXIvcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1mb3JtL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtZ3JpZC9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWljb24vcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1uYXZiYXIvcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1uYXZpZ2F0aW9uL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtc3ViamVjdC9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LXRhYi1ncm91cC9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LXRhYmxlL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtdHJlZS9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWZpbHRlci1lZGl0b3IvcHJvamVjdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC9wcm9qZWN0cyc7XHJcbiJdfQ==
26
+ export * from './lib/smart-map/projects';
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL3Byb2plY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsc0VBQXNFLENBQUM7QUFDckYsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHNtYXJ0LW5nLWNsaWVudFxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LW5nLWNsaWVudC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtbmctY2xpZW50Lm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWNsaWVudC9zbWFydC1maWxlLXVwbG9hZGVyL3NtYXJ0LWZpbGUtdXBsb2FkZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtY2xpZW50L3Byb2plY3RzJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXNzaW9uL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtY29tcG9uZW50LWxheW91dC9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWRpYWxvZy9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWZpbHRlci9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LWZvcm0vcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1ncmlkL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtaWNvbi9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LW5hdmJhci9wcm9qZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NtYXJ0LW5hdmlnYXRpb24vcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC1zdWJqZWN0L3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtdGFiLWdyb3VwL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtdGFibGUvcHJvamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbWFydC10cmVlL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtZmlsdGVyLWVkaXRvci9wcm9qZWN0JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL3Byb2plY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc21hcnQtbWFwL3Byb2plY3RzJztcclxuIl19