@bluehalo/ngx-leaflet 18.0.2

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 (34) hide show
  1. package/CHANGES.md +89 -0
  2. package/LICENSE +22 -0
  3. package/README.md +728 -0
  4. package/esm2022/bluehalo-ngx-leaflet.mjs +5 -0
  5. package/esm2022/lib/core/leaflet.directive.mjs +330 -0
  6. package/esm2022/lib/core/leaflet.directive.wrapper.mjs +12 -0
  7. package/esm2022/lib/core/leaflet.util.mjs +20 -0
  8. package/esm2022/lib/layers/base/leaflet-baselayers.directive.mjs +113 -0
  9. package/esm2022/lib/layers/control/leaflet-control-layers-changes.model.mjs +11 -0
  10. package/esm2022/lib/layers/control/leaflet-control-layers-config.model.mjs +7 -0
  11. package/esm2022/lib/layers/control/leaflet-control-layers.directive.mjs +100 -0
  12. package/esm2022/lib/layers/control/leaflet-control-layers.wrapper.mjs +58 -0
  13. package/esm2022/lib/layers/leaflet-layer.directive.mjs +78 -0
  14. package/esm2022/lib/layers/leaflet-layers.directive.mjs +83 -0
  15. package/esm2022/lib/layers/leaflet-tile-layer-definition.model.mjs +53 -0
  16. package/esm2022/lib/leaflet.module.mjs +40 -0
  17. package/esm2022/public-api.mjs +13 -0
  18. package/fesm2022/bluehalo-ngx-leaflet.mjs +880 -0
  19. package/fesm2022/bluehalo-ngx-leaflet.mjs.map +1 -0
  20. package/index.d.ts +5 -0
  21. package/lib/core/leaflet.directive.d.ts +94 -0
  22. package/lib/core/leaflet.directive.wrapper.d.ts +8 -0
  23. package/lib/core/leaflet.util.d.ts +7 -0
  24. package/lib/layers/base/leaflet-baselayers.directive.d.ts +45 -0
  25. package/lib/layers/control/leaflet-control-layers-changes.model.d.ts +6 -0
  26. package/lib/layers/control/leaflet-control-layers-config.model.d.ts +9 -0
  27. package/lib/layers/control/leaflet-control-layers.directive.d.ts +35 -0
  28. package/lib/layers/control/leaflet-control-layers.wrapper.d.ts +14 -0
  29. package/lib/layers/leaflet-layer.directive.d.ts +30 -0
  30. package/lib/layers/leaflet-layers.directive.d.ts +41 -0
  31. package/lib/layers/leaflet-tile-layer-definition.model.d.ts +33 -0
  32. package/lib/leaflet.module.d.ts +11 -0
  33. package/package.json +34 -0
  34. package/public-api.d.ts +12 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1ZWhhbG8tbmd4LWxlYWZsZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGVhZmxldC9zcmMvYmx1ZWhhbG8tbmd4LWxlYWZsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,330 @@
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=
@@ -0,0 +1,12 @@
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=
@@ -0,0 +1,20 @@
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
@@ -0,0 +1,113 @@
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=
@@ -0,0 +1,11 @@
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=
@@ -0,0 +1,7 @@
1
+ export class LeafletControlLayersConfig {
2
+ constructor() {
3
+ this.baseLayers = {};
4
+ this.overlays = {};
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1jb250cm9sLWxheWVycy1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGVhZmxldC9zcmMvbGliL2xheWVycy9jb250cm9sL2xlYWZsZXQtY29udHJvbC1sYXllcnMtY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTywwQkFBMEI7SUFBdkM7UUFDQyxlQUFVLEdBQThCLEVBQUUsQ0FBQztRQUMzQyxhQUFRLEdBQThCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXllciB9IGZyb20gJ2xlYWZsZXQnO1xuXG5leHBvcnQgY2xhc3MgTGVhZmxldENvbnRyb2xMYXllcnNDb25maWcge1xuXHRiYXNlTGF5ZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBMYXllciB9ID0ge307XG5cdG92ZXJsYXlzOiB7IFtuYW1lOiBzdHJpbmddOiBMYXllciB9ID0ge307XG59XG4iXX0=