@kepler.gl/reducers 3.3.0-alpha.1 → 3.3.0-alpha.11

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 (86) hide show
  1. package/dist/cjs/combined-updaters.js +491 -0
  2. package/dist/cjs/composer-helpers.js +101 -0
  3. package/dist/cjs/composers.js +22 -0
  4. package/dist/cjs/core.js +105 -0
  5. package/dist/cjs/data-utils.js +53 -0
  6. package/dist/cjs/export-utils.js +91 -0
  7. package/dist/{index.js → cjs/index.js} +2 -3
  8. package/dist/cjs/interaction-utils.js +115 -0
  9. package/dist/cjs/layer-utils.js +635 -0
  10. package/dist/cjs/map-state-updaters.js +658 -0
  11. package/dist/cjs/map-state.js +35 -0
  12. package/dist/cjs/map-style-updaters.js +659 -0
  13. package/dist/cjs/map-style.js +33 -0
  14. package/dist/cjs/merger-handler.js +105 -0
  15. package/dist/cjs/middleware.js +25 -0
  16. package/dist/cjs/provider-state-updaters.js +464 -0
  17. package/dist/cjs/provider-state.js +34 -0
  18. package/dist/cjs/root.js +207 -0
  19. package/dist/cjs/ui-state-updaters.js +922 -0
  20. package/dist/cjs/ui-state.js +36 -0
  21. package/dist/cjs/vis-state-merger.js +1215 -0
  22. package/dist/cjs/vis-state-selectors.js +48 -0
  23. package/dist/cjs/vis-state-updaters.js +5150 -0
  24. package/dist/cjs/vis-state.js +35 -0
  25. package/dist/combined-updaters.d.ts +19 -2
  26. package/dist/composers.d.ts +2 -0
  27. package/dist/esm/combined-updaters.js +484 -0
  28. package/dist/esm/composer-helpers.js +85 -0
  29. package/dist/esm/composers.js +14 -0
  30. package/dist/esm/core.js +101 -0
  31. package/dist/esm/data-utils.js +47 -0
  32. package/dist/esm/export-utils.js +86 -0
  33. package/dist/esm/index.js +62 -0
  34. package/dist/esm/interaction-utils.js +106 -0
  35. package/dist/esm/layer-utils.js +602 -0
  36. package/dist/esm/map-state-updaters.js +650 -0
  37. package/dist/esm/map-state.js +29 -0
  38. package/dist/esm/map-style-updaters.js +652 -0
  39. package/dist/esm/map-style.js +27 -0
  40. package/dist/esm/merger-handler.js +96 -0
  41. package/dist/esm/middleware.js +17 -0
  42. package/dist/esm/provider-state-updaters.js +458 -0
  43. package/dist/esm/provider-state.js +28 -0
  44. package/dist/esm/root.js +201 -0
  45. package/dist/esm/ui-state-updaters.js +917 -0
  46. package/dist/esm/ui-state.js +30 -0
  47. package/dist/esm/vis-state-merger.js +1182 -0
  48. package/dist/esm/vis-state-selectors.js +42 -0
  49. package/dist/esm/vis-state-updaters.js +5057 -0
  50. package/dist/esm/vis-state.js +29 -0
  51. package/dist/interaction-utils.d.ts +1 -1
  52. package/dist/layer-utils.d.ts +23 -5
  53. package/dist/map-state-updaters.d.ts +26 -21
  54. package/dist/map-state.d.ts +2 -78
  55. package/dist/map-style-updaters.d.ts +1 -3
  56. package/dist/middleware.d.ts +2 -2
  57. package/dist/root.d.ts +1 -1
  58. package/dist/ui-state-updaters.d.ts +17 -2
  59. package/dist/vis-state-merger.d.ts +7 -0
  60. package/dist/vis-state-selectors.d.ts +88 -5
  61. package/dist/vis-state-updaters.d.ts +127 -4
  62. package/dist/vis-state.d.ts +8 -4
  63. package/package.json +37 -32
  64. package/dist/combined-updaters.js +0 -363
  65. package/dist/composer-helpers.js +0 -101
  66. package/dist/composers.js +0 -23
  67. package/dist/core.js +0 -105
  68. package/dist/data-utils.js +0 -53
  69. package/dist/export-utils.js +0 -91
  70. package/dist/interaction-utils.js +0 -105
  71. package/dist/layer-utils.js +0 -376
  72. package/dist/map-state-updaters.js +0 -438
  73. package/dist/map-state.js +0 -35
  74. package/dist/map-style-updaters.js +0 -661
  75. package/dist/map-style.js +0 -34
  76. package/dist/merger-handler.js +0 -105
  77. package/dist/middleware.js +0 -27
  78. package/dist/provider-state-updaters.js +0 -466
  79. package/dist/provider-state.js +0 -35
  80. package/dist/root.js +0 -207
  81. package/dist/ui-state-updaters.js +0 -887
  82. package/dist/ui-state.js +0 -37
  83. package/dist/vis-state-merger.js +0 -1032
  84. package/dist/vis-state-selectors.js +0 -30
  85. package/dist/vis-state-updaters.js +0 -3859
  86. package/dist/vis-state.js +0 -36
@@ -1,438 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.fitBoundsUpdater = exports.INITIAL_MAP_STATE = void 0;
8
- exports.getMapDimForSplitMap = getMapDimForSplitMap;
9
- exports.pickViewportPropsFromMapState = pickViewportPropsFromMapState;
10
- exports.updateMapUpdater = exports.toggleSplitMapViewportUpdater = exports.toggleSplitMapUpdater = exports.togglePerspectiveUpdater = exports.resetMapConfigUpdater = exports.receiveMapConfigUpdater = void 0;
11
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
- var _geoViewport = _interopRequireDefault(require("@mapbox/geo-viewport"));
14
- var _booleanWithin = _interopRequireDefault(require("@turf/boolean-within"));
15
- var _bboxPolygon = _interopRequireDefault(require("@turf/bbox-polygon"));
16
- var _webMercator = require("@math.gl/web-mercator");
17
- var _deepmerge = _interopRequireDefault(require("deepmerge"));
18
- var _pick = _interopRequireDefault(require("lodash/pick"));
19
- var _utils = require("@kepler.gl/utils");
20
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
22
- // Copyright contributors to the kepler.gl project
23
- /**
24
- * Updaters for `mapState` reducer. Can be used in your root reducer to directly modify kepler.gl's state.
25
- * Read more about [Using updaters](../advanced-usage/using-updaters.md)
26
- * @public
27
- * @example
28
- *
29
- * import keplerGlReducer, {mapStateUpdaters} from '@kepler.gl/reducers';
30
- * // Root Reducer
31
- * const reducers = combineReducers({
32
- * keplerGl: keplerGlReducer,
33
- * app: appReducer
34
- * });
35
- *
36
- * const composedReducer = (state, action) => {
37
- * switch (action.type) {
38
- * // click button to close side panel
39
- * case 'CLICK_BUTTON':
40
- * return {
41
- * ...state,
42
- * keplerGl: {
43
- * ...state.keplerGl,
44
- * foo: {
45
- * ...state.keplerGl.foo,
46
- * mapState: mapStateUpdaters.fitBoundsUpdater(
47
- * mapState, {payload: [127.34, 31.09, 127.56, 31.59]]}
48
- * )
49
- * }
50
- * }
51
- * };
52
- * }
53
- * return reducers(state, action);
54
- * };
55
- *
56
- * export default composedReducer;
57
- */
58
-
59
- /* eslint-disable @typescript-eslint/no-unused-vars */
60
- // @ts-ignore
61
- var mapStateUpdaters = null;
62
- /* eslint-enable @typescript-eslint/no-unused-vars */
63
- /**
64
- * Default initial `mapState`
65
- * @memberof mapStateUpdaters
66
- * @constant
67
- * @property pitch Default: `0`
68
- * @property bearing Default: `0`
69
- * @property latitude Default: `37.75043`
70
- * @property longitude Default: `-122.34679`
71
- * @property zoom Default: `9`
72
- * @property dragRotate Default: `false`
73
- * @property width Default: `800`
74
- * @property height Default: `800`
75
- * @property minZoom: `undefined`,
76
- * @property maxZoom: `undefined`,
77
- * @property maxPitch: `undefined` (defaults to application config value, deck.gl default is 60)
78
- * @property maxBounds: `undefined`,
79
- * @property isSplit: `false`,
80
- * @property isViewportSynced: `true`,
81
- * @property isZoomLocked: `false`,
82
- * @property splitMapViewports: `[]`
83
- * @public
84
- */
85
- var INITIAL_MAP_STATE = exports.INITIAL_MAP_STATE = {
86
- pitch: 0,
87
- bearing: 0,
88
- latitude: 37.75043,
89
- longitude: -122.34679,
90
- zoom: 9,
91
- dragRotate: false,
92
- width: 800,
93
- height: 800,
94
- minZoom: undefined,
95
- maxZoom: undefined,
96
- maxPitch: undefined,
97
- maxBounds: undefined,
98
- isSplit: false,
99
- isViewportSynced: true,
100
- isZoomLocked: false,
101
- splitMapViewports: []
102
- };
103
-
104
- /* Updaters */
105
- /**
106
- * Update map viewport
107
- * @memberof mapStateUpdaters
108
- * @public
109
- */
110
- var updateMapUpdater = exports.updateMapUpdater = function updateMapUpdater(state, action) {
111
- var _action$payload = action.payload,
112
- inputViewport = _action$payload.viewport,
113
- _action$payload$mapIn = _action$payload.mapIndex,
114
- mapIndex = _action$payload$mapIn === void 0 ? 0 : _action$payload$mapIn;
115
- var viewport = (0, _utils.validateViewPort)(inputViewport);
116
- if (state.isViewportSynced) {
117
- // The `updateViewport` function is typed as (Viewport, Viewport) -> Viewport but here the
118
- // expected typing is (MapState, Viewport) -> MapState.
119
- // this could be a potential bug as we treat Viewport and MapState as equal seemingly
120
- // @ts-expect-error Type 'Viewport' is missing the following properties from type 'MapState': isSplit, isViewportSynced, isZoomLocked, splitMapViewports
121
- return updateViewport(state, viewport);
122
- }
123
- var otherViewportMapIndex = -1;
124
- var splitMapViewports = state.splitMapViewports.map(function (currentViewport, i) {
125
- if (i === mapIndex) {
126
- // update the matching viewport with the newViewport info in the action payload
127
- return updateViewport(currentViewport, viewport);
128
- }
129
- otherViewportMapIndex = i;
130
- // make no changes to the other viewport (yet)
131
- return currentViewport;
132
- });
133
-
134
- // make conditional updates to the other viewport not matching this payload's `mapIndex`
135
- if (Number.isFinite(otherViewportMapIndex) && otherViewportMapIndex > -1) {
136
- // width and height are a special case and are always updated
137
- splitMapViewports[otherViewportMapIndex] = _objectSpread(_objectSpread({}, splitMapViewports[otherViewportMapIndex]), {}, {
138
- width: splitMapViewports[mapIndex].width,
139
- height: splitMapViewports[mapIndex].height
140
- });
141
- if (state.isZoomLocked) {
142
- // update the other viewport with the new zoom from the split viewport that was updated with this payload's `mapIndex`
143
- splitMapViewports[otherViewportMapIndex] = _objectSpread(_objectSpread({}, splitMapViewports[otherViewportMapIndex]), {}, {
144
- zoom: splitMapViewports[mapIndex].zoom
145
- });
146
- }
147
- }
148
- return _objectSpread(_objectSpread(_objectSpread({}, state), splitMapViewports[mapIndex]), {}, {
149
- // update the mapState with the new array of split viewports
150
- splitMapViewports: splitMapViewports
151
- });
152
- };
153
-
154
- /**
155
- * Fit map viewport to bounds
156
- * @memberof mapStateUpdaters
157
- * @public
158
- */
159
- var fitBoundsUpdater = exports.fitBoundsUpdater = function fitBoundsUpdater(state, action) {
160
- var centerAndZoom = (0, _utils.getCenterAndZoomFromBounds)(action.payload, {
161
- width: state.width,
162
- height: state.height
163
- });
164
- if (!centerAndZoom) {
165
- // bounds is invalid
166
- return state;
167
- }
168
- var newState = _objectSpread(_objectSpread({}, state), {}, {
169
- latitude: centerAndZoom.center[1],
170
- longitude: centerAndZoom.center[0]
171
- }, Number.isFinite(centerAndZoom.zoom) ? {
172
- zoom: centerAndZoom.zoom
173
- } : {});
174
-
175
- // if fitting to bounds while split and unsynced
176
- // copy the new latitude, longitude, and zoom values to each split viewport
177
- if (newState.splitMapViewports.length) {
178
- newState.splitMapViewports = newState.splitMapViewports.map(function (currentViewport) {
179
- return _objectSpread(_objectSpread({}, currentViewport), {}, {
180
- latitude: newState.latitude,
181
- longitude: newState.longitude,
182
- zoom: newState.zoom
183
- });
184
- });
185
- }
186
- return newState;
187
- };
188
-
189
- /**
190
- * Toggle between 3d and 2d map.
191
- * @memberof mapStateUpdaters
192
- * @public
193
- */
194
- var togglePerspectiveUpdater = exports.togglePerspectiveUpdater = function togglePerspectiveUpdater(state) {
195
- var newState = _objectSpread(_objectSpread(_objectSpread({}, state), {
196
- pitch: state.dragRotate ? 0 : 50,
197
- bearing: state.dragRotate ? 0 : 24
198
- }), {}, {
199
- dragRotate: !state.dragRotate
200
- });
201
-
202
- // if toggling 3d and 2d while split and unsynced
203
- // copy the new pitch, bearing, and dragRotate values to each split viewport
204
- if (newState.splitMapViewports.length) {
205
- newState.splitMapViewports = newState.splitMapViewports.map(function (currentViewport) {
206
- return _objectSpread(_objectSpread({}, currentViewport), {}, {
207
- pitch: newState.pitch,
208
- bearing: newState.bearing,
209
- dragRotate: newState.dragRotate
210
- });
211
- });
212
- }
213
- return newState;
214
- };
215
-
216
- /**
217
- * reset mapState to initial State
218
- * @memberof mapStateUpdaters
219
- * @public
220
- */
221
- var resetMapConfigUpdater = exports.resetMapConfigUpdater = function resetMapConfigUpdater(state) {
222
- return _objectSpread(_objectSpread(_objectSpread({}, INITIAL_MAP_STATE), state.initialState), {}, {
223
- initialState: state.initialState
224
- });
225
- };
226
-
227
- // consider case where you have a split map and user wants to reset
228
- /**
229
- * Update `mapState` to propagate a new config
230
- * @memberof mapStateUpdaters
231
- * @public
232
- */
233
- var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref) {
234
- var _ref$payload = _ref.payload,
235
- _ref$payload$config = _ref$payload.config,
236
- config = _ref$payload$config === void 0 ? {} : _ref$payload$config,
237
- _ref$payload$options = _ref$payload.options,
238
- options = _ref$payload$options === void 0 ? {} : _ref$payload$options,
239
- _ref$payload$bounds = _ref$payload.bounds,
240
- bounds = _ref$payload$bounds === void 0 ? null : _ref$payload$bounds;
241
- /**
242
- * @type {Partial<MapState>}
243
- */
244
- var mapState = (config || {}).mapState || {};
245
- // merged received mapState with previous state
246
- // state also may include properties that are new to an existing, saved project's mapState
247
-
248
- var mergedState = (0, _deepmerge["default"])(state, mapState, {
249
- // note: deepmerge by default will merge arrays by concatenating them
250
- // but we need to overwrite destination arrays with source arrays, if present
251
- // https://github.com/TehShrike/deepmerge#arraymerge-example-overwrite-target-array
252
- arrayMerge: function arrayMerge(_destinationArray, sourceArray) {
253
- return sourceArray;
254
- }
255
- });
256
-
257
- // if center map
258
- // center map will override mapState config
259
- if (options.centerMap && bounds) {
260
- mergedState = fitBoundsUpdater(mergedState, {
261
- payload: bounds
262
- });
263
- }
264
-
265
- // make sure we validate map state before we merge
266
- mergedState = (0, _utils.validateViewPort)(mergedState);
267
- return _objectSpread(_objectSpread({}, mergedState), getMapDimForSplitMap(mergedState.isSplit, state));
268
- };
269
-
270
- /**
271
- * Toggle between one or split maps
272
- * @memberof mapStateUpdaters
273
- * @public
274
- */
275
- var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplitMapUpdater(state) {
276
- return _objectSpread(_objectSpread(_objectSpread({}, state), getMapDimForSplitMap(!state.isSplit, state)), {}, {
277
- isSplit: !state.isSplit
278
- }, !state.isSplit === false ? {
279
- // if toggling to no longer split (single mode) then reset a few properties
280
- isViewportSynced: true,
281
- isZoomLocked: false,
282
- splitMapViewports: []
283
- } : {});
284
- };
285
-
286
- /**
287
- * Toggle between locked and unlocked split viewports
288
- * @memberof mapStateUpdaters
289
- * @public
290
- */
291
- var toggleSplitMapViewportUpdater = exports.toggleSplitMapViewportUpdater = function toggleSplitMapViewportUpdater(state, action) {
292
- // new map state immediately gets the new, optional payload values for isViewportSynced and/or isZoomLocked
293
- var newMapState = _objectSpread(_objectSpread({}, state), action.payload || {});
294
- if (newMapState.isViewportSynced) {
295
- // switching from unsynced to synced viewports
296
- newMapState.splitMapViewports = [];
297
- } else {
298
- // switching from synced to unsynced viewports
299
- // or already in unsynced mode and toggling locked zoom
300
-
301
- if (state.isZoomLocked && !newMapState.isZoomLocked) {
302
- // switching off locked zoom while unsynced
303
- // don't copy the mapStates to left and right viewports because there will be zoom "jumping"
304
- return newMapState;
305
- }
306
- if (!state.isZoomLocked && newMapState.isZoomLocked) {
307
- // switching on locked zoom while unsynced
308
- // only copy zoom viewport property from the most recently interacted-with viewport to the other
309
- // TODO: do we want to check for a match a different way, such as a combo of `latitude` and `longitude`?
310
- var lastUpdatedViewportIndex = newMapState.splitMapViewports.findIndex(function (v) {
311
- return newMapState.zoom === v.zoom;
312
- });
313
- var splitMapViewports = newMapState.splitMapViewports.map(function (currentViewport, i) {
314
- if (i === lastUpdatedViewportIndex) {
315
- // no zoom to modify here
316
- return currentViewport;
317
- }
318
- // the other viewport gets the most recently interacted-with viewport's zoom
319
- // WHY? the viewport the user was last interacting with will set zoom across the board for smooth UX
320
- return _objectSpread(_objectSpread({}, currentViewport), {}, {
321
- zoom: newMapState.splitMapViewports[lastUpdatedViewportIndex].zoom
322
- });
323
- });
324
- newMapState.splitMapViewports = splitMapViewports;
325
- return newMapState;
326
- }
327
-
328
- // if current viewport is synced, and we are unsyncing it
329
- // or already in unsynced mode and NOT toggling locked zoom
330
- // make a fresh copy of the current viewport object, assign it to splitMapViewports[]
331
- // pickViewportPropsFromMapState is called twice to avoid memory allocation conflicts
332
- var leftViewport = pickViewportPropsFromMapState(newMapState);
333
- var rightViewport = pickViewportPropsFromMapState(newMapState);
334
- newMapState.splitMapViewports = [leftViewport, rightViewport];
335
- }
336
-
337
- // return new state
338
- return newMapState;
339
- };
340
-
341
- // Helpers
342
- function getMapDimForSplitMap(isSplit, state) {
343
- // cases:
344
- // 1. state split: true - isSplit: true
345
- // do nothing
346
- // 2. state split: false - isSplit: false
347
- // do nothing
348
- if (state.isSplit === isSplit) {
349
- return {};
350
- }
351
- var width = state.isSplit && !isSplit ?
352
- // 3. state split: true - isSplit: false
353
- // double width
354
- state.width * 2 :
355
- // 4. state split: false - isSplit: true
356
- // split width
357
- state.width / 2;
358
- return {
359
- width: width
360
- };
361
- }
362
- function updateViewportBasedOnBounds(state, newMapState) {
363
- // Get the new viewport bounds
364
- var viewportBounds = _geoViewport["default"].bounds([newMapState.longitude, newMapState.latitude], newMapState.zoom, [newMapState.width, newMapState.height], _utils.MAPBOX_TILE_SIZE);
365
- // Generate turf Polygon from bounds for comparison
366
- var viewportBoundsPolygon = (0, _bboxPolygon["default"])(viewportBounds);
367
- // @ts-ignore
368
- var newStateMaxBounds = newMapState.maxBounds;
369
- // @ts-ignore
370
- var maxBoundsPolygon = (0, _bboxPolygon["default"])(newStateMaxBounds);
371
-
372
- // If maxBounds has changed reset the viewport to snap to bounds
373
- var hasMaxBoundsChanged = !state.maxBounds || !state.maxBounds.every(function (val, idx) {
374
- return val === newStateMaxBounds[idx];
375
- });
376
- if (hasMaxBoundsChanged) {
377
- // Check if the newMapState viewport is within maxBounds
378
- if (!(0, _booleanWithin["default"])(viewportBoundsPolygon, maxBoundsPolygon)) {
379
- var _fitBounds = (0, _webMercator.fitBounds)({
380
- width: newMapState.width,
381
- height: newMapState.height,
382
- bounds: [[newStateMaxBounds[0], newStateMaxBounds[1]], [newStateMaxBounds[2], newStateMaxBounds[3]]]
383
- }),
384
- latitude = _fitBounds.latitude,
385
- longitude = _fitBounds.longitude,
386
- zoom = _fitBounds.zoom;
387
- newMapState = _objectSpread(_objectSpread({}, newMapState), {}, {
388
- latitude: latitude,
389
- longitude: longitude
390
- }, Number.isFinite(zoom) ? {
391
- zoom: zoom
392
- } : {});
393
- }
394
- return newMapState;
395
- }
396
-
397
- // Check if the newMapState viewport is within maxBounds
398
- if (!(0, _booleanWithin["default"])(viewportBoundsPolygon, maxBoundsPolygon)) {
399
- newMapState = _objectSpread(_objectSpread({}, newMapState), {}, {
400
- longitude: state.longitude,
401
- latitude: state.latitude,
402
- zoom: state.zoom
403
- });
404
- }
405
- return newMapState;
406
- }
407
- function pickViewportPropsFromMapState(state) {
408
- return (0, _pick["default"])(state, ['width', 'height', 'zoom', 'pitch', 'bearing', 'latitude', 'longitude', 'dragRotate', 'minZoom', 'maxZoom', 'maxPitch', 'maxBounds']);
409
- }
410
-
411
- /** Select items from object whose value is not undefined */
412
- var definedProps = function definedProps(obj) {
413
- return Object.entries(obj).reduce(function (accu, _ref2) {
414
- var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
415
- k = _ref3[0],
416
- v = _ref3[1];
417
- return _objectSpread(_objectSpread({}, accu), v !== undefined ? (0, _defineProperty2["default"])({}, k, v) : {});
418
- }, {});
419
- };
420
- function updateViewport(originalViewport, viewportUpdates) {
421
- var newViewport = _objectSpread(_objectSpread({}, originalViewport), definedProps(viewportUpdates) || {});
422
-
423
- // Make sure zoom level doesn't go bellow minZoom if defined
424
- if (newViewport.minZoom && newViewport.zoom && newViewport.zoom < newViewport.minZoom) {
425
- newViewport.zoom = newViewport.minZoom;
426
- }
427
- // Make sure zoom level doesn't go above maxZoom if defined
428
- if (newViewport.maxZoom && newViewport.zoom && newViewport.zoom > newViewport.maxZoom) {
429
- newViewport.zoom = newViewport.maxZoom;
430
- }
431
- // Limit viewport update based on maxBounds
432
- if (newViewport.maxBounds && (0, _utils.validateBounds)(newViewport.maxBounds)) {
433
- // @ts-expect-error Type 'Viewport' is missing the following properties from type 'MapState': isSplit, isViewportSynced, isZoomLocked, splitMapViewports
434
- newViewport = updateViewportBasedOnBounds(originalViewport, newViewport);
435
- }
436
- return newViewport;
437
- }
438
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2VvVmlld3BvcnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9ib29sZWFuV2l0aGluIiwiX2Jib3hQb2x5Z29uIiwiX3dlYk1lcmNhdG9yIiwiX2RlZXBtZXJnZSIsIl9waWNrIiwiX3V0aWxzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJtYXBTdGF0ZVVwZGF0ZXJzIiwiSU5JVElBTF9NQVBfU1RBVEUiLCJleHBvcnRzIiwicGl0Y2giLCJiZWFyaW5nIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJ6b29tIiwiZHJhZ1JvdGF0ZSIsIndpZHRoIiwiaGVpZ2h0IiwibWluWm9vbSIsInVuZGVmaW5lZCIsIm1heFpvb20iLCJtYXhQaXRjaCIsIm1heEJvdW5kcyIsImlzU3BsaXQiLCJpc1ZpZXdwb3J0U3luY2VkIiwiaXNab29tTG9ja2VkIiwic3BsaXRNYXBWaWV3cG9ydHMiLCJ1cGRhdGVNYXBVcGRhdGVyIiwic3RhdGUiLCJhY3Rpb24iLCJfYWN0aW9uJHBheWxvYWQiLCJwYXlsb2FkIiwiaW5wdXRWaWV3cG9ydCIsInZpZXdwb3J0IiwiX2FjdGlvbiRwYXlsb2FkJG1hcEluIiwibWFwSW5kZXgiLCJ2YWxpZGF0ZVZpZXdQb3J0IiwidXBkYXRlVmlld3BvcnQiLCJvdGhlclZpZXdwb3J0TWFwSW5kZXgiLCJtYXAiLCJjdXJyZW50Vmlld3BvcnQiLCJpIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJmaXRCb3VuZHNVcGRhdGVyIiwiY2VudGVyQW5kWm9vbSIsImdldENlbnRlckFuZFpvb21Gcm9tQm91bmRzIiwibmV3U3RhdGUiLCJjZW50ZXIiLCJ0b2dnbGVQZXJzcGVjdGl2ZVVwZGF0ZXIiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYiLCJfcmVmJHBheWxvYWQiLCJfcmVmJHBheWxvYWQkY29uZmlnIiwiY29uZmlnIiwiX3JlZiRwYXlsb2FkJG9wdGlvbnMiLCJvcHRpb25zIiwiX3JlZiRwYXlsb2FkJGJvdW5kcyIsImJvdW5kcyIsIm1hcFN0YXRlIiwibWVyZ2VkU3RhdGUiLCJkZWVwbWVyZ2UiLCJhcnJheU1lcmdlIiwiX2Rlc3RpbmF0aW9uQXJyYXkiLCJzb3VyY2VBcnJheSIsImNlbnRlck1hcCIsImdldE1hcERpbUZvclNwbGl0TWFwIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidG9nZ2xlU3BsaXRNYXBWaWV3cG9ydFVwZGF0ZXIiLCJuZXdNYXBTdGF0ZSIsImxhc3RVcGRhdGVkVmlld3BvcnRJbmRleCIsImZpbmRJbmRleCIsInYiLCJsZWZ0Vmlld3BvcnQiLCJwaWNrVmlld3BvcnRQcm9wc0Zyb21NYXBTdGF0ZSIsInJpZ2h0Vmlld3BvcnQiLCJ1cGRhdGVWaWV3cG9ydEJhc2VkT25Cb3VuZHMiLCJ2aWV3cG9ydEJvdW5kcyIsImdlb1ZpZXdwb3J0IiwiTUFQQk9YX1RJTEVfU0laRSIsInZpZXdwb3J0Qm91bmRzUG9seWdvbiIsImJib3hQb2x5Z29uIiwibmV3U3RhdGVNYXhCb3VuZHMiLCJtYXhCb3VuZHNQb2x5Z29uIiwiaGFzTWF4Qm91bmRzQ2hhbmdlZCIsImV2ZXJ5IiwidmFsIiwiaWR4IiwiYm9vbGVhbldpdGhpbiIsIl9maXRCb3VuZHMiLCJmaXRCb3VuZHMiLCJwaWNrIiwiZGVmaW5lZFByb3BzIiwib2JqIiwiZW50cmllcyIsInJlZHVjZSIsImFjY3UiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkyIiwiayIsIm9yaWdpbmFsVmlld3BvcnQiLCJ2aWV3cG9ydFVwZGF0ZXMiLCJuZXdWaWV3cG9ydCIsInZhbGlkYXRlQm91bmRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL21hcC1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgZ2VvVmlld3BvcnQgZnJvbSAnQG1hcGJveC9nZW8tdmlld3BvcnQnO1xuaW1wb3J0IGJvb2xlYW5XaXRoaW4gZnJvbSAnQHR1cmYvYm9vbGVhbi13aXRoaW4nO1xuaW1wb3J0IGJib3hQb2x5Z29uIGZyb20gJ0B0dXJmL2Jib3gtcG9seWdvbic7XG5pbXBvcnQge2ZpdEJvdW5kc30gZnJvbSAnQG1hdGguZ2wvd2ViLW1lcmNhdG9yJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC9waWNrJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2VudGVyQW5kWm9vbUZyb21Cb3VuZHMsXG4gIHZhbGlkYXRlQm91bmRzLFxuICBNQVBCT1hfVElMRV9TSVpFLFxuICB2YWxpZGF0ZVZpZXdQb3J0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtNYXBTdGF0ZUFjdGlvbnMsIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLCBBY3Rpb25UeXBlc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7TWFwU3RhdGUsIEJvdW5kcywgVmlld3BvcnR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgbWFwU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7bWFwU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBjbGljayBidXR0b24gdG8gY2xvc2Ugc2lkZSBwYW5lbFxuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIG1hcFN0YXRlOiBtYXBTdGF0ZVVwZGF0ZXJzLmZpdEJvdW5kc1VwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIG1hcFN0YXRlLCB7cGF5bG9hZDogWzEyNy4zNCwgMzEuMDksIDEyNy41NiwgMzEuNTldXX1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgbWFwU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYG1hcFN0YXRlYFxuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHBpdGNoIERlZmF1bHQ6IGAwYFxuICogQHByb3BlcnR5IGJlYXJpbmcgRGVmYXVsdDogYDBgXG4gKiBAcHJvcGVydHkgbGF0aXR1ZGUgRGVmYXVsdDogYDM3Ljc1MDQzYFxuICogQHByb3BlcnR5IGxvbmdpdHVkZSBEZWZhdWx0OiBgLTEyMi4zNDY3OWBcbiAqIEBwcm9wZXJ0eSB6b29tIERlZmF1bHQ6IGA5YFxuICogQHByb3BlcnR5IGRyYWdSb3RhdGUgRGVmYXVsdDogYGZhbHNlYFxuICogQHByb3BlcnR5IHdpZHRoIERlZmF1bHQ6IGA4MDBgXG4gKiBAcHJvcGVydHkgaGVpZ2h0IERlZmF1bHQ6IGA4MDBgXG4gKiBAcHJvcGVydHkgbWluWm9vbTogYHVuZGVmaW5lZGAsXG4gKiBAcHJvcGVydHkgbWF4Wm9vbTogYHVuZGVmaW5lZGAsXG4gKiBAcHJvcGVydHkgbWF4UGl0Y2g6IGB1bmRlZmluZWRgIChkZWZhdWx0cyB0byBhcHBsaWNhdGlvbiBjb25maWcgdmFsdWUsIGRlY2suZ2wgZGVmYXVsdCBpcyA2MClcbiAqIEBwcm9wZXJ0eSBtYXhCb3VuZHM6IGB1bmRlZmluZWRgLFxuICogQHByb3BlcnR5IGlzU3BsaXQ6IGBmYWxzZWAsXG4gKiBAcHJvcGVydHkgaXNWaWV3cG9ydFN5bmNlZDogYHRydWVgLFxuICogQHByb3BlcnR5IGlzWm9vbUxvY2tlZDogYGZhbHNlYCxcbiAqIEBwcm9wZXJ0eSBzcGxpdE1hcFZpZXdwb3J0czogYFtdYFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9NQVBfU1RBVEU6IE1hcFN0YXRlID0ge1xuICBwaXRjaDogMCxcbiAgYmVhcmluZzogMCxcbiAgbGF0aXR1ZGU6IDM3Ljc1MDQzLFxuICBsb25naXR1ZGU6IC0xMjIuMzQ2NzksXG4gIHpvb206IDksXG4gIGRyYWdSb3RhdGU6IGZhbHNlLFxuICB3aWR0aDogODAwLFxuICBoZWlnaHQ6IDgwMCxcbiAgbWluWm9vbTogdW5kZWZpbmVkLFxuICBtYXhab29tOiB1bmRlZmluZWQsXG4gIG1heFBpdGNoOiB1bmRlZmluZWQsXG4gIG1heEJvdW5kczogdW5kZWZpbmVkLFxuICBpc1NwbGl0OiBmYWxzZSxcbiAgaXNWaWV3cG9ydFN5bmNlZDogdHJ1ZSxcbiAgaXNab29tTG9ja2VkOiBmYWxzZSxcbiAgc3BsaXRNYXBWaWV3cG9ydHM6IFtdXG59O1xuXG4vKiBVcGRhdGVycyAqL1xuLyoqXG4gKiBVcGRhdGUgbWFwIHZpZXdwb3J0XG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IE1hcFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5VcGRhdGVNYXBVcGRhdGVyQWN0aW9uXG4pOiBNYXBTdGF0ZSA9PiB7XG4gIGNvbnN0IHt2aWV3cG9ydDogaW5wdXRWaWV3cG9ydCwgbWFwSW5kZXggPSAwfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCB2aWV3cG9ydCA9IHZhbGlkYXRlVmlld1BvcnQoaW5wdXRWaWV3cG9ydCk7XG5cbiAgaWYgKHN0YXRlLmlzVmlld3BvcnRTeW5jZWQpIHtcbiAgICAvLyBUaGUgYHVwZGF0ZVZpZXdwb3J0YCBmdW5jdGlvbiBpcyB0eXBlZCBhcyAoVmlld3BvcnQsIFZpZXdwb3J0KSAtPiBWaWV3cG9ydCBidXQgaGVyZSB0aGVcbiAgICAvLyBleHBlY3RlZCB0eXBpbmcgaXMgKE1hcFN0YXRlLCBWaWV3cG9ydCkgLT4gTWFwU3RhdGUuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBhIHBvdGVudGlhbCBidWcgYXMgd2UgdHJlYXQgVmlld3BvcnQgYW5kIE1hcFN0YXRlIGFzIGVxdWFsIHNlZW1pbmdseVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZSAnVmlld3BvcnQnIGlzIG1pc3NpbmcgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGZyb20gdHlwZSAnTWFwU3RhdGUnOiBpc1NwbGl0LCBpc1ZpZXdwb3J0U3luY2VkLCBpc1pvb21Mb2NrZWQsIHNwbGl0TWFwVmlld3BvcnRzXG4gICAgcmV0dXJuIHVwZGF0ZVZpZXdwb3J0KHN0YXRlLCB2aWV3cG9ydCk7XG4gIH1cblxuICBsZXQgb3RoZXJWaWV3cG9ydE1hcEluZGV4ID0gLTE7XG4gIGNvbnN0IHNwbGl0TWFwVmlld3BvcnRzID0gc3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubWFwKChjdXJyZW50Vmlld3BvcnQsIGkpID0+IHtcbiAgICBpZiAoaSA9PT0gbWFwSW5kZXgpIHtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgbWF0Y2hpbmcgdmlld3BvcnQgd2l0aCB0aGUgbmV3Vmlld3BvcnQgaW5mbyBpbiB0aGUgYWN0aW9uIHBheWxvYWRcbiAgICAgIHJldHVybiB1cGRhdGVWaWV3cG9ydChjdXJyZW50Vmlld3BvcnQsIHZpZXdwb3J0KTtcbiAgICB9XG5cbiAgICBvdGhlclZpZXdwb3J0TWFwSW5kZXggPSBpO1xuICAgIC8vIG1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgb3RoZXIgdmlld3BvcnQgKHlldClcbiAgICByZXR1cm4gY3VycmVudFZpZXdwb3J0O1xuICB9KTtcblxuICAvLyBtYWtlIGNvbmRpdGlvbmFsIHVwZGF0ZXMgdG8gdGhlIG90aGVyIHZpZXdwb3J0IG5vdCBtYXRjaGluZyB0aGlzIHBheWxvYWQncyBgbWFwSW5kZXhgXG4gIGlmIChOdW1iZXIuaXNGaW5pdGUob3RoZXJWaWV3cG9ydE1hcEluZGV4KSAmJiBvdGhlclZpZXdwb3J0TWFwSW5kZXggPiAtMSkge1xuICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGEgc3BlY2lhbCBjYXNlIGFuZCBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgICBzcGxpdE1hcFZpZXdwb3J0c1tvdGhlclZpZXdwb3J0TWFwSW5kZXhdID0ge1xuICAgICAgLi4uc3BsaXRNYXBWaWV3cG9ydHNbb3RoZXJWaWV3cG9ydE1hcEluZGV4XSxcbiAgICAgIHdpZHRoOiBzcGxpdE1hcFZpZXdwb3J0c1ttYXBJbmRleF0ud2lkdGgsXG4gICAgICBoZWlnaHQ6IHNwbGl0TWFwVmlld3BvcnRzW21hcEluZGV4XS5oZWlnaHRcbiAgICB9O1xuXG4gICAgaWYgKHN0YXRlLmlzWm9vbUxvY2tlZCkge1xuICAgICAgLy8gdXBkYXRlIHRoZSBvdGhlciB2aWV3cG9ydCB3aXRoIHRoZSBuZXcgem9vbSBmcm9tIHRoZSBzcGxpdCB2aWV3cG9ydCB0aGF0IHdhcyB1cGRhdGVkIHdpdGggdGhpcyBwYXlsb2FkJ3MgYG1hcEluZGV4YFxuICAgICAgc3BsaXRNYXBWaWV3cG9ydHNbb3RoZXJWaWV3cG9ydE1hcEluZGV4XSA9IHtcbiAgICAgICAgLi4uc3BsaXRNYXBWaWV3cG9ydHNbb3RoZXJWaWV3cG9ydE1hcEluZGV4XSxcbiAgICAgICAgem9vbTogc3BsaXRNYXBWaWV3cG9ydHNbbWFwSW5kZXhdLnpvb21cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyB1cGRhdGUgdGhlIHRvcC1sZXZlbCBtYXBTdGF0ZSB2aWV3cG9ydCB3aXRoIHRoZSBtb3N0IHJlY2VudGx5IGludGVyYWN0ZWQtd2l0aCBzcGxpdCB2aWV3cG9ydFxuICAgIC8vIFdIWT8gdGhpcyBhdm9pZHMgem9vbSBhbmQgYm91bmRzIFwianVtcGluZ1wiIGR1ZSB0byBhIFwic3RhbGVcIiB0b3AtbGV2ZWwgbWFwU3RhdGUgdmlld3BvcnQgd2hlbjpcbiAgICAvLyAgMS4gdG9nZ2xpbmcgb2ZmIHRoZSB1bnN5bmNlZCB2aWV3cG9ydHMgbW9kZSB0byBzd2l0Y2ggdG8gdGhlIHN5bmNlZCB2aWV3cG9ydHMgbW9kZVxuICAgIC8vICAyLiB0b2dnbGluZyBvbiB0aGUgem9vbSBsb2NrIGR1cmluZyBhbiB1bnN5bmNlZCB2aWV3cG9ydHMgbW9kZVxuICAgIC4uLnN0YXRlLFxuICAgIC4uLnNwbGl0TWFwVmlld3BvcnRzW21hcEluZGV4XSxcbiAgICAvLyB1cGRhdGUgdGhlIG1hcFN0YXRlIHdpdGggdGhlIG5ldyBhcnJheSBvZiBzcGxpdCB2aWV3cG9ydHNcbiAgICBzcGxpdE1hcFZpZXdwb3J0c1xuICB9O1xufTtcblxuLyoqXG4gKiBGaXQgbWFwIHZpZXdwb3J0IHRvIGJvdW5kc1xuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGZpdEJvdW5kc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBNYXBTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuRml0Qm91bmRzVXBkYXRlckFjdGlvblxuKTogTWFwU3RhdGUgPT4ge1xuICBjb25zdCBjZW50ZXJBbmRab29tID0gZ2V0Q2VudGVyQW5kWm9vbUZyb21Cb3VuZHMoYWN0aW9uLnBheWxvYWQsIHtcbiAgICB3aWR0aDogc3RhdGUud2lkdGgsXG4gICAgaGVpZ2h0OiBzdGF0ZS5oZWlnaHRcbiAgfSk7XG4gIGlmICghY2VudGVyQW5kWm9vbSkge1xuICAgIC8vIGJvdW5kcyBpcyBpbnZhbGlkXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF0aXR1ZGU6IGNlbnRlckFuZFpvb20uY2VudGVyWzFdLFxuICAgIGxvbmdpdHVkZTogY2VudGVyQW5kWm9vbS5jZW50ZXJbMF0sXG4gICAgLy8gRm9yIG1hcmdpbmFsIG9yIGludmFsaWQgYm91bmRzLCB6b29tIG1heSBiZSBOYU4uIE1ha2Ugc3VyZSB0byBwcm92aWRlIGEgdmFsaWQgdmFsdWUgaW4gb3JkZXJcbiAgICAvLyB0byBhdm9pZCBjb3JydXB0IHN0YXRlIGFuZCBwb3RlbnRpYWwgY3Jhc2hlcyBhcyB6b29tIGlzIGV4cGVjdGVkIHRvIGJlIGEgbnVtYmVyXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShjZW50ZXJBbmRab29tLnpvb20pID8ge3pvb206IGNlbnRlckFuZFpvb20uem9vbX0gOiB7fSlcbiAgfTtcblxuICAvLyBpZiBmaXR0aW5nIHRvIGJvdW5kcyB3aGlsZSBzcGxpdCBhbmQgdW5zeW5jZWRcbiAgLy8gY29weSB0aGUgbmV3IGxhdGl0dWRlLCBsb25naXR1ZGUsIGFuZCB6b29tIHZhbHVlcyB0byBlYWNoIHNwbGl0IHZpZXdwb3J0XG4gIGlmIChuZXdTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cyA9IG5ld1N0YXRlLnNwbGl0TWFwVmlld3BvcnRzLm1hcChjdXJyZW50Vmlld3BvcnQgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnRWaWV3cG9ydCxcbiAgICAgIGxhdGl0dWRlOiBuZXdTdGF0ZS5sYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZTogbmV3U3RhdGUubG9uZ2l0dWRlLFxuICAgICAgem9vbTogbmV3U3RhdGUuem9vbVxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIGJldHdlZW4gM2QgYW5kIDJkIG1hcC5cbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVQZXJzcGVjdGl2ZVVwZGF0ZXIgPSAoc3RhdGU6IE1hcFN0YXRlKTogTWFwU3RhdGUgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICAuLi57XG4gICAgICBwaXRjaDogc3RhdGUuZHJhZ1JvdGF0ZSA/IDAgOiA1MCxcbiAgICAgIGJlYXJpbmc6IHN0YXRlLmRyYWdSb3RhdGUgPyAwIDogMjRcbiAgICB9LFxuICAgIGRyYWdSb3RhdGU6ICFzdGF0ZS5kcmFnUm90YXRlXG4gIH07XG5cbiAgLy8gaWYgdG9nZ2xpbmcgM2QgYW5kIDJkIHdoaWxlIHNwbGl0IGFuZCB1bnN5bmNlZFxuICAvLyBjb3B5IHRoZSBuZXcgcGl0Y2gsIGJlYXJpbmcsIGFuZCBkcmFnUm90YXRlIHZhbHVlcyB0byBlYWNoIHNwbGl0IHZpZXdwb3J0XG4gIGlmIChuZXdTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cyA9IG5ld1N0YXRlLnNwbGl0TWFwVmlld3BvcnRzLm1hcChjdXJyZW50Vmlld3BvcnQgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnRWaWV3cG9ydCxcbiAgICAgIHBpdGNoOiBuZXdTdGF0ZS5waXRjaCxcbiAgICAgIGJlYXJpbmc6IG5ld1N0YXRlLmJlYXJpbmcsXG4gICAgICBkcmFnUm90YXRlOiBuZXdTdGF0ZS5kcmFnUm90YXRlXG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZXNldCBtYXBTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBNYXBTdGF0ZSk6IE1hcFN0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfTUFQX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLy8gY29uc2lkZXIgY2FzZSB3aGVyZSB5b3UgaGF2ZSBhIHNwbGl0IG1hcCBhbmQgdXNlciB3YW50cyB0byByZXNldFxuLyoqXG4gKiBVcGRhdGUgYG1hcFN0YXRlYCB0byBwcm9wYWdhdGUgYSBuZXcgY29uZmlnXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBNYXBTdGF0ZSxcbiAge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fSwgYm91bmRzID0gbnVsbH1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBNYXBTdGF0ZSA9PiB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UGFydGlhbDxNYXBTdGF0ZT59XG4gICAqL1xuICBjb25zdCBtYXBTdGF0ZSA9IChjb25maWcgfHwge30pLm1hcFN0YXRlIHx8IHt9O1xuICAvLyBtZXJnZWQgcmVjZWl2ZWQgbWFwU3RhdGUgd2l0aCBwcmV2aW91cyBzdGF0ZVxuICAvLyBzdGF0ZSBhbHNvIG1heSBpbmNsdWRlIHByb3BlcnRpZXMgdGhhdCBhcmUgbmV3IHRvIGFuIGV4aXN0aW5nLCBzYXZlZCBwcm9qZWN0J3MgbWFwU3RhdGVcblxuICBsZXQgbWVyZ2VkU3RhdGUgPSBkZWVwbWVyZ2U8TWFwU3RhdGU+KHN0YXRlLCBtYXBTdGF0ZSwge1xuICAgIC8vIG5vdGU6IGRlZXBtZXJnZSBieSBkZWZhdWx0IHdpbGwgbWVyZ2UgYXJyYXlzIGJ5IGNvbmNhdGVuYXRpbmcgdGhlbVxuICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSBkZXN0aW5hdGlvbiBhcnJheXMgd2l0aCBzb3VyY2UgYXJyYXlzLCBpZiBwcmVzZW50XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1RlaFNocmlrZS9kZWVwbWVyZ2UjYXJyYXltZXJnZS1leGFtcGxlLW92ZXJ3cml0ZS10YXJnZXQtYXJyYXlcbiAgICBhcnJheU1lcmdlOiAoX2Rlc3RpbmF0aW9uQXJyYXksIHNvdXJjZUFycmF5KSA9PiBzb3VyY2VBcnJheVxuICB9KTtcblxuICAvLyBpZiBjZW50ZXIgbWFwXG4gIC8vIGNlbnRlciBtYXAgd2lsbCBvdmVycmlkZSBtYXBTdGF0ZSBjb25maWdcbiAgaWYgKG9wdGlvbnMuY2VudGVyTWFwICYmIGJvdW5kcykge1xuICAgIG1lcmdlZFN0YXRlID0gZml0Qm91bmRzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgICAgcGF5bG9hZDogYm91bmRzXG4gICAgfSk7XG4gIH1cblxuICAvLyBtYWtlIHN1cmUgd2UgdmFsaWRhdGUgbWFwIHN0YXRlIGJlZm9yZSB3ZSBtZXJnZVxuICBtZXJnZWRTdGF0ZSA9IHZhbGlkYXRlVmlld1BvcnQobWVyZ2VkU3RhdGUpO1xuXG4gIHJldHVybiB7XG4gICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgLy8gdXBkYXRlIHdpZHRoIGlmIGBpc1NwbGl0YCBoYXMgY2hhbmdlZFxuICAgIC4uLmdldE1hcERpbUZvclNwbGl0TWFwKG1lcmdlZFN0YXRlLmlzU3BsaXQsIHN0YXRlKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgYmV0d2VlbiBvbmUgb3Igc3BsaXQgbWFwc1xuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChzdGF0ZTogTWFwU3RhdGUpOiBNYXBTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgLi4uZ2V0TWFwRGltRm9yU3BsaXRNYXAoIXN0YXRlLmlzU3BsaXQsIHN0YXRlKSxcbiAgaXNTcGxpdDogIXN0YXRlLmlzU3BsaXQsXG4gIC4uLighc3RhdGUuaXNTcGxpdCA9PT0gZmFsc2VcbiAgICA/IHtcbiAgICAgICAgLy8gaWYgdG9nZ2xpbmcgdG8gbm8gbG9uZ2VyIHNwbGl0IChzaW5nbGUgbW9kZSkgdGhlbiByZXNldCBhIGZldyBwcm9wZXJ0aWVzXG4gICAgICAgIGlzVmlld3BvcnRTeW5jZWQ6IHRydWUsXG4gICAgICAgIGlzWm9vbUxvY2tlZDogZmFsc2UsXG4gICAgICAgIHNwbGl0TWFwVmlld3BvcnRzOiBbXVxuICAgICAgfVxuICAgIDoge30pXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgYmV0d2VlbiBsb2NrZWQgYW5kIHVubG9ja2VkIHNwbGl0IHZpZXdwb3J0c1xuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVmlld3BvcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogTWFwU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVmlld3BvcnRVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgLy8gbmV3IG1hcCBzdGF0ZSBpbW1lZGlhdGVseSBnZXRzIHRoZSBuZXcsIG9wdGlvbmFsIHBheWxvYWQgdmFsdWVzIGZvciBpc1ZpZXdwb3J0U3luY2VkIGFuZC9vciBpc1pvb21Mb2NrZWRcbiAgY29uc3QgbmV3TWFwU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgLi4uKGFjdGlvbi5wYXlsb2FkIHx8IHt9KVxuICB9O1xuXG4gIGlmIChuZXdNYXBTdGF0ZS5pc1ZpZXdwb3J0U3luY2VkKSB7XG4gICAgLy8gc3dpdGNoaW5nIGZyb20gdW5zeW5jZWQgdG8gc3luY2VkIHZpZXdwb3J0c1xuICAgIG5ld01hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzID0gW107XG4gIH0gZWxzZSB7XG4gICAgLy8gc3dpdGNoaW5nIGZyb20gc3luY2VkIHRvIHVuc3luY2VkIHZpZXdwb3J0c1xuICAgIC8vIG9yIGFscmVhZHkgaW4gdW5zeW5jZWQgbW9kZSBhbmQgdG9nZ2xpbmcgbG9ja2VkIHpvb21cblxuICAgIGlmIChzdGF0ZS5pc1pvb21Mb2NrZWQgJiYgIW5ld01hcFN0YXRlLmlzWm9vbUxvY2tlZCkge1xuICAgICAgLy8gc3dpdGNoaW5nIG9mZiBsb2NrZWQgem9vbSB3aGlsZSB1bnN5bmNlZFxuICAgICAgLy8gZG9uJ3QgY29weSB0aGUgbWFwU3RhdGVzIHRvIGxlZnQgYW5kIHJpZ2h0IHZpZXdwb3J0cyBiZWNhdXNlIHRoZXJlIHdpbGwgYmUgem9vbSBcImp1bXBpbmdcIlxuICAgICAgcmV0dXJuIG5ld01hcFN0YXRlO1xuICAgIH1cblxuICAgIGlmICghc3RhdGUuaXNab29tTG9ja2VkICYmIG5ld01hcFN0YXRlLmlzWm9vbUxvY2tlZCkge1xuICAgICAgLy8gc3dpdGNoaW5nIG9uIGxvY2tlZCB6b29tIHdoaWxlIHVuc3luY2VkXG4gICAgICAvLyBvbmx5IGNvcHkgem9vbSB2aWV3cG9ydCBwcm9wZXJ0eSBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IGludGVyYWN0ZWQtd2l0aCB2aWV3cG9ydCB0byB0aGUgb3RoZXJcbiAgICAgIC8vIFRPRE86IGRvIHdlIHdhbnQgdG8gY2hlY2sgZm9yIGEgbWF0Y2ggYSBkaWZmZXJlbnQgd2F5LCBzdWNoIGFzIGEgY29tYm8gb2YgYGxhdGl0dWRlYCBhbmQgYGxvbmdpdHVkZWA/XG4gICAgICBjb25zdCBsYXN0VXBkYXRlZFZpZXdwb3J0SW5kZXggPSBuZXdNYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5maW5kSW5kZXgoXG4gICAgICAgIHYgPT4gbmV3TWFwU3RhdGUuem9vbSA9PT0gdi56b29tXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzcGxpdE1hcFZpZXdwb3J0cyA9IG5ld01hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzLm1hcCgoY3VycmVudFZpZXdwb3J0LCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09PSBsYXN0VXBkYXRlZFZpZXdwb3J0SW5kZXgpIHtcbiAgICAgICAgICAvLyBubyB6b29tIHRvIG1vZGlmeSBoZXJlXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRWaWV3cG9ydDtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgb3RoZXIgdmlld3BvcnQgZ2V0cyB0aGUgbW9zdCByZWNlbnRseSBpbnRlcmFjdGVkLXdpdGggdmlld3BvcnQncyB6b29tXG4gICAgICAgIC8vIFdIWT8gdGhlIHZpZXdwb3J0IHRoZSB1c2VyIHdhcyBsYXN0IGludGVyYWN0aW5nIHdpdGggd2lsbCBzZXQgem9vbSBhY3Jvc3MgdGhlIGJvYXJkIGZvciBzbW9vdGggVVhcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jdXJyZW50Vmlld3BvcnQsXG4gICAgICAgICAgem9vbTogbmV3TWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHNbbGFzdFVwZGF0ZWRWaWV3cG9ydEluZGV4XS56b29tXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgbmV3TWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMgPSBzcGxpdE1hcFZpZXdwb3J0cztcblxuICAgICAgcmV0dXJuIG5ld01hcFN0YXRlO1xuICAgIH1cblxuICAgIC8vIGlmIGN1cnJlbnQgdmlld3BvcnQgaXMgc3luY2VkLCBhbmQgd2UgYXJlIHVuc3luY2luZyBpdFxuICAgIC8vIG9yIGFscmVhZHkgaW4gdW5zeW5jZWQgbW9kZSBhbmQgTk9UIHRvZ2dsaW5nIGxvY2tlZCB6b29tXG4gICAgLy8gbWFrZSBhIGZyZXNoIGNvcHkgb2YgdGhlIGN1cnJlbnQgdmlld3BvcnQgb2JqZWN0LCBhc3NpZ24gaXQgdG8gc3BsaXRNYXBWaWV3cG9ydHNbXVxuICAgIC8vIHBpY2tWaWV3cG9ydFByb3BzRnJvbU1hcFN0YXRlIGlzIGNhbGxlZCB0d2ljZSB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbiBjb25mbGljdHNcbiAgICBjb25zdCBsZWZ0Vmlld3BvcnQgPSBwaWNrVmlld3BvcnRQcm9wc0Zyb21NYXBTdGF0ZShuZXdNYXBTdGF0ZSk7XG4gICAgY29uc3QgcmlnaHRWaWV3cG9ydCA9IHBpY2tWaWV3cG9ydFByb3BzRnJvbU1hcFN0YXRlKG5ld01hcFN0YXRlKTtcbiAgICBuZXdNYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cyA9IFtsZWZ0Vmlld3BvcnQsIHJpZ2h0Vmlld3BvcnRdO1xuICB9XG5cbiAgLy8gcmV0dXJuIG5ldyBzdGF0ZVxuICByZXR1cm4gbmV3TWFwU3RhdGU7XG59O1xuXG4vLyBIZWxwZXJzXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFwRGltRm9yU3BsaXRNYXAoaXNTcGxpdCwgc3RhdGUpIHtcbiAgLy8gY2FzZXM6XG4gIC8vIDEuIHN0YXRlIHNwbGl0OiB0cnVlIC0gaXNTcGxpdDogdHJ1ZVxuICAvLyBkbyBub3RoaW5nXG4gIC8vIDIuIHN0YXRlIHNwbGl0OiBmYWxzZSAtIGlzU3BsaXQ6IGZhbHNlXG4gIC8vIGRvIG5vdGhpbmdcbiAgaWYgKHN0YXRlLmlzU3BsaXQgPT09IGlzU3BsaXQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB3aWR0aCA9XG4gICAgc3RhdGUuaXNTcGxpdCAmJiAhaXNTcGxpdFxuICAgICAgPyAvLyAzLiBzdGF0ZSBzcGxpdDogdHJ1ZSAtIGlzU3BsaXQ6IGZhbHNlXG4gICAgICAgIC8vIGRvdWJsZSB3aWR0aFxuICAgICAgICBzdGF0ZS53aWR0aCAqIDJcbiAgICAgIDogLy8gNC4gc3RhdGUgc3BsaXQ6IGZhbHNlIC0gaXNTcGxpdDogdHJ1ZVxuICAgICAgICAvLyBzcGxpdCB3aWR0aFxuICAgICAgICBzdGF0ZS53aWR0aCAvIDI7XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aFxuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVWaWV3cG9ydEJhc2VkT25Cb3VuZHMoc3RhdGU6IE1hcFN0YXRlLCBuZXdNYXBTdGF0ZTogTWFwU3RhdGUpIHtcbiAgLy8gR2V0IHRoZSBuZXcgdmlld3BvcnQgYm91bmRzXG4gIGNvbnN0IHZpZXdwb3J0Qm91bmRzID0gZ2VvVmlld3BvcnQuYm91bmRzKFxuICAgIFtuZXdNYXBTdGF0ZS5sb25naXR1ZGUsIG5ld01hcFN0YXRlLmxhdGl0dWRlXSxcbiAgICBuZXdNYXBTdGF0ZS56b29tLFxuICAgIFtuZXdNYXBTdGF0ZS53aWR0aCwgbmV3TWFwU3RhdGUuaGVpZ2h0XSxcbiAgICBNQVBCT1hfVElMRV9TSVpFXG4gICk7XG4gIC8vIEdlbmVyYXRlIHR1cmYgUG9seWdvbiBmcm9tIGJvdW5kcyBmb3IgY29tcGFyaXNvblxuICBjb25zdCB2aWV3cG9ydEJvdW5kc1BvbHlnb24gPSBiYm94UG9seWdvbih2aWV3cG9ydEJvdW5kcyk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbmV3U3RhdGVNYXhCb3VuZHM6IEJvdW5kcyA9IG5ld01hcFN0YXRlLm1heEJvdW5kcztcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtYXhCb3VuZHNQb2x5Z29uID0gYmJveFBvbHlnb24obmV3U3RhdGVNYXhCb3VuZHMpO1xuXG4gIC8vIElmIG1heEJvdW5kcyBoYXMgY2hhbmdlZCByZXNldCB0aGUgdmlld3BvcnQgdG8gc25hcCB0byBib3VuZHNcbiAgY29uc3QgaGFzTWF4Qm91bmRzQ2hhbmdlZCA9XG4gICAgIXN0YXRlLm1heEJvdW5kcyB8fCAhc3RhdGUubWF4Qm91bmRzLmV2ZXJ5KCh2YWwsIGlkeCkgPT4gdmFsID09PSBuZXdTdGF0ZU1heEJvdW5kc1tpZHhdKTtcbiAgaWYgKGhhc01heEJvdW5kc0NoYW5nZWQpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgbmV3TWFwU3RhdGUgdmlld3BvcnQgaXMgd2l0aGluIG1heEJvdW5kc1xuICAgIGlmICghYm9vbGVhbldpdGhpbih2aWV3cG9ydEJvdW5kc1BvbHlnb24sIG1heEJvdW5kc1BvbHlnb24pKSB7XG4gICAgICBjb25zdCB7bGF0aXR1ZGUsIGxvbmdpdHVkZSwgem9vbX0gPSBmaXRCb3VuZHMoe1xuICAgICAgICB3aWR0aDogbmV3TWFwU3RhdGUud2lkdGgsXG4gICAgICAgIGhlaWdodDogbmV3TWFwU3RhdGUuaGVpZ2h0LFxuICAgICAgICBib3VuZHM6IFtcbiAgICAgICAgICBbbmV3U3RhdGVNYXhCb3VuZHNbMF0sIG5ld1N0YXRlTWF4Qm91bmRzWzFdXSxcbiAgICAgICAgICBbbmV3U3RhdGVNYXhCb3VuZHNbMl0sIG5ld1N0YXRlTWF4Qm91bmRzWzNdXVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgbmV3TWFwU3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld01hcFN0YXRlLFxuICAgICAgICBsYXRpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlLFxuICAgICAgICAvLyBGb3IgbWFyZ2luYWwgb3IgaW52YWxpZCBib3VuZHMsIHpvb20gbWF5IGJlIE5hTi4gTWFrZSBzdXJlIHRvIHByb3ZpZGUgYSB2YWxpZCB2YWx1ZSBpbiBvcmRlclxuICAgICAgICAvLyB0byBhdm9pZCBjb3JydXB0IHN0YXRlIGFuZCBwb3RlbnRpYWwgY3Jhc2hlcyBhcyB6b29tIGlzIGV4cGVjdGVkIHRvIGJlIGEgbnVtYmVyXG4gICAgICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoem9vbSkgPyB7em9vbX0gOiB7fSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXBTdGF0ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBuZXdNYXBTdGF0ZSB2aWV3cG9ydCBpcyB3aXRoaW4gbWF4Qm91bmRzXG4gIGlmICghYm9vbGVhbldpdGhpbih2aWV3cG9ydEJvdW5kc1BvbHlnb24sIG1heEJvdW5kc1BvbHlnb24pKSB7XG4gICAgbmV3TWFwU3RhdGUgPSB7XG4gICAgICAuLi5uZXdNYXBTdGF0ZSxcbiAgICAgIGxvbmdpdHVkZTogc3RhdGUubG9uZ2l0dWRlLFxuICAgICAgbGF0aXR1ZGU6IHN0YXRlLmxhdGl0dWRlLFxuICAgICAgem9vbTogc3RhdGUuem9vbVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbmV3TWFwU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrVmlld3BvcnRQcm9wc0Zyb21NYXBTdGF0ZShzdGF0ZTogTWFwU3RhdGUpOiBWaWV3cG9ydCB7XG4gIHJldHVybiBwaWNrKHN0YXRlLCBbXG4gICAgJ3dpZHRoJyxcbiAgICAnaGVpZ2h0JyxcbiAgICAnem9vbScsXG4gICAgJ3BpdGNoJyxcbiAgICAnYmVhcmluZycsXG4gICAgJ2xhdGl0dWRlJyxcbiAgICAnbG9uZ2l0dWRlJyxcbiAgICAnZHJhZ1JvdGF0ZScsXG4gICAgJ21pblpvb20nLFxuICAgICdtYXhab29tJyxcbiAgICAnbWF4UGl0Y2gnLFxuICAgICdtYXhCb3VuZHMnXG4gIF0pO1xufVxuXG4vKiogU2VsZWN0IGl0ZW1zIGZyb20gb2JqZWN0IHdob3NlIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQgKi9cbmNvbnN0IGRlZmluZWRQcm9wcyA9IG9iaiA9PlxuICBPYmplY3QuZW50cmllcyhvYmopLnJlZHVjZShcbiAgICAoYWNjdSwgW2ssIHZdKSA9PiAoey4uLmFjY3UsIC4uLih2ICE9PSB1bmRlZmluZWQgPyB7W2tdOiB2fSA6IHt9KX0pLFxuICAgIHt9XG4gICk7XG5cbmZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0KG9yaWdpbmFsVmlld3BvcnQ6IFZpZXdwb3J0LCB2aWV3cG9ydFVwZGF0ZXM6IFZpZXdwb3J0KTogVmlld3BvcnQge1xuICBsZXQgbmV3Vmlld3BvcnQgPSB7XG4gICAgLi4ub3JpZ2luYWxWaWV3cG9ydCxcbiAgICAuLi4oZGVmaW5lZFByb3BzKHZpZXdwb3J0VXBkYXRlcykgfHwge30pXG4gIH07XG5cbiAgLy8gTWFrZSBzdXJlIHpvb20gbGV2ZWwgZG9lc24ndCBnbyBiZWxsb3cgbWluWm9vbSBpZiBkZWZpbmVkXG4gIGlmIChuZXdWaWV3cG9ydC5taW5ab29tICYmIG5ld1ZpZXdwb3J0Lnpvb20gJiYgbmV3Vmlld3BvcnQuem9vbSA8IG5ld1ZpZXdwb3J0Lm1pblpvb20pIHtcbiAgICBuZXdWaWV3cG9ydC56b29tID0gbmV3Vmlld3BvcnQubWluWm9vbTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgem9vbSBsZXZlbCBkb2Vzbid0IGdvIGFib3ZlIG1heFpvb20gaWYgZGVmaW5lZFxuICBpZiAobmV3Vmlld3BvcnQubWF4Wm9vbSAmJiBuZXdWaWV3cG9ydC56b29tICYmIG5ld1ZpZXdwb3J0Lnpvb20gPiBuZXdWaWV3cG9ydC5tYXhab29tKSB7XG4gICAgbmV3Vmlld3BvcnQuem9vbSA9IG5ld1ZpZXdwb3J0Lm1heFpvb207XG4gIH1cbiAgLy8gTGltaXQgdmlld3BvcnQgdXBkYXRlIGJhc2VkIG9uIG1heEJvdW5kc1xuICBpZiAobmV3Vmlld3BvcnQubWF4Qm91bmRzICYmIHZhbGlkYXRlQm91bmRzKG5ld1ZpZXdwb3J0Lm1heEJvdW5kcykpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGUgJ1ZpZXdwb3J0JyBpcyBtaXNzaW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBmcm9tIHR5cGUgJ01hcFN0YXRlJzogaXNTcGxpdCwgaXNWaWV3cG9ydFN5bmNlZCwgaXNab29tTG9ja2VkLCBzcGxpdE1hcFZpZXdwb3J0c1xuICAgIG5ld1ZpZXdwb3J0ID0gdXBkYXRlVmlld3BvcnRCYXNlZE9uQm91bmRzKG9yaWdpbmFsVmlld3BvcnQsIG5ld1ZpZXdwb3J0KTtcbiAgfVxuXG4gIHJldHVybiBuZXdWaWV3cG9ydDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssS0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBSzBCLFNBQUFPLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFB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
package/dist/map-state.js DELETED
@@ -1,35 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.mapStateReducerFactory = exports["default"] = void 0;
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _reduxActions = require("redux-actions");
11
- var _actions = require("@kepler.gl/actions");
12
- var mapStateUpdaters = _interopRequireWildcard(require("./map-state-updaters"));
13
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
14
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
15
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
17
- // Copyright contributors to the kepler.gl project
18
- /**
19
- * Important: Do not rename `actionHandler` or the assignment pattern of property value.
20
- * It is used to generate documentation
21
- */
22
- var actionHandler = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _actions.ActionTypes.UPDATE_MAP, mapStateUpdaters.updateMapUpdater), _actions.ActionTypes.FIT_BOUNDS, mapStateUpdaters.fitBoundsUpdater), _actions.ActionTypes.TOGGLE_PERSPECTIVE, mapStateUpdaters.togglePerspectiveUpdater), _actions.ActionTypes.RECEIVE_MAP_CONFIG, mapStateUpdaters.receiveMapConfigUpdater), _actions.ActionTypes.RESET_MAP_CONFIG, mapStateUpdaters.resetMapConfigUpdater), _actions.ActionTypes.TOGGLE_SPLIT_MAP, mapStateUpdaters.toggleSplitMapUpdater), _actions.ActionTypes.TOGGLE_SPLIT_MAP_VIEWPORT, mapStateUpdaters.toggleSplitMapViewportUpdater);
23
-
24
- /* Reducer */
25
- var mapStateReducerFactory = exports.mapStateReducerFactory = function mapStateReducerFactory() {
26
- var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
27
- return (
28
- // @ts-expect-error
29
- (0, _reduxActions.handleActions)(actionHandler, _objectSpread(_objectSpread(_objectSpread({}, mapStateUpdaters.INITIAL_MAP_STATE), initialState), {}, {
30
- initialState: initialState
31
- }))
32
- );
33
- };
34
- var _default = exports["default"] = mapStateReducerFactory();
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVkdXhBY3Rpb25zIiwicmVxdWlyZSIsIl9hY3Rpb25zIiwibWFwU3RhdGVVcGRhdGVycyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiYWN0aW9uSGFuZGxlciIsIkFjdGlvblR5cGVzIiwiVVBEQVRFX01BUCIsInVwZGF0ZU1hcFVwZGF0ZXIiLCJGSVRfQk9VTkRTIiwiZml0Qm91bmRzVXBkYXRlciIsIlRPR0dMRV9QRVJTUEVDVElWRSIsInRvZ2dsZVBlcnNwZWN0aXZlVXBkYXRlciIsIlJFQ0VJVkVfTUFQX0NPTkZJRyIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiUkVTRVRfTUFQX0NPTkZJRyIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsIlRPR0dMRV9TUExJVF9NQVAiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJUT0dHTEVfU1BMSVRfTUFQX1ZJRVdQT1JUIiwidG9nZ2xlU3BsaXRNYXBWaWV3cG9ydFVwZGF0ZXIiLCJtYXBTdGF0ZVJlZHVjZXJGYWN0b3J5IiwiZXhwb3J0cyIsImluaXRpYWxTdGF0ZSIsInVuZGVmaW5lZCIsImhhbmRsZUFjdGlvbnMiLCJJTklUSUFMX01BUF9TVEFURSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL21hcC1zdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2hhbmRsZUFjdGlvbnN9IGZyb20gJ3JlZHV4LWFjdGlvbnMnO1xuaW1wb3J0IHtBY3Rpb25UeXBlc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCAqIGFzIG1hcFN0YXRlVXBkYXRlcnMgZnJvbSAnLi9tYXAtc3RhdGUtdXBkYXRlcnMnO1xuXG4vKipcbiAqIEltcG9ydGFudDogRG8gbm90IHJlbmFtZSBgYWN0aW9uSGFuZGxlcmAgb3IgdGhlIGFzc2lnbm1lbnQgcGF0dGVybiBvZiBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEl0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgZG9jdW1lbnRhdGlvblxuICovXG5jb25zdCBhY3Rpb25IYW5kbGVyID0ge1xuICBbQWN0aW9uVHlwZXMuVVBEQVRFX01BUF06IG1hcFN0YXRlVXBkYXRlcnMudXBkYXRlTWFwVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLkZJVF9CT1VORFNdOiBtYXBTdGF0ZVVwZGF0ZXJzLmZpdEJvdW5kc1VwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5UT0dHTEVfUEVSU1BFQ1RJVkVdOiBtYXBTdGF0ZVVwZGF0ZXJzLnRvZ2dsZVBlcnNwZWN0aXZlVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJR106IG1hcFN0YXRlVXBkYXRlcnMucmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5SRVNFVF9NQVBfQ09ORklHXTogbWFwU3RhdGVVcGRhdGVycy5yZXNldE1hcENvbmZpZ1VwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5UT0dHTEVfU1BMSVRfTUFQXTogbWFwU3RhdGVVcGRhdGVycy50b2dnbGVTcGxpdE1hcFVwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5UT0dHTEVfU1BMSVRfTUFQX1ZJRVdQT1JUXTogbWFwU3RhdGVVcGRhdGVycy50b2dnbGVTcGxpdE1hcFZpZXdwb3J0VXBkYXRlclxufTtcblxuLyogUmVkdWNlciAqL1xuZXhwb3J0IGNvbnN0IG1hcFN0YXRlUmVkdWNlckZhY3RvcnkgPSAoaW5pdGlhbFN0YXRlID0ge30pID0+XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgaGFuZGxlQWN0aW9ucyhhY3Rpb25IYW5kbGVyLCB7XG4gICAgLi4ubWFwU3RhdGVVcGRhdGVycy5JTklUSUFMX01BUF9TVEFURSxcbiAgICAuLi5pbml0aWFsU3RhdGUsXG4gICAgaW5pdGlhbFN0YXRlXG4gIH0pO1xuXG5leHBvcnQgZGVmYXVsdCBtYXBTdGF0ZVJlZHVjZXJGYWN0b3J5KCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBLElBQUFBLGFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFBeUQsU0FBQUkseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFGLHdCQUFBRSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FB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