@bluehalo/ngx-leaflet 18.0.2 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,330 +0,0 @@
1
- import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
- import { latLng, map } from 'leaflet';
3
- import { LeafletUtil } from './leaflet.util';
4
- import * as i0 from "@angular/core";
5
- export class LeafletDirective {
6
- constructor(element, zone) {
7
- this.element = element;
8
- this.zone = zone;
9
- this.DEFAULT_ZOOM = 1;
10
- this.DEFAULT_CENTER = latLng(38.907192, -77.036871);
11
- this.DEFAULT_FPZ_OPTIONS = {};
12
- this.fitBoundsOptions = this.DEFAULT_FPZ_OPTIONS;
13
- this.panOptions = this.DEFAULT_FPZ_OPTIONS;
14
- this.zoomOptions = this.DEFAULT_FPZ_OPTIONS;
15
- this.zoomPanOptions = this.DEFAULT_FPZ_OPTIONS;
16
- // Default configuration
17
- this.options = {};
18
- // Configure callback function for the map
19
- this.mapReady = new EventEmitter();
20
- this.zoomChange = new EventEmitter();
21
- this.centerChange = new EventEmitter();
22
- // Mouse Map Events
23
- this.onClick = new EventEmitter();
24
- this.onDoubleClick = new EventEmitter();
25
- this.onMouseDown = new EventEmitter();
26
- this.onMouseUp = new EventEmitter();
27
- this.onMouseMove = new EventEmitter();
28
- this.onMouseOver = new EventEmitter();
29
- this.onMouseOut = new EventEmitter();
30
- // Map Move Events
31
- this.onMapMove = new EventEmitter();
32
- this.onMapMoveStart = new EventEmitter();
33
- this.onMapMoveEnd = new EventEmitter();
34
- // Map Zoom Events
35
- this.onMapZoom = new EventEmitter();
36
- this.onMapZoomStart = new EventEmitter();
37
- this.onMapZoomEnd = new EventEmitter();
38
- // Nothing here
39
- }
40
- ngOnInit() {
41
- // Create the map outside of angular so the various map events don't trigger change detection
42
- this.zone.runOutsideAngular(() => {
43
- // Create the map with some reasonable defaults
44
- this.map = map(this.element.nativeElement, this.options);
45
- this.addMapEventListeners();
46
- });
47
- // Only setView if there is a center/zoom
48
- if (null != this.center && null != this.zoom) {
49
- this.setView(this.center, this.zoom);
50
- }
51
- // Set up all the initial settings
52
- if (null != this.fitBounds) {
53
- this.setFitBounds(this.fitBounds);
54
- }
55
- if (null != this.maxBounds) {
56
- this.setMaxBounds(this.maxBounds);
57
- }
58
- if (null != this.minZoom) {
59
- this.setMinZoom(this.minZoom);
60
- }
61
- if (null != this.maxZoom) {
62
- this.setMaxZoom(this.maxZoom);
63
- }
64
- this.doResize();
65
- // Fire map ready event
66
- this.mapReady.emit(this.map);
67
- }
68
- ngOnChanges(changes) {
69
- /*
70
- * The following code is to address an issue with our (basic) implementation of
71
- * zooming and panning. From our testing, it seems that a pan operation followed
72
- * by a zoom operation in the same thread will interfere with eachother. The zoom
73
- * operation interrupts/cancels the pan, resulting in a final center point that is
74
- * inaccurate. The solution seems to be to either separate them with a timeout or
75
- * to collapse them into a setView call.
76
- */
77
- // Zooming and Panning
78
- if (changes['zoom'] && changes['center'] && null != this.zoom && null != this.center) {
79
- this.setView(changes['center'].currentValue, changes['zoom'].currentValue);
80
- }
81
- // Set the zoom level
82
- else if (changes['zoom']) {
83
- this.setZoom(changes['zoom'].currentValue);
84
- }
85
- // Set the map center
86
- else if (changes['center']) {
87
- this.setCenter(changes['center'].currentValue);
88
- }
89
- // Other options
90
- if (changes['fitBounds']) {
91
- this.setFitBounds(changes['fitBounds'].currentValue);
92
- }
93
- if (changes['maxBounds']) {
94
- this.setMaxBounds(changes['maxBounds'].currentValue);
95
- }
96
- if (changes['minZoom']) {
97
- this.setMinZoom(changes['minZoom'].currentValue);
98
- }
99
- if (changes['maxZoom']) {
100
- this.setMaxZoom(changes['maxZoom'].currentValue);
101
- }
102
- }
103
- ngOnDestroy() {
104
- // If this directive is destroyed, the map is too
105
- if (null != this.map) {
106
- this.map.remove();
107
- }
108
- }
109
- getMap() {
110
- return this.map;
111
- }
112
- onResize() {
113
- this.delayResize();
114
- }
115
- addMapEventListeners() {
116
- const registerEventHandler = (eventName, handler) => {
117
- this.map.on(eventName, handler);
118
- };
119
- // Add all the pass-through mouse event handlers
120
- registerEventHandler('click', (e) => LeafletUtil.handleEvent(this.zone, this.onClick, e));
121
- registerEventHandler('dblclick', (e) => LeafletUtil.handleEvent(this.zone, this.onDoubleClick, e));
122
- registerEventHandler('mousedown', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseDown, e));
123
- registerEventHandler('mouseup', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseUp, e));
124
- registerEventHandler('mouseover', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseOver, e));
125
- registerEventHandler('mouseout', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseOut, e));
126
- registerEventHandler('mousemove', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseMove, e));
127
- registerEventHandler('zoomstart', (e) => LeafletUtil.handleEvent(this.zone, this.onMapZoomStart, e));
128
- registerEventHandler('zoom', (e) => LeafletUtil.handleEvent(this.zone, this.onMapZoom, e));
129
- registerEventHandler('zoomend', (e) => LeafletUtil.handleEvent(this.zone, this.onMapZoomEnd, e));
130
- registerEventHandler('movestart', (e) => LeafletUtil.handleEvent(this.zone, this.onMapMoveStart, e));
131
- registerEventHandler('move', (e) => LeafletUtil.handleEvent(this.zone, this.onMapMove, e));
132
- registerEventHandler('moveend', (e) => LeafletUtil.handleEvent(this.zone, this.onMapMoveEnd, e));
133
- // Update any things for which we provide output bindings
134
- const outputUpdateHandler = () => {
135
- const zoom = this.map.getZoom();
136
- if (zoom !== this.zoom) {
137
- this.zoom = zoom;
138
- LeafletUtil.handleEvent(this.zone, this.zoomChange, zoom);
139
- }
140
- const center = this.map.getCenter();
141
- if (null != center || null != this.center) {
142
- if (((null == center || null == this.center) && center !== this.center)
143
- || (center.lat !== this.center.lat || center.lng !== this.center.lng)) {
144
- this.center = center;
145
- LeafletUtil.handleEvent(this.zone, this.centerChange, center);
146
- }
147
- }
148
- };
149
- registerEventHandler('moveend', outputUpdateHandler);
150
- registerEventHandler('zoomend', outputUpdateHandler);
151
- }
152
- /**
153
- * Resize the map to fit it's parent container
154
- */
155
- doResize() {
156
- // Run this outside of angular so the map events stay outside of angular
157
- this.zone.runOutsideAngular(() => {
158
- // Invalidate the map size to trigger it to update itself
159
- if (null != this.map) {
160
- this.map.invalidateSize({});
161
- }
162
- });
163
- }
164
- /**
165
- * Manage a delayed resize of the component
166
- */
167
- delayResize() {
168
- if (null != this.resizeTimer) {
169
- clearTimeout(this.resizeTimer);
170
- }
171
- this.resizeTimer = setTimeout(this.doResize.bind(this), 200);
172
- }
173
- /**
174
- * Set the view (center/zoom) all at once
175
- * @param center The new center
176
- * @param zoom The new zoom level
177
- */
178
- setView(center, zoom) {
179
- if (null != this.map && null != center && null != zoom) {
180
- this.map.setView(center, zoom, this.zoomPanOptions);
181
- }
182
- }
183
- /**
184
- * Set the map zoom level
185
- * @param zoom the new zoom level for the map
186
- */
187
- setZoom(zoom) {
188
- if (null != this.map && null != zoom) {
189
- this.map.setZoom(zoom, this.zoomOptions);
190
- }
191
- }
192
- /**
193
- * Set the center of the map
194
- * @param center the center point
195
- */
196
- setCenter(center) {
197
- if (null != this.map && null != center) {
198
- this.map.panTo(center, this.panOptions);
199
- }
200
- }
201
- /**
202
- * Fit the map to the bounds
203
- * @param latLngBounds the boundary to set
204
- */
205
- setFitBounds(latLngBounds) {
206
- if (null != this.map && null != latLngBounds) {
207
- this.map.fitBounds(latLngBounds, this.fitBoundsOptions);
208
- }
209
- }
210
- /**
211
- * Set the map's max bounds
212
- * @param latLngBounds the boundary to set
213
- */
214
- setMaxBounds(latLngBounds) {
215
- if (null != this.map && null != latLngBounds) {
216
- this.map.setMaxBounds(latLngBounds);
217
- }
218
- }
219
- /**
220
- * Set the map's min zoom
221
- * @param number the new min zoom
222
- */
223
- setMinZoom(zoom) {
224
- if (null != this.map && null != zoom) {
225
- this.map.setMinZoom(zoom);
226
- }
227
- }
228
- /**
229
- * Set the map's min zoom
230
- * @param number the new min zoom
231
- */
232
- setMaxZoom(zoom) {
233
- if (null != this.map && null != zoom) {
234
- this.map.setMaxZoom(zoom);
235
- }
236
- }
237
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: LeafletDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
238
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: LeafletDirective, selector: "[leaflet]", inputs: { fitBoundsOptions: ["leafletFitBoundsOptions", "fitBoundsOptions"], panOptions: ["leafletPanOptions", "panOptions"], zoomOptions: ["leafletZoomOptions", "zoomOptions"], zoomPanOptions: ["leafletZoomPanOptions", "zoomPanOptions"], options: ["leafletOptions", "options"], zoom: ["leafletZoom", "zoom"], center: ["leafletCenter", "center"], fitBounds: ["leafletFitBounds", "fitBounds"], maxBounds: ["leafletMaxBounds", "maxBounds"], minZoom: ["leafletMinZoom", "minZoom"], maxZoom: ["leafletMaxZoom", "maxZoom"] }, outputs: { mapReady: "leafletMapReady", zoomChange: "leafletZoomChange", centerChange: "leafletCenterChange", onClick: "leafletClick", onDoubleClick: "leafletDoubleClick", onMouseDown: "leafletMouseDown", onMouseUp: "leafletMouseUp", onMouseMove: "leafletMouseMove", onMouseOver: "leafletMouseOver", onMouseOut: "leafletMouseOut", onMapMove: "leafletMapMove", onMapMoveStart: "leafletMapMoveStart", onMapMoveEnd: "leafletMapMoveEnd", onMapZoom: "leafletMapZoom", onMapZoomStart: "leafletMapZoomStart", onMapZoomEnd: "leafletMapZoomEnd" }, host: { listeners: { "window:resize": "onResize()" } }, usesOnChanges: true, ngImport: i0 }); }
239
- }
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: LeafletDirective, decorators: [{
241
- type: Directive,
242
- args: [{
243
- selector: '[leaflet]'
244
- }]
245
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { fitBoundsOptions: [{
246
- type: Input,
247
- args: ['leafletFitBoundsOptions']
248
- }], panOptions: [{
249
- type: Input,
250
- args: ['leafletPanOptions']
251
- }], zoomOptions: [{
252
- type: Input,
253
- args: ['leafletZoomOptions']
254
- }], zoomPanOptions: [{
255
- type: Input,
256
- args: ['leafletZoomPanOptions']
257
- }], options: [{
258
- type: Input,
259
- args: ['leafletOptions']
260
- }], mapReady: [{
261
- type: Output,
262
- args: ['leafletMapReady']
263
- }], zoom: [{
264
- type: Input,
265
- args: ['leafletZoom']
266
- }], zoomChange: [{
267
- type: Output,
268
- args: ['leafletZoomChange']
269
- }], center: [{
270
- type: Input,
271
- args: ['leafletCenter']
272
- }], centerChange: [{
273
- type: Output,
274
- args: ['leafletCenterChange']
275
- }], fitBounds: [{
276
- type: Input,
277
- args: ['leafletFitBounds']
278
- }], maxBounds: [{
279
- type: Input,
280
- args: ['leafletMaxBounds']
281
- }], minZoom: [{
282
- type: Input,
283
- args: ['leafletMinZoom']
284
- }], maxZoom: [{
285
- type: Input,
286
- args: ['leafletMaxZoom']
287
- }], onClick: [{
288
- type: Output,
289
- args: ['leafletClick']
290
- }], onDoubleClick: [{
291
- type: Output,
292
- args: ['leafletDoubleClick']
293
- }], onMouseDown: [{
294
- type: Output,
295
- args: ['leafletMouseDown']
296
- }], onMouseUp: [{
297
- type: Output,
298
- args: ['leafletMouseUp']
299
- }], onMouseMove: [{
300
- type: Output,
301
- args: ['leafletMouseMove']
302
- }], onMouseOver: [{
303
- type: Output,
304
- args: ['leafletMouseOver']
305
- }], onMouseOut: [{
306
- type: Output,
307
- args: ['leafletMouseOut']
308
- }], onMapMove: [{
309
- type: Output,
310
- args: ['leafletMapMove']
311
- }], onMapMoveStart: [{
312
- type: Output,
313
- args: ['leafletMapMoveStart']
314
- }], onMapMoveEnd: [{
315
- type: Output,
316
- args: ['leafletMapMoveEnd']
317
- }], onMapZoom: [{
318
- type: Output,
319
- args: ['leafletMapZoom']
320
- }], onMapZoomStart: [{
321
- type: Output,
322
- args: ['leafletMapZoomStart']
323
- }], onMapZoomEnd: [{
324
- type: Output,
325
- args: ['leafletMapZoomEnd']
326
- }], onResize: [{
327
- type: HostListener,
328
- args: ['window:resize', []]
329
- }] } });
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGVhZmxldC9zcmMvbGliL2NvcmUvbGVhZmxldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0MsTUFBTSxFQUV0RyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUF5RCxHQUFHLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBRTlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLN0MsTUFBTSxPQUFPLGdCQUFnQjtJQWdFNUIsWUFBb0IsT0FBbUIsRUFBVSxJQUFZO1FBQXpDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBN0RwRCxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFPQSxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDbEQsZUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNwQyxtQkFBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUcxRSx3QkFBd0I7UUFDQyxZQUFPLEdBQWUsRUFBRSxDQUFDO1FBRWxELDBDQUEwQztRQUNmLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSWpDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBSXRDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQWV6RSxtQkFBbUI7UUFDSyxZQUFPLEdB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QjtnQkFDQyxVQUFVO3NCQUFwQyxNQUFNO3VCQUFDLGlCQUFpQjtnQkFHQyxTQUFTO3NCQUFsQyxNQUFNO3VCQUFDLGdCQUFnQjtnQkFDTyxjQUFjO3NCQUE1QyxNQUFNO3VCQUFDLHFCQUFxQjtnQkFDQSxZQUFZO3NCQUF4QyxNQUFNO3VCQUFDLG1CQUFtQjtnQkFHRCxTQUFTO3NCQUFsQyxNQUFNO3VCQUFDLGdCQUFnQjtnQkFDTyxjQUFjO3NCQUE1QyxNQUFNO3VCQUFDLHFCQUFxQjtnQkFDQSxZQUFZO3NCQUF4QyxNQUFNO3VCQUFDLG1CQUFtQjtnQkFzRzNCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCxcblx0U2ltcGxlQ2hhbmdlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBsYXRMbmcsIExhdExuZywgTGF0TG5nQm91bmRzLCBMZWFmbGV0RXZlbnQsIExlYWZsZXRNb3VzZUV2ZW50LCBtYXAsIE1hcCwgTWFwT3B0aW9ucyB9IGZyb20gJ2xlYWZsZXQnO1xuXG5pbXBvcnQgeyBMZWFmbGV0VXRpbCB9IGZyb20gJy4vbGVhZmxldC51dGlsJztcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW2xlYWZsZXRdJ1xufSlcbmV4cG9ydCBjbGFzcyBMZWFmbGV0RGlyZWN0aXZlXG5cdGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG5cblx0cmVhZG9ubHkgREVGQVVMVF9aT09NID0gMTtcblx0cmVhZG9ubHkgREVGQVVMVF9DRU5URVIgPSBsYXRMbmcoMzguOTA3MTkyLCAtNzcuMDM2ODcxKTtcblx0cmVhZG9ubHkgREVGQVVMVF9GUFpfT1BUSU9OUyA9IHt9O1xuXG5cdHJlc2l6ZVRpbWVyOiBhbnk7XG5cblx0Ly8gUmVmZXJlbmNlIHRvIHRoZSBwcmltYXJ5IG1hcCBvYmplY3Rcblx0bWFwOiBNYXA7XG5cblx0QElucHV0KCdsZWFmbGV0Rml0Qm91bmRzT3B0aW9ucycpIGZpdEJvdW5kc09wdGlvbnMgPSB0aGlzLkRFRkFVTFRfRlBaX09QVElPTlM7XG5cdEBJbnB1dCgnbGVhZmxldFBhbk9wdGlvbnMnKSBwYW5PcHRpb25zID0gdGhpcy5ERUZBVUxUX0ZQWl9PUFRJT05TO1xuXHRASW5wdXQoJ2xlYWZsZXRab29tT3B0aW9ucycpIHpvb21PcHRpb25zID0gdGhpcy5ERUZBVUxUX0ZQWl9PUFRJT05TO1xuXHRASW5wdXQoJ2xlYWZsZXRab29tUGFuT3B0aW9ucycpIHpvb21QYW5PcHRpb25zID0gdGhpcy5ERUZBVUxUX0ZQWl9PUFRJT05TO1xuXG5cblx0Ly8gRGVmYXVsdCBjb25maWd1cmF0aW9uXG5cdEBJbnB1dCgnbGVhZmxldE9wdGlvbnMnKSBvcHRpb25zOiBNYXBPcHRpb25zID0ge307XG5cblx0Ly8gQ29uZmlndXJlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgbWFwXG5cdEBPdXRwdXQoJ2xlYWZsZXRNYXBSZWFkeScpIG1hcFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxNYXA+KCk7XG5cblx0Ly8gWm9vbSBsZXZlbCBmb3IgdGhlIG1hcFxuXHRASW5wdXQoJ2xlYWZsZXRab29tJykgem9vbTogbnVtYmVyO1xuXHRAT3V0cHV0KCdsZWFmbGV0Wm9vbUNoYW5nZScpIHpvb21DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuXHQvLyBDZW50ZXIgb2YgdGhlIG1hcFxuXHRASW5wdXQoJ2xlYWZsZXRDZW50ZXInKSBjZW50ZXI6IExhdExuZztcblx0QE91dHB1dCgnbGVhZmxldENlbnRlckNoYW5nZScpIGNlbnRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TGF0TG5nPigpO1xuXG5cdC8vIFNldCBmaXQgYm91bmRzIGZvciBtYXBcblx0QElucHV0KCdsZWFmbGV0Rml0Qm91bmRzJykgZml0Qm91bmRzOiBMYXRMbmdCb3VuZHM7XG5cblx0Ly8gU2V0IHRoZSBtYXggYm91bmRzIGZvciB0aGUgbWFwXG5cdEBJbnB1dCgnbGVhZmxldE1heEJvdW5kcycpIG1heEJvdW5kczogTGF0TG5nQm91bmRzO1xuXG5cdC8vIFNldCB0aGUgbWluIHpvb20gZm9yIHRoZSBtYXBcblx0QElucHV0KCdsZWFmbGV0TWluWm9vbScpIG1pblpvb206IG51bWJlcjtcblxuXHQvLyBTZXQgdGhlIG1heCB6b29tIGZvciB0aGUgbWFwXG5cdEBJbnB1dCgnbGVhZmxldE1heFpvb20nKSBtYXhab29tOiBudW1iZXI7XG5cblxuXHQvLyBNb3VzZSBNYXAgRXZlbnRzXG5cdEBPdXRwdXQoJ2xlYWZsZXRDbGljaycpIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRNb3VzZUV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0RG91YmxlQ2xpY2snKSBvbkRvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0TW91c2VFdmVudD4oKTtcblx0QE91dHB1dCgnbGVhZmxldE1vdXNlRG93bicpIG9uTW91c2VEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0TW91c2VFdmVudD4oKTtcblx0QE91dHB1dCgnbGVhZmxldE1vdXNlVXAnKSBvbk1vdXNlVXAgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRNb3VzZUV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0TW91c2VNb3ZlJykgb25Nb3VzZU1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRNb3VzZUV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0TW91c2VPdmVyJykgb25Nb3VzZU92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRNb3VzZUV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0TW91c2VPdXQnKSBvbk1vdXNlT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0TW91c2VFdmVudD4oKTtcblxuXHQvLyBNYXAgTW92ZSBFdmVudHNcblx0QE91dHB1dCgnbGVhZmxldE1hcE1vdmUnKSBvbk1hcE1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRFdmVudD4oKTtcblx0QE91dHB1dCgnbGVhZmxldE1hcE1vdmVTdGFydCcpIG9uTWFwTW92ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0RXZlbnQ+KCk7XG5cdEBPdXRwdXQoJ2xlYWZsZXRNYXBNb3ZlRW5kJykgb25NYXBNb3ZlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0RXZlbnQ+KCk7XG5cblx0Ly8gTWFwIFpvb20gRXZlbnRzXG5cdEBPdXRwdXQoJ2xlYWZsZXRNYXBab29tJykgb25NYXBab29tID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0RXZlbnQ+KCk7XG5cdEBPdXRwdXQoJ2xlYWZsZXRNYXBab29tU3RhcnQnKSBvbk1hcFpvb21TdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8TGVhZmxldEV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0TWFwWm9vbUVuZCcpIG9uTWFwWm9vbUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8TGVhZmxldEV2ZW50PigpO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcblx0XHQvLyBOb3RoaW5nIGhlcmVcblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXG5cdFx0Ly8gQ3JlYXRlIHRoZSBtYXAgb3V0c2lkZSBvZiBhbmd1bGFyIHNvIHRoZSB2YXJpb3VzIG1hcCBldmVudHMgZG9uJ3QgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG5cdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBtYXAgd2l0aCBzb21lIHJlYXNvbmFibGUgZGVmYXVsdHNcblx0XHRcdHRoaXMubWFwID0gbWFwKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLm9wdGlvbnMpO1xuXHRcdFx0dGhpcy5hZGRNYXBFdmVudExpc3RlbmVycygpO1xuXG5cdFx0fSk7XG5cblx0XHQvLyBPbmx5IHNldFZpZXcgaWYgdGhlcmUgaXMgYSBjZW50ZXIvem9vbVxuXHRcdGlmIChudWxsICE9IHRoaXMuY2VudGVyICYmIG51bGwgIT0gdGhpcy56b29tKSB7XG5cdFx0XHR0aGlzLnNldFZpZXcodGhpcy5jZW50ZXIsIHRoaXMuem9vbSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHVwIGFsbCB0aGUgaW5pdGlhbCBzZXR0aW5nc1xuXHRcdGlmIChudWxsICE9IHRoaXMuZml0Qm91bmRzKSB7XG5cdFx0XHR0aGlzLnNldEZpdEJvdW5kcyh0aGlzLmZpdEJvdW5kcyk7XG5cdFx0fVxuXG5cdFx0aWYgKG51bGwgIT0gdGhpcy5tYXhCb3VuZHMpIHtcblx0XHRcdHRoaXMuc2V0TWF4Qm91bmRzKHRoaXMubWF4Qm91bmRzKTtcblx0XHR9XG5cblx0XHRpZiAobnVsbCAhPSB0aGlzLm1pblpvb20pIHtcblx0XHRcdHRoaXMuc2V0TWluWm9vbSh0aGlzLm1pblpvb20pO1xuXHRcdH1cblxuXHRcdGlmIChudWxsICE9IHRoaXMubWF4Wm9vbSkge1xuXHRcdFx0dGhpcy5zZXRNYXhab29tKHRoaXMubWF4Wm9vbSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kb1Jlc2l6ZSgpO1xuXG5cdFx0Ly8gRmlyZSBtYXAgcmVhZHkgZXZlbnRcblx0XHR0aGlzLm1hcFJlYWR5LmVtaXQodGhpcy5tYXApO1xuXG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KSB7XG5cblx0XHQvKlxuXHRcdCAqIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB0byBhZGRyZXNzIGFuIGlzc3VlIHdpdGggb3VyIChiYXNpYykgaW1wbGVtZW50YXRpb24gb2Zcblx0XHQgKiB6b29taW5nIGFuZCBwYW5uaW5nLiBGcm9tIG91ciB0ZXN0aW5nLCBpdCBzZWVtcyB0aGF0IGEgcGFuIG9wZXJhdGlvbiBmb2xsb3dlZFxuXHRcdCAqIGJ5IGEgem9vbSBvcGVyYXRpb24gaW4gdGhlIHNhbWUgdGhyZWFkIHdpbGwgaW50ZXJmZXJlIHdpdGggZWFjaG90aGVyLiBUaGUgem9vbVxuXHRcdCAqIG9wZXJhdGlvbiBpbnRlcnJ1cHRzL2NhbmNlbHMgdGhlIHBhbiwgcmVzdWx0aW5nIGluIGEgZmluYWwgY2VudGVyIHBvaW50IHRoYXQgaXNcblx0XHQgKiBpbmFjY3VyYXRlLiBUaGUgc29sdXRpb24gc2VlbXMgdG8gYmUgdG8gZWl0aGVyIHNlcGFyYXRlIHRoZW0gd2l0aCBhIHRpbWVvdXQgb3Jcblx0XHQgICogdG8gY29sbGFwc2UgdGhlbSBpbnRvIGEgc2V0VmlldyBjYWxsLlxuXHRcdCAqL1xuXG5cdFx0Ly8gWm9vbWluZyBhbmQgUGFubmluZ1xuXHRcdGlmIChjaGFuZ2VzWyd6b29tJ10gJiYgY2hhbmdlc1snY2VudGVyJ10gJiYgbnVsbCAhPSB0aGlzLnpvb20gJiYgbnVsbCAhPSB0aGlzLmNlbnRlcikge1xuXHRcdFx0dGhpcy5zZXRWaWV3KGNoYW5nZXNbJ2NlbnRlciddLmN1cnJlbnRWYWx1ZSwgY2hhbmdlc1snem9vbSddLmN1cnJlbnRWYWx1ZSk7XG5cdFx0fVxuXHRcdC8vIFNldCB0aGUgem9vbSBsZXZlbFxuXHRcdGVsc2UgaWYgKGNoYW5nZXNbJ3pvb20nXSkge1xuXHRcdFx0dGhpcy5zZXRab29tKGNoYW5nZXNbJ3pvb20nXS5jdXJyZW50VmFsdWUpO1xuXHRcdH1cblx0XHQvLyBTZXQgdGhlIG1hcCBjZW50ZXJcblx0XHRlbHNlIGlmIChjaGFuZ2VzWydjZW50ZXInXSkge1xuXHRcdFx0dGhpcy5zZXRDZW50ZXIoY2hhbmdlc1snY2VudGVyJ10uY3VycmVudFZhbHVlKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBvcHRpb25zXG5cdFx0aWYgKGNoYW5nZXNbJ2ZpdEJvdW5kcyddKSB7XG5cdFx0XHR0aGlzLnNldEZpdEJvdW5kcyhjaGFuZ2VzWydmaXRCb3VuZHMnXS5jdXJyZW50VmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzWydtYXhCb3VuZHMnXSkge1xuXHRcdFx0dGhpcy5zZXRNYXhCb3VuZHMoY2hhbmdlc1snbWF4Qm91bmRzJ10uY3VycmVudFZhbHVlKTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlc1snbWluWm9vbSddKSB7XG5cdFx0XHR0aGlzLnNldE1pblpvb20oY2hhbmdlc1snbWluWm9vbSddLmN1cnJlbnRWYWx1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNoYW5nZXNbJ21heFpvb20nXSkge1xuXHRcdFx0dGhpcy5zZXRNYXhab29tKGNoYW5nZXNbJ21heFpvb20nXS5jdXJyZW50VmFsdWUpO1xuXHRcdH1cblxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0Ly8gSWYgdGhpcyBkaXJlY3RpdmUgaXMgZGVzdHJveWVkLCB0aGUgbWFwIGlzIHRvb1xuXHRcdGlmIChudWxsICE9IHRoaXMubWFwKSB7XG5cdFx0XHR0aGlzLm1hcC5yZW1vdmUoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWFwKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcDtcblx0fVxuXG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFtdKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLmRlbGF5UmVzaXplKCk7XG5cdH1cblxuXHRwcml2YXRlIGFkZE1hcEV2ZW50TGlzdGVuZXJzKCkge1xuXG5cdFx0Y29uc3QgcmVnaXN0ZXJFdmVudEhhbmRsZXIgPSAoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6IChlOiBMZWFmbGV0RXZlbnQpID0+IGFueSkgPT4ge1xuXHRcdFx0dGhpcy5tYXAub24oZXZlbnROYW1lLCBoYW5kbGVyKTtcblx0XHR9O1xuXG5cblx0XHQvLyBBZGQgYWxsIHRoZSBwYXNzLXRocm91Z2ggbW91c2UgZXZlbnQgaGFuZGxlcnNcblx0XHRyZWdpc3RlckV2ZW50SGFuZGxlcignY2xpY2snLCAoZTogTGVhZmxldE1vdXNlRXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbkNsaWNrLCBlKSk7XG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2RibGNsaWNrJywgKGU6IExlYWZsZXRNb3VzZUV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25Eb3VibGVDbGljaywgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtb3VzZWRvd24nLCAoZTogTGVhZmxldE1vdXNlRXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1vdXNlRG93biwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtb3VzZXVwJywgKGU6IExlYWZsZXRNb3VzZUV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25Nb3VzZVVwLCBlKSk7XG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21vdXNlb3ZlcicsIChlOiBMZWFmbGV0TW91c2VFdmVudCkgPT4gTGVhZmxldFV0aWwuaGFuZGxlRXZlbnQodGhpcy56b25lLCB0aGlzLm9uTW91c2VPdmVyLCBlKSk7XG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21vdXNlb3V0JywgKGU6IExlYWZsZXRNb3VzZUV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25Nb3VzZU91dCwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtb3VzZW1vdmUnLCAoZTogTGVhZmxldE1vdXNlRXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1vdXNlTW92ZSwgZSkpO1xuXG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3pvb21zdGFydCcsIChlOiBMZWFmbGV0RXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1hcFpvb21TdGFydCwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd6b29tJywgKGU6IExlYWZsZXRFdmVudCkgPT4gTGVhZmxldFV0aWwuaGFuZGxlRXZlbnQodGhpcy56b25lLCB0aGlzLm9uTWFwWm9vbSwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd6b29tZW5kJywgKGU6IExlYWZsZXRFdmVudCkgPT4gTGVhZmxldFV0aWwuaGFuZGxlRXZlbnQodGhpcy56b25lLCB0aGlzLm9uTWFwWm9vbUVuZCwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtb3Zlc3RhcnQnLCAoZTogTGVhZmxldEV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25NYXBNb3ZlU3RhcnQsIGUpKTtcblx0XHRyZWdpc3RlckV2ZW50SGFuZGxlcignbW92ZScsIChlOiBMZWFmbGV0RXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1hcE1vdmUsIGUpKTtcblx0XHRyZWdpc3RlckV2ZW50SGFuZGxlcignbW92ZWVuZCcsIChlOiBMZWFmbGV0RXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1hcE1vdmVFbmQsIGUpKTtcblxuXG5cdFx0Ly8gVXBkYXRlIGFueSB0aGluZ3MgZm9yIHdoaWNoIHdlIHByb3ZpZGUgb3V0cHV0IGJpbmRpbmdzXG5cdFx0Y29uc3Qgb3V0cHV0VXBkYXRlSGFuZGxlciA9ICgpID0+IHtcblx0XHRcdGNvbnN0IHpvb20gPSB0aGlzLm1hcC5nZXRab29tKCk7XG5cdFx0XHRpZiAoem9vbSAhPT0gdGhpcy56b29tKSB7XG5cdFx0XHRcdHRoaXMuem9vbSA9IHpvb207XG5cdFx0XHRcdExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy56b29tQ2hhbmdlLCB6b29tKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY2VudGVyID0gdGhpcy5tYXAuZ2V0Q2VudGVyKCk7XG5cdFx0XHRpZiAobnVsbCAhPSBjZW50ZXIgfHwgbnVsbCAhPSB0aGlzLmNlbnRlcikge1xuXG5cdFx0XHRcdGlmICgoKG51bGwgPT0gY2VudGVyIHx8IG51bGwgPT0gdGhpcy5jZW50ZXIpICYmIGNlbnRlciAhPT0gdGhpcy5jZW50ZXIpXG5cdFx0XHRcdFx0fHwgKGNlbnRlci5sYXQgIT09IHRoaXMuY2VudGVyLmxhdCB8fCBjZW50ZXIubG5nICE9PSB0aGlzLmNlbnRlci5sbmcpKSB7XG5cblx0XHRcdFx0XHR0aGlzLmNlbnRlciA9IGNlbnRlcjtcblx0XHRcdFx0XHRMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMuY2VudGVyQ2hhbmdlLCBjZW50ZXIpO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21vdmVlbmQnLCBvdXRwdXRVcGRhdGVIYW5kbGVyKTtcblx0XHRyZWdpc3RlckV2ZW50SGFuZGxlcignem9vbWVuZCcsIG91dHB1dFVwZGF0ZUhhbmRsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2l6ZSB0aGUgbWFwIHRvIGZpdCBpdCdzIHBhcmVudCBjb250YWluZXJcblx0ICovXG5cdHByaXZhdGUgZG9SZXNpemUoKSB7XG5cblx0XHQvLyBSdW4gdGhpcyBvdXRzaWRlIG9mIGFuZ3VsYXIgc28gdGhlIG1hcCBldmVudHMgc3RheSBvdXRzaWRlIG9mIGFuZ3VsYXJcblx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXG5cdFx0XHQvLyBJbnZhbGlkYXRlIHRoZSBtYXAgc2l6ZSB0byB0cmlnZ2VyIGl0IHRvIHVwZGF0ZSBpdHNlbGZcblx0XHRcdGlmIChudWxsICE9IHRoaXMubWFwKSB7XG5cdFx0XHRcdHRoaXMubWFwLmludmFsaWRhdGVTaXplKHt9KTtcblx0XHRcdH1cblxuXHRcdH0pO1xuXG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlIGEgZGVsYXllZCByZXNpemUgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0cHJpdmF0ZSBkZWxheVJlc2l6ZSgpIHtcblx0XHRpZiAobnVsbCAhPSB0aGlzLnJlc2l6ZVRpbWVyKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lcik7XG5cdFx0fVxuXHRcdHRoaXMucmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuZG9SZXNpemUuYmluZCh0aGlzKSwgMjAwKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlldyAoY2VudGVyL3pvb20pIGFsbCBhdCBvbmNlXG5cdCAqIEBwYXJhbSBjZW50ZXIgVGhlIG5ldyBjZW50ZXJcblx0ICogQHBhcmFtIHpvb20gVGhlIG5ldyB6b29tIGxldmVsXG5cdCAqL1xuXHRwcml2YXRlIHNldFZpZXcoY2VudGVyOiBMYXRMbmcsIHpvb206IG51bWJlcikge1xuXG5cdFx0aWYgKG51bGwgIT0gdGhpcy5tYXAgJiYgbnVsbCAhPSBjZW50ZXIgJiYgbnVsbCAhPSB6b29tKSB7XG5cdFx0XHR0aGlzLm1hcC5zZXRWaWV3KGNlbnRlciwgem9vbSwgdGhpcy56b29tUGFuT3B0aW9ucyk7XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBtYXAgem9vbSBsZXZlbFxuXHQgKiBAcGFyYW0gem9vbSB0aGUgbmV3IHpvb20gbGV2ZWwgZm9yIHRoZSBtYXBcblx0ICovXG5cdHByaXZhdGUgc2V0Wm9vbSh6b29tOiBudW1iZXIpIHtcblxuXHRcdGlmIChudWxsICE9IHRoaXMubWFwICYmIG51bGwgIT0gem9vbSkge1xuXHRcdFx0dGhpcy5tYXAuc2V0Wm9vbSh6b29tLCB0aGlzLnpvb21PcHRpb25zKTtcblx0XHR9XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGNlbnRlciBvZiB0aGUgbWFwXG5cdCAqIEBwYXJhbSBjZW50ZXIgdGhlIGNlbnRlciBwb2ludFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRDZW50ZXIoY2VudGVyOiBMYXRMbmcpIHtcblxuXHRcdGlmIChudWxsICE9IHRoaXMubWFwICYmIG51bGwgIT0gY2VudGVyKSB7XG5cdFx0XHR0aGlzLm1hcC5wYW5UbyhjZW50ZXIsIHRoaXMucGFuT3B0aW9ucyk7XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogRml0IHRoZSBtYXAgdG8gdGhlIGJvdW5kc1xuXHQgKiBAcGFyYW0gbGF0TG5nQm91bmRzIHRoZSBib3VuZGFyeSB0byBzZXRcblx0ICovXG5cdHByaXZhdGUgc2V0Rml0Qm91bmRzKGxhdExuZ0JvdW5kczogTGF0TG5nQm91bmRzKSB7XG5cblx0XHRpZiAobnVsbCAhPSB0aGlzLm1hcCAmJiBudWxsICE9IGxhdExuZ0JvdW5kcykge1xuXHRcdFx0dGhpcy5tYXAuZml0Qm91bmRzKGxhdExuZ0JvdW5kcywgdGhpcy5maXRCb3VuZHNPcHRpb25zKTtcblx0XHR9XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIG1hcCdzIG1heCBib3VuZHNcblx0ICogQHBhcmFtIGxhdExuZ0JvdW5kcyB0aGUgYm91bmRhcnkgdG8gc2V0XG5cdCAqL1xuXHRwcml2YXRlIHNldE1heEJvdW5kcyhsYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcykge1xuXG5cdFx0aWYgKG51bGwgIT0gdGhpcy5tYXAgJiYgbnVsbCAhPSBsYXRMbmdCb3VuZHMpIHtcblx0XHRcdHRoaXMubWFwLnNldE1heEJvdW5kcyhsYXRMbmdCb3VuZHMpO1xuXHRcdH1cblxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgbWFwJ3MgbWluIHpvb21cblx0ICogQHBhcmFtIG51bWJlciB0aGUgbmV3IG1pbiB6b29tXG5cdCAqL1xuXHRwcml2YXRlIHNldE1pblpvb20oem9vbTogbnVtYmVyKSB7XG5cblx0XHRpZiAobnVsbCAhPSB0aGlzLm1hcCAmJiBudWxsICE9IHpvb20pIHtcblx0XHRcdHRoaXMubWFwLnNldE1pblpvb20oem9vbSk7XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBtYXAncyBtaW4gem9vbVxuXHQgKiBAcGFyYW0gbnVtYmVyIHRoZSBuZXcgbWluIHpvb21cblx0ICovXG5cdHByaXZhdGUgc2V0TWF4Wm9vbSh6b29tOiBudW1iZXIpIHtcblxuXHRcdGlmIChudWxsICE9IHRoaXMubWFwICYmIG51bGwgIT0gem9vbSkge1xuXHRcdFx0dGhpcy5tYXAuc2V0TWF4Wm9vbSh6b29tKTtcblx0XHR9XG5cblx0fVxuXG59XG4iXX0=
@@ -1,12 +0,0 @@
1
- export class LeafletDirectiveWrapper {
2
- constructor(leafletDirective) {
3
- this.leafletDirective = leafletDirective;
4
- }
5
- init() {
6
- // Nothing for now
7
- }
8
- getMap() {
9
- return this.leafletDirective.getMap();
10
- }
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC5kaXJlY3RpdmUud3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1sZWFmbGV0L3NyYy9saWIvY29yZS9sZWFmbGV0LmRpcmVjdGl2ZS53cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sT0FBTyx1QkFBdUI7SUFLbkMsWUFBWSxnQkFBa0M7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJO1FBQ0gsa0JBQWtCO0lBQ25CLENBQUM7SUFFRCxNQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGVhZmxldERpcmVjdGl2ZSB9IGZyb20gJy4vbGVhZmxldC5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBNYXAgfSBmcm9tICdsZWFmbGV0JztcblxuZXhwb3J0IGNsYXNzIExlYWZsZXREaXJlY3RpdmVXcmFwcGVyIHtcblxuXHQvLyBSZWZlcmVuY2UgdG8gdGhlIG1haW4gbGVhZmxldCBkaXJlY3RpdmVcblx0cHJvdGVjdGVkIGxlYWZsZXREaXJlY3RpdmU6IExlYWZsZXREaXJlY3RpdmU7XG5cblx0Y29uc3RydWN0b3IobGVhZmxldERpcmVjdGl2ZTogTGVhZmxldERpcmVjdGl2ZSkge1xuXHRcdHRoaXMubGVhZmxldERpcmVjdGl2ZSA9IGxlYWZsZXREaXJlY3RpdmU7XG5cdH1cblxuXHRpbml0KCkge1xuXHRcdC8vIE5vdGhpbmcgZm9yIG5vd1xuXHR9XG5cblx0Z2V0TWFwKCk6IE1hcCB7XG5cdFx0cmV0dXJuIHRoaXMubGVhZmxldERpcmVjdGl2ZS5nZXRNYXAoKTtcblx0fVxuXG59XG4iXX0=
@@ -1,20 +0,0 @@
1
- export class LeafletUtil {
2
- static mapToArray(map) {
3
- const toReturn = [];
4
- for (const k in map) {
5
- if (map.hasOwnProperty(k)) {
6
- toReturn.push(map[k]);
7
- }
8
- }
9
- return toReturn;
10
- }
11
- static handleEvent(zone, eventEmitter, event) {
12
- // Don't want to emit if there are no observers
13
- if (0 < eventEmitter.observers.length) {
14
- zone.run(() => {
15
- eventEmitter.emit(event);
16
- });
17
- }
18
- }
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxlYWZsZXQvc3JjL2xpYi9jb3JlL2xlYWZsZXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sV0FBVztJQUV2QixNQUFNLENBQUMsVUFBVSxDQUFJLEdBQTJCO1FBQy9DLE1BQU0sUUFBUSxHQUFRLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDRixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUksSUFBWSxFQUFFLFlBQTZCLEVBQUUsS0FBUTtRQUUxRSwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDYixZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQztJQUVGLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBMZWFmbGV0VXRpbCB7XG5cblx0c3RhdGljIG1hcFRvQXJyYXk8VD4obWFwOiB7IFsga2V5OiBzdHJpbmcgXTogVCB9KTogVFtdIHtcblx0XHRjb25zdCB0b1JldHVybjogVFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGsgaW4gbWFwKSB7XG5cdFx0XHRpZiAobWFwLmhhc093blByb3BlcnR5KGspKSB7XG5cdFx0XHRcdHRvUmV0dXJuLnB1c2gobWFwW2tdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdG9SZXR1cm47XG5cdH1cblxuXHRzdGF0aWMgaGFuZGxlRXZlbnQ8VD4oem9uZTogTmdab25lLCBldmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxUPiwgZXZlbnQ6IFQpIHtcblxuXHRcdC8vIERvbid0IHdhbnQgdG8gZW1pdCBpZiB0aGVyZSBhcmUgbm8gb2JzZXJ2ZXJzXG5cdFx0aWYgKDAgPCBldmVudEVtaXR0ZXIub2JzZXJ2ZXJzLmxlbmd0aCkge1xuXHRcdFx0em9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0XHRldmVudEVtaXR0ZXIuZW1pdChldmVudCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0fVxufVxuIl19
@@ -1,113 +0,0 @@
1
- import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
- import { LeafletUtil } from '../../core/leaflet.util';
3
- import { LeafletDirectiveWrapper } from '../../core/leaflet.directive.wrapper';
4
- import { LeafletControlLayersWrapper } from '../control/leaflet-control-layers.wrapper';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../core/leaflet.directive";
7
- /**
8
- * Baselayers directive
9
- *
10
- * This directive is provided as a convenient way to add baselayers to the map. The input accepts
11
- * a key-value map of layer name -> layer. Mutable changed are detected. On changes, a differ is
12
- * used to determine what changed so that layers are appropriately added or removed. This directive
13
- * will also add the layers control so users can switch between available base layers.
14
- *
15
- * To specify which layer to show as the 'active' baselayer, you will want to add it to the map
16
- * using the layers directive. Otherwise, the plugin will use the last one it sees.
17
- */
18
- export class LeafletBaseLayersDirective {
19
- // Set/get baseLayers
20
- set baseLayers(v) {
21
- this.baseLayersValue = v;
22
- this.updateBaseLayers();
23
- }
24
- get baseLayers() {
25
- return this.baseLayersValue;
26
- }
27
- constructor(leafletDirective, differs, zone) {
28
- this.differs = differs;
29
- this.zone = zone;
30
- // Output for once the layers control is ready
31
- this.layersControlReady = new EventEmitter();
32
- this.leafletDirective = new LeafletDirectiveWrapper(leafletDirective);
33
- this.controlLayers = new LeafletControlLayersWrapper(this.zone, this.layersControlReady);
34
- this.baseLayersDiffer = this.differs.find({}).create();
35
- }
36
- ngOnDestroy() {
37
- this.baseLayers = {};
38
- if (null != this.controlLayers.getLayersControl()) {
39
- this.controlLayers.getLayersControl().remove();
40
- }
41
- }
42
- ngOnInit() {
43
- // Init the map
44
- this.leafletDirective.init();
45
- // Create the control outside angular to prevent events from triggering chnage detection
46
- this.zone.runOutsideAngular(() => {
47
- // Initially configure the controlLayers
48
- this.controlLayers
49
- .init({}, this.layersControlOptions)
50
- .addTo(this.leafletDirective.getMap());
51
- });
52
- this.updateBaseLayers();
53
- }
54
- ngDoCheck() {
55
- this.updateBaseLayers();
56
- }
57
- updateBaseLayers() {
58
- const map = this.leafletDirective.getMap();
59
- const layersControl = this.controlLayers.getLayersControl();
60
- if (null != map && null != layersControl && null != this.baseLayersDiffer) {
61
- const changes = this.baseLayersDiffer.diff(this.baseLayersValue);
62
- const results = this.controlLayers.applyBaseLayerChanges(changes);
63
- if (results.changed()) {
64
- this.syncBaseLayer();
65
- }
66
- }
67
- }
68
- /**
69
- * Check the current base layer and change it to the new one if necessary
70
- */
71
- syncBaseLayer() {
72
- const map = this.leafletDirective.getMap();
73
- const layers = LeafletUtil.mapToArray(this.baseLayers);
74
- let foundLayer;
75
- // Search all the layers in the map to see if we can find them in the baselayer array
76
- map.eachLayer((l) => {
77
- foundLayer = layers.find((bl) => (l === bl));
78
- });
79
- // Did we find the layer?
80
- if (null != foundLayer) {
81
- // Yes - set the baselayer to the one we found
82
- this.baseLayer = foundLayer;
83
- }
84
- else {
85
- // No - set the baselayer to the first in the array and add it to the map
86
- if (layers.length > 0) {
87
- this.baseLayer = layers[0];
88
- // Add layers outside of angular to prevent events from triggering change detection
89
- this.zone.runOutsideAngular(() => {
90
- this.baseLayer.addTo(map);
91
- });
92
- }
93
- }
94
- }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: LeafletBaseLayersDirective, deps: [{ token: i1.LeafletDirective }, { token: i0.KeyValueDiffers }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
96
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: LeafletBaseLayersDirective, selector: "[leafletBaseLayers]", inputs: { baseLayers: ["leafletBaseLayers", "baseLayers"], layersControlOptions: ["leafletLayersControlOptions", "layersControlOptions"] }, outputs: { layersControlReady: "leafletLayersControlReady" }, ngImport: i0 }); }
97
- }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: LeafletBaseLayersDirective, decorators: [{
99
- type: Directive,
100
- args: [{
101
- selector: '[leafletBaseLayers]'
102
- }]
103
- }], ctorParameters: () => [{ type: i1.LeafletDirective }, { type: i0.KeyValueDiffers }, { type: i0.NgZone }], propDecorators: { baseLayers: [{
104
- type: Input,
105
- args: ['leafletBaseLayers']
106
- }], layersControlOptions: [{
107
- type: Input,
108
- args: ['leafletLayersControlOptions']
109
- }], layersControlReady: [{
110
- type: Output,
111
- args: ['leafletLayersControlReady']
112
- }] } });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1iYXNlbGF5ZXJzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1sZWFmbGV0L3NyYy9saWIvbGF5ZXJzL2Jhc2UvbGVhZmxldC1iYXNlbGF5ZXJzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUFXLFlBQVksRUFBRSxLQUFLLEVBQy9CLE1BQU0sRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7OztBQUd4Rjs7Ozs7Ozs7OztHQVVHO0FBSUgsTUFBTSxPQUFPLDBCQUEwQjtJQVN0QyxxQkFBcUI7SUFDckIsSUFDSSxVQUFVLENBQUMsQ0FBNEI7UUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFFekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksVUFBVTtRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM3QixDQUFDO0lBY0QsWUFBWSxnQkFBa0MsRUFBVSxPQUF3QixFQUFVLElBQVk7UUFBOUMsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBVHRHLDhDQUE4QztRQUNULHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBUzVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGtC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LFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztRQUNGLENBQUM7SUFFRixDQUFDOzhHQW5IVywwQkFBMEI7a0dBQTFCLDBCQUEwQjs7MkZBQTFCLDBCQUEwQjtrQkFIdEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUscUJBQXFCO2lCQUMvQjt3SUFZSSxVQUFVO3NCQURiLEtBQUs7dUJBQUMsbUJBQW1CO2dCQVdZLG9CQUFvQjtzQkFBekQsS0FBSzt1QkFBQyw2QkFBNkI7Z0JBR0Msa0JBQWtCO3NCQUF0RCxNQUFNO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERpcmVjdGl2ZSwgRG9DaGVjaywgRXZlbnRFbWl0dGVyLCBJbnB1dCwgS2V5VmFsdWVEaWZmZXIsIEtleVZhbHVlRGlmZmVycywgTmdab25lLCBPbkRlc3Ryb3ksXG5cdE9uSW5pdCwgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250cm9sLCBMYXllciB9IGZyb20gJ2xlYWZsZXQnO1xuXG5pbXBvcnQgeyBMZWFmbGV0VXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvbGVhZmxldC51dGlsJztcbmltcG9ydCB7IExlYWZsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb3JlL2xlYWZsZXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IExlYWZsZXREaXJlY3RpdmVXcmFwcGVyIH0gZnJvbSAnLi4vLi4vY29yZS9sZWFmbGV0LmRpcmVjdGl2ZS53cmFwcGVyJztcbmltcG9ydCB7IExlYWZsZXRDb250cm9sTGF5ZXJzV3JhcHBlciB9IGZyb20gJy4uL2NvbnRyb2wvbGVhZmxldC1jb250cm9sLWxheWVycy53cmFwcGVyJztcblxuXG4vKipcbiAqIEJhc2VsYXllcnMgZGlyZWN0aXZlXG4gKlxuICogVGhpcyBkaXJlY3RpdmUgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW50IHdheSB0byBhZGQgYmFzZWxheWVycyB0byB0aGUgbWFwLiBUaGUgaW5wdXQgYWNjZXB0c1xuICogYSBrZXktdmFsdWUgbWFwIG9mIGxheWVyIG5hbWUgLT4gbGF5ZXIuIE11dGFibGUgY2hhbmdlZCBhcmUgZGV0ZWN0ZWQuIE9uIGNoYW5nZXMsIGEgZGlmZmVyIGlzXG4gKiB1c2VkIHRvIGRldGVybWluZSB3aGF0IGNoYW5nZWQgc28gdGhhdCBsYXllcnMgYXJlIGFwcHJvcHJpYXRlbHkgYWRkZWQgb3IgcmVtb3ZlZC4gVGhpcyBkaXJlY3RpdmVcbiAqIHdpbGwgYWxzbyBhZGQgdGhlIGxheWVycyBjb250cm9sIHNvIHVzZXJzIGNhbiBzd2l0Y2ggYmV0d2VlbiBhdmFpbGFibGUgYmFzZSBsYXllcnMuXG4gKlxuICogVG8gc3BlY2lmeSB3aGljaCBsYXllciB0byBzaG93IGFzIHRoZSAnYWN0aXZlJyBiYXNlbGF5ZXIsIHlvdSB3aWxsIHdhbnQgdG8gYWRkIGl0IHRvIHRoZSBtYXBcbiAqIHVzaW5nIHRoZSBsYXllcnMgZGlyZWN0aXZlLiBPdGhlcndpc2UsIHRoZSBwbHVnaW4gd2lsbCB1c2UgdGhlIGxhc3Qgb25lIGl0IHNlZXMuXG4gKi9cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1tsZWFmbGV0QmFzZUxheWVyc10nXG59KVxuZXhwb3J0IGNsYXNzIExlYWZsZXRCYXNlTGF5ZXJzRGlyZWN0aXZlXG5cdGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95LCBPbkluaXQge1xuXG5cdC8vIEJhc2UgTGF5ZXJzXG5cdGJhc2VMYXllcnNWYWx1ZTogeyBbbmFtZTogc3RyaW5nXTogTGF5ZXIgfTtcblxuXHQvLyBCYXNlIExheWVycyBNYXAgRGlmZmVyXG5cdGJhc2VMYXllcnNEaWZmZXI6IEtleVZhbHVlRGlmZmVyPHN0cmluZywgTGF5ZXI+O1xuXG5cdC8vIFNldC9nZXQgYmFzZUxheWVyc1xuXHRASW5wdXQoJ2xlYWZsZXRCYXNlTGF5ZXJzJylcblx0c2V0IGJhc2VMYXllcnModjogeyBbbmFtZTogc3RyaW5nXTogTGF5ZXIgfSkge1xuXHRcdHRoaXMuYmFzZUxheWVyc1ZhbHVlID0gdjtcblxuXHRcdHRoaXMudXBkYXRlQmFzZUxheWVycygpO1xuXHR9XG5cdGdldCBiYXNlTGF5ZXJzKCk6IHsgW25hbWU6IHN0cmluZ106IExheWVyIH0ge1xuXHRcdHJldHVybiB0aGlzLmJhc2VMYXllcnNWYWx1ZTtcblx0fVxuXG5cdC8vIENvbnRyb2wgT3B0aW9uc1xuXHRASW5wdXQoJ2xlYWZsZXRMYXllcnNDb250cm9sT3B0aW9ucycpIGxheWVyc0NvbnRyb2xPcHRpb25zOiBDb250cm9sLkxheWVyc09wdGlvbnM7XG5cblx0Ly8gT3V0cHV0IGZvciBvbmNlIHRoZSBsYXllcnMgY29udHJvbCBpcyByZWFkeVxuXHRAT3V0cHV0KCdsZWFmbGV0TGF5ZXJzQ29udHJvbFJlYWR5JykgbGF5ZXJzQ29udHJvbFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxDb250cm9sLkxheWVycz4oKTtcblxuXHQvLyBBY3RpdmUgQmFzZSBMYXllclxuXHRwcml2YXRlIGJhc2VMYXllcjogTGF5ZXI7XG5cblx0cHJpdmF0ZSBsZWFmbGV0RGlyZWN0aXZlOiBMZWFmbGV0RGlyZWN0aXZlV3JhcHBlcjtcblx0cHJpdmF0ZSBjb250cm9sTGF5ZXJzOiBMZWFmbGV0Q29udHJvbExheWVyc1dyYXBwZXI7XG5cblx0Y29uc3RydWN0b3IobGVhZmxldERpcmVjdGl2ZTogTGVhZmxldERpcmVjdGl2ZSwgcHJpdmF0ZSBkaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsIHByaXZhdGUgem9uZTogTmdab25lKSB7XG5cdFx0dGhpcy5sZWFmbGV0RGlyZWN0aXZlID0gbmV3IExlYWZsZXREaXJlY3RpdmVXcmFwcGVyKGxlYWZsZXREaXJlY3RpdmUpO1xuXHRcdHRoaXMuY29udHJvbExheWVycyA9IG5ldyBMZWFmbGV0Q29udHJvbExheWVyc1dyYXBwZXIodGhpcy56b25lLCB0aGlzLmxheWVyc0NvbnRyb2xSZWFkeSk7XG5cdFx0dGhpcy5iYXNlTGF5ZXJzRGlmZmVyID0gdGhpcy5kaWZmZXJzLmZpbmQoe30pLmNyZWF0ZTxzdHJpbmcsIExheWVyPigpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5iYXNlTGF5ZXJzID0ge307XG5cdFx0aWYgKG51bGwgIT0gdGhpcy5jb250cm9sTGF5ZXJzLmdldExheWVyc0NvbnRyb2woKSkge1xuXHRcdFx0dGhpcy5jb250cm9sTGF5ZXJzLmdldExheWVyc0NvbnRyb2woKS5yZW1vdmUoKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblxuXHRcdC8vIEluaXQgdGhlIG1hcFxuXHRcdHRoaXMubGVhZmxldERpcmVjdGl2ZS5pbml0KCk7XG5cblx0XHQvLyBDcmVhdGUgdGhlIGNvbnRyb2wgb3V0c2lkZSBhbmd1bGFyIHRvIHByZXZlbnQgZXZlbnRzIGZyb20gdHJpZ2dlcmluZyBjaG5hZ2UgZGV0ZWN0aW9uXG5cdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblxuXHRcdFx0Ly8gSW5pdGlhbGx5IGNvbmZpZ3VyZSB0aGUgY29udHJvbExheWVyc1xuXHRcdFx0dGhpcy5jb250cm9sTGF5ZXJzXG5cdFx0XHRcdC5pbml0KHt9LCB0aGlzLmxheWVyc0NvbnRyb2xPcHRpb25zKVxuXHRcdFx0XHQuYWRkVG8odGhpcy5sZWFmbGV0RGlyZWN0aXZlLmdldE1hcCgpKTtcblxuXHRcdH0pO1xuXG5cdFx0dGhpcy51cGRhdGVCYXNlTGF5ZXJzKCk7XG5cblx0fVxuXG5cdG5nRG9DaGVjaygpIHtcblx0XHR0aGlzLnVwZGF0ZUJhc2VMYXllcnMoKTtcblx0fVxuXG5cdHByb3RlY3RlZCB1cGRhdGVCYXNlTGF5ZXJzKCkge1xuXG5cdFx0Y29uc3QgbWFwID0gdGhpcy5sZWFmbGV0RGlyZWN0aXZlLmdldE1hcCgpO1xuXHRcdGNvbnN0IGxheWVyc0NvbnRyb2wgPSB0aGlzLmNvbnRyb2xMYXllcnMuZ2V0TGF5ZXJzQ29udHJvbCgpO1xuXG5cdFx0aWYgKG51bGwgIT0gbWFwICYmIG51bGwgIT0gbGF5ZXJzQ29udHJvbCAmJiBudWxsICE9IHRoaXMuYmFzZUxheWVyc0RpZmZlcikge1xuXHRcdFx0Y29uc3QgY2hhbmdlcyA9IHRoaXMuYmFzZUxheWVyc0RpZmZlci5kaWZmKHRoaXMuYmFzZUxheWVyc1ZhbHVlKTtcblx0XHRcdGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNvbnRyb2xMYXllcnMuYXBwbHlCYXNlTGF5ZXJDaGFuZ2VzKGNoYW5nZXMpO1xuXG5cdFx0XHRpZiAocmVzdWx0cy5jaGFuZ2VkKCkpIHtcblx0XHRcdFx0dGhpcy5zeW5jQmFzZUxheWVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgdGhlIGN1cnJlbnQgYmFzZSBsYXllciBhbmQgY2hhbmdlIGl0IHRvIHRoZSBuZXcgb25lIGlmIG5lY2Vzc2FyeVxuXHQgKi9cblx0cHJvdGVjdGVkIHN5bmNCYXNlTGF5ZXIoKSB7XG5cblx0XHRjb25zdCBtYXAgPSB0aGlzLmxlYWZsZXREaXJlY3RpdmUuZ2V0TWFwKCk7XG5cdFx0Y29uc3QgbGF5ZXJzID0gTGVhZmxldFV0aWwubWFwVG9BcnJheSh0aGlzLmJhc2VMYXllcnMpO1xuXHRcdGxldCBmb3VuZExheWVyOiBMYXllcjtcblxuXHRcdC8vIFNlYXJjaCBhbGwgdGhlIGxheWVycyBpbiB0aGUgbWFwIHRvIHNlZSBpZiB3ZSBjYW4gZmluZCB0aGVtIGluIHRoZSBiYXNlbGF5ZXIgYXJyYXlcblx0XHRtYXAuZWFjaExheWVyKChsOiBMYXllcikgPT4ge1xuXHRcdFx0Zm91bmRMYXllciA9IGxheWVycy5maW5kKChibCkgPT4gKGwgPT09IGJsKSk7XG5cdFx0fSk7XG5cblx0XHQvLyBEaWQgd2UgZmluZCB0aGUgbGF5ZXI/XG5cdFx0aWYgKG51bGwgIT0gZm91bmRMYXllcikge1xuXHRcdFx0Ly8gWWVzIC0gc2V0IHRoZSBiYXNlbGF5ZXIgdG8gdGhlIG9uZSB3ZSBmb3VuZFxuXHRcdFx0dGhpcy5iYXNlTGF5ZXIgPSBmb3VuZExheWVyO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdC8vIE5vIC0gc2V0IHRoZSBiYXNlbGF5ZXIgdG8gdGhlIGZpcnN0IGluIHRoZSBhcnJheSBhbmQgYWRkIGl0IHRvIHRoZSBtYXBcblx0XHRcdGlmIChsYXllcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzLmJhc2VMYXllciA9IGxheWVyc1swXTtcblxuXHRcdFx0XHQvLyBBZGQgbGF5ZXJzIG91dHNpZGUgb2YgYW5ndWxhciB0byBwcmV2ZW50IGV2ZW50cyBmcm9tIHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvblxuXHRcdFx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmFzZUxheWVyLmFkZFRvKG1hcCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHR9XG59XG4iXX0=
@@ -1,11 +0,0 @@
1
- export class LeafletControlLayersChanges {
2
- constructor() {
3
- this.layersRemoved = 0;
4
- this.layersChanged = 0;
5
- this.layersAdded = 0;
6
- }
7
- changed() {
8
- return !(this.layersRemoved === 0 && this.layersChanged === 0 && this.layersAdded === 0);
9
- }
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1jb250cm9sLWxheWVycy1jaGFuZ2VzLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxlYWZsZXQvc3JjL2xpYi9sYXllcnMvY29udHJvbC9sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWNoYW5nZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLDJCQUEyQjtJQUF4QztRQUNDLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO0lBS3pCLENBQUM7SUFIQSxPQUFPO1FBQ04sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgTGVhZmxldENvbnRyb2xMYXllcnNDaGFuZ2VzIHtcblx0bGF5ZXJzUmVtb3ZlZDogbnVtYmVyID0gMDtcblx0bGF5ZXJzQ2hhbmdlZDogbnVtYmVyID0gMDtcblx0bGF5ZXJzQWRkZWQ6IG51bWJlciA9IDA7XG5cblx0Y2hhbmdlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISh0aGlzLmxheWVyc1JlbW92ZWQgPT09IDAgJiYgdGhpcy5sYXllcnNDaGFuZ2VkID09PSAwICYmIHRoaXMubGF5ZXJzQWRkZWQgPT09IDApO1xuXHR9XG59XG4iXX0=
@@ -1,7 +0,0 @@
1
- export class LeafletControlLayersConfig {
2
- constructor() {
3
- this.baseLayers = {};
4
- this.overlays = {};
5
- }
6
- }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1jb250cm9sLWxheWVycy1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGVhZmxldC9zcmMvbGliL2xheWVycy9jb250cm9sL2xlYWZsZXQtY29udHJvbC1sYXllcnMtY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTywwQkFBMEI7SUFBdkM7UUFDQyxlQUFVLEdBQThCLEVBQUUsQ0FBQztRQUMzQyxhQUFRLEdBQThCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXllciB9IGZyb20gJ2xlYWZsZXQnO1xuXG5leHBvcnQgY2xhc3MgTGVhZmxldENvbnRyb2xMYXllcnNDb25maWcge1xuXHRiYXNlTGF5ZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBMYXllciB9ID0ge307XG5cdG92ZXJsYXlzOiB7IFtuYW1lOiBzdHJpbmddOiBMYXllciB9ID0ge307XG59XG4iXX0=