@carto/kepler.gl 0.0.69 → 0.0.70-alpha.hackathon-3dtiles.10
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.
- package/dist/actions/map-style-actions.js +19 -3
- package/dist/components/map-container.js +202 -21
- package/dist/components/side-panel/map-manager.js +4 -1
- package/dist/constants/action-types.js +2 -1
- package/dist/constants/default-settings.js +2 -2
- package/dist/processors/file-handler.js +1 -3
- package/dist/reducers/map-style-updaters.js +60 -33
- package/dist/reducers/map-style.js +2 -2
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +5 -3
- package/package.json +3 -4
- package/src/actions/map-style-actions.d.ts +8 -0
- package/src/actions/map-style-actions.js +16 -0
- package/src/components/map-container.js +179 -40
- package/src/components/side-panel/map-manager.js +1 -0
- package/src/constants/action-types.d.ts +1 -0
- package/src/constants/action-types.js +1 -0
- package/src/processors/file-handler.js +0 -1
- package/src/reducers/map-style-updaters.d.ts +2 -0
- package/src/reducers/map-style-updaters.js +34 -5
- package/src/reducers/map-style.js +1 -0
- package/src/utils/map-style-utils/mapbox-gl-style-editor.js +3 -2
- package/CHANGELOG.md +0 -934
- package/src/.DS_Store +0 -0
|
@@ -86,7 +86,8 @@ exports.editTopMapStyle = editTopMapStyle;
|
|
|
86
86
|
var editBottomMapStyle = (0, _lodash["default"])(function (_ref4) {
|
|
87
87
|
var id = _ref4.id,
|
|
88
88
|
mapStyle = _ref4.mapStyle,
|
|
89
|
-
visibleLayerGroups = _ref4.visibleLayerGroups
|
|
89
|
+
visibleLayerGroups = _ref4.visibleLayerGroups,
|
|
90
|
+
sketchValue = _ref4.sketchValue;
|
|
90
91
|
var invisibleFilters = (mapStyle.layerGroups || []).filter(function (lg) {
|
|
91
92
|
return !visibleLayerGroups[lg.slug];
|
|
92
93
|
}).map(function (lg) {
|
|
@@ -100,7 +101,8 @@ var editBottomMapStyle = (0, _lodash["default"])(function (_ref4) {
|
|
|
100
101
|
});
|
|
101
102
|
});
|
|
102
103
|
return _objectSpread(_objectSpread({}, mapStyle.style), {}, {
|
|
103
|
-
layers: filteredLayers
|
|
104
|
+
layers: filteredLayers,
|
|
105
|
+
sketchValue: sketchValue
|
|
104
106
|
});
|
|
105
107
|
}, resolver); // valid style url
|
|
106
108
|
// mapbox://styles/uberdata/cjfyl03kp1tul2smf5v2tbdd4
|
|
@@ -209,4 +211,4 @@ function mergeLayerGroupVisibility(defaultLayerGroup, currentLayerGroup) {
|
|
|
209
211
|
return _objectSpread(_objectSpread({}, accu), currentLayerGroup.hasOwnProperty(key) ? (0, _defineProperty2["default"])({}, key, currentLayerGroup[key]) : {});
|
|
210
212
|
}, defaultLayerGroup);
|
|
211
213
|
}
|
|
212
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9tYXAtc3R5bGUtdXRpbHMvbWFwYm94LWdsLXN0eWxlLWVkaXRvci5qcyJdLCJuYW1lcyI6WyJtYXBVcmxSZyIsImh0dHBSZyIsImdldERlZmF1bHRMYXllckdyb3VwVmlzaWJpbGl0eSIsImxheWVyR3JvdXBzIiwicmVkdWNlIiwiYWNjdSIsImxheWVyIiwic2x1ZyIsImRlZmF1bHRWaXNpYmlsaXR5IiwicmVzb2x2ZXIiLCJpZCIsIm1hcFN0eWxlIiwidmlzaWJsZUxheWVyR3JvdXBzIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImQiLCJzb3J0Iiwiam9pbiIsImVkaXRUb3BNYXBTdHlsZSIsInZpc2libGVGaWx0ZXJzIiwibGciLCJtYXAiLCJmaWx0ZXJlZExheWVycyIsInN0eWxlIiwibGF5ZXJzIiwic29tZSIsIm1hdGNoIiwiZWRpdEJvdHRvbU1hcFN0eWxlIiwiaW52aXNpYmxlRmlsdGVycyIsImV2ZXJ5IiwiaXNWYWxpZFN0eWxlVXJsIiwidXJsIiwiQm9vbGVhbiIsImdldFN0eWxlRG93bmxvYWRVcmwiLCJzdHlsZVVybCIsImFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwic3RhcnRzV2l0aCIsInN0eWxlSWQiLCJyZXBsYWNlIiwiREVGQVVMVF9NQVBCT1hfQVBJX1VSTCIsImdldFN0eWxlSW1hZ2VJY29uIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBTdGF0ZSIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsIm1hcFciLCJtYXBIIiwic2NhbGVNYXBTdHlsZUJ5UmVzb2x1dGlvbiIsIm1hcGJveFN0eWxlIiwic2NhbGUiLCJsYWJlbExheWVyR3JvdXAiLCJERUZBVUxUX0xBWUVSX0dST1VQUyIsImZpbmQiLCJsYWJlbExheWVyRmlsdGVyIiwiem9vbU9mZnNldCIsIk1hdGgiLCJsb2cyIiwiY29weVN0eWxlIiwiZm9yRWFjaCIsIm1heHpvb20iLCJtYXgiLCJtaW56b29tIiwibGF5b3V0IiwiQXJyYXkiLCJpc0FycmF5Iiwic3RvcHMiLCJzdG9wIiwibWVyZ2VMYXllckdyb3VwVmlzaWJpbGl0eSIsImRlZmF1bHRMYXllckdyb3VwIiwiY3VycmVudExheWVyR3JvdXAiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLFFBQVEsR0FBRyx3REFBakI7QUFDQSxJQUFNQyxNQUFNLEdBQUcscUJBQWY7O0FBRU8sU0FBU0MsOEJBQVQsT0FBNEQ7QUFBQSw4QkFBbkJDLFdBQW1CO0FBQUEsTUFBbkJBLFdBQW1CLGlDQUFMLEVBQUs7QUFDakUsU0FBT0EsV0FBVyxDQUFDQyxNQUFaLENBQ0wsVUFBQ0MsSUFBRCxFQUFPQyxLQUFQO0FBQUEsMkNBQ0tELElBREwsNENBRUdDLEtBQUssQ0FBQ0MsSUFGVCxFQUVnQkQsS0FBSyxDQUFDRSxpQkFGdEI7QUFBQSxHQURLLEVBS0wsRUFMSyxDQUFQO0FBT0Q7O0FBRUQsSUFBTUMsUUFBUSxHQUFHLFNBQVhBLFFBQVc7QUFBQSxNQUFFQyxFQUFGLFNBQUVBLEVBQUY7QUFBQSxNQUFNQyxRQUFOLFNBQU1BLFFBQU47QUFBQSxvQ0FBZ0JDLGtCQUFoQjtBQUFBLE1BQWdCQSxrQkFBaEIsc0NBQXFDLEVBQXJDO0FBQUEsbUJBQ1pGLEVBRFksY0FDTkcsTUFBTSxDQUFDQyxJQUFQLENBQVlGLGtCQUFaLEVBQ05HLE1BRE0sQ0FDQyxVQUFBQyxDQUFDO0FBQUEsV0FBSUosa0JBQWtCLENBQUNJLENBQUQsQ0FBdEI7QUFBQSxHQURGLEVBRU5DLElBRk0sR0FHTkMsSUFITSxDQUdELEdBSEMsQ0FETTtBQUFBLENBQWpCO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1DLGVBQWUsR0FBRyx3QkFBUSxpQkFBd0M7QUFBQSxNQUF0Q1QsRUFBc0MsU0FBdENBLEVBQXNDO0FBQUEsTUFBbENDLFFBQWtDLFNBQWxDQSxRQUFrQztB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QUMsQ0FBRCxDQUFKLElBQVdqQixLQUFYO0FBQ0QsV0FMRDtBQU1EO0FBQ0Y7QUFDRixLQXJCRDtBQXVCQSxXQUFPUSxTQUFQO0FBQ0Q7O0FBRUQsU0FBT1QsV0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNtQix5QkFBVCxDQUFtQ0MsaUJBQW5DLEVBQXNEQyxpQkFBdEQsRUFBeUU7QUFDOUUsU0FBTzNELE1BQU0sQ0FBQ0MsSUFBUCxDQUFZeUQsaUJBQVosRUFBK0JuRSxNQUEvQixDQUNMLFVBQUNDLElBQUQsRUFBT29FLEdBQVA7QUFBQSwyQ0FDS3BFLElBREwsR0FFTW1FLGlCQUFpQixDQUFDRSxjQUFsQixDQUFpQ0QsR0FBakMseUNBQTBDQSxHQUExQyxFQUFnREQsaUJBQWlCLENBQUNDLEdBQUQsQ0FBakUsSUFBMEUsRUFGaEY7QUFBQSxHQURLLEVBS0xGLGlCQUxLLENBQVA7QUFPRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC5tZW1vaXplJztcbmltcG9ydCBjbG9uZERlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCc7XG5pbXBvcnQge0RFRkFVTFRfTEFZRVJfR1JPVVBTLCBERUZBVUxUX01BUEJPWF9BUElfVVJMfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5cbmNvbnN0IG1hcFVybFJnID0gL15tYXBib3g6XFwvXFwvc3R5bGVzXFwvWy1hLXowLTldezIsMjU2fVxcL1stYS16MC05XXsyLDI1Nn0vO1xuY29uc3QgaHR0cFJnID0gL14oPz0oaHR0cDp8aHR0cHM6KSkvO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdExheWVyR3JvdXBWaXNpYmlsaXR5KHtsYXllckdyb3VwcyA9IFtdfSkge1xuICByZXR1cm4gbGF5ZXJHcm91cHMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllcikgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbbGF5ZXIuc2x1Z106IGxheWVyLmRlZmF1bHRWaXNpYmlsaXR5XG4gICAgfSksXG4gICAge31cbiAgKTtcbn1cblxuY29uc3QgcmVzb2x2ZXIgPSAoe2lkLCBtYXBTdHlsZSwgdmlzaWJsZUxheWVyR3JvdXBzID0ge319KSA9PlxuICBgJHtpZH06JHtPYmplY3Qua2V5cyh2aXNpYmxlTGF5ZXJHcm91cHMpXG4gICAgLmZpbHRlcihkID0+IHZpc2libGVMYXllckdyb3Vwc1tkXSlcbiAgICAuc29ydCgpXG4gICAgLmpvaW4oJy0nKX1gO1xuXG4vKipcbiAqIEVkaXQgcHJlc2V0IG1hcCBzdHlsZSB0byBrZWVwIG9ubHkgdmlzaWJsZSBsYXllcnNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwU3R5bGUgLSBwcmVzZXQgbWFwIHN0eWxlXG4gKiBAcGFyYW0ge09iamVjdH0gdmlzaWJsZUxheWVyR3JvdXBzIC0gdmlzaWJsZSBsYXllcnMgb2YgdG9wIG1hcFxuICogQHJldHVybnMge09iamVjdH0gdG9wIG1hcCBzdHlsZVxuICovXG5leHBvcnQgY29uc3QgZWRpdFRvcE1hcFN0eWxlID0gbWVtb2l6ZSgoe2lkLCBtYXBTdHlsZSwgdmlzaWJsZUxheWVyR3JvdXBzfSkgPT4ge1xuICBjb25zdCB2aXNpYmxlRmlsdGVycyA9IChtYXBTdHlsZS5sYXllckdyb3VwcyB8fCBbXSlcbiAgICAuZmlsdGVyKGxnID0+IHZpc2libGVMYXllckdyb3Vwc1tsZy5zbHVnXSlcbiAgICAubWFwKGxnID0+IGxnLmZpbHRlcik7XG5cbiAgLy8gaWYgdG9wIG1hcFxuICAvLyBrZWVwIG9ubHkgdmlzaWJsZSBsYXllcnNcbiAgY29uc3QgZmlsdGVyZWRMYXllcnMgPSBtYXBTdHlsZS5zdHlsZS5sYXllcnMuZmlsdGVyKGxheWVyID0+XG4gICAgdmlzaWJsZUZpbHRlcnMuc29tZShtYXRjaCA9PiBtYXRjaChsYXllcikpXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5tYXBTdHlsZS5zdHlsZSxcbiAgICBsYXllcnM6IGZpbHRlcmVkTGF5ZXJzXG4gIH07XG59LCByZXNvbHZlcik7XG5cbi8qKlxuICogRWRpdCBwcmVzZXQgbWFwIHN0eWxlIHRvIGZpbHRlciBvdXQgaW52aXNpYmxlIGxheWVyc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBTdHlsZSAtIHByZXNldCBtYXAgc3R5bGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB2aXNpYmxlTGF5ZXJHcm91cHMgLSB2aXNpYmxlIGxheWVycyBvZiBib3R0b20gbWFwXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBib3R0b20gbWFwIHN0eWxlXG4gKi9cbmV4cG9ydCBjb25zdCBlZGl0Qm90dG9tTWFwU3R5bGUgPSBtZW1vaXplKCh7aWQsIG1hcFN0eWxlLCB2aXNpYmxlTGF5ZXJHcm91cHN9KSA9PiB7XG4gIGNvbnN0IGludmlzaWJsZUZpbHRlcnMgPSAobWFwU3R5bGUubGF5ZXJHcm91cHMgfHwgW10pXG4gICAgLmZpbHRlcihsZyA9PiAhdmlzaWJsZUxheWVyR3JvdXBzW2xnLnNsdWddKVxuICAgIC5tYXAobGcgPT4gbGcuZmlsdGVyKTtcblxuICAvLyBpZiBib3R0b20gbWFwXG4gIC8vIGZpbHRlciBvdXQgaW52aXNpYmxlIGxheWVyc1xuICBjb25zdCBmaWx0ZXJlZExheWVycyA9IG1hcFN0eWxlLnN0eWxlLmxheWVycy5maWx0ZXIobGF5ZXIgPT5cbiAgICBpbnZpc2libGVGaWx0ZXJzLmV2ZXJ5KG1hdGNoID0+ICFtYXRjaChsYXllcikpXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5tYXBTdHlsZS5zdHlsZSxcbiAgICBsYXllcnM6IGZpbHRlcmVkTGF5ZXJzXG4gIH07XG59LCByZXNvbHZlcik7XG5cbi8vIHZhbGlkIHN0eWxlIHVybFxuLy8gbWFwYm94Oi8vc3R5bGVzL3ViZXJkYXRhL2NqZnlsMDNrcDF0dWwyc21mNXYydGJkZDRcbi8vIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzIGFuZCBkYXNoZXMgb25seS5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkU3R5bGVVcmwodXJsKSB7XG4gIHJldHVybiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyAmJiBCb29sZWFuKHVybC5tYXRjaChtYXBVcmxSZykgfHwgdXJsLm1hdGNoKGh0dHBSZykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVEb3dubG9hZFVybChzdHlsZVVybCwgYWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCkge1xuICBpZiAoc3R5bGVVcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgcmV0dXJuIHN0eWxlVXJsO1xuICB9XG5cbiAgLy8gbWFwYm94Oi8vc3R5bGVzL2pja3IvY2poY2wwbHh2MTNkaTJycGZveXRkYmR5alxuICBpZiAoc3R5bGVVcmwuc3RhcnRzV2l0aCgnbWFwYm94Oi8vc3R5bGVzJykpIHtcbiAgICBjb25zdCBzdHlsZUlkID0gc3R5bGVVcmwucmVwbGFjZSgnbWFwYm94Oi8vc3R5bGVzLycsICcnKTtcblxuICAgIC8vIGh0dHBzOi8vYXBpLm1hcGJveC5jb20vc3R5bGVzL3YxL2hlc2hhbjAxMzEvY2pnMWJmdW1vMWN3bTJybHJqeGtpbmZndz9wbHVnaW5OYW1lPUtlcGxlcmdsJmFjY2Vzc190b2tlbj08dG9rZW4+XG4gICAgcmV0dXJuIGAke21hcGJveEFwaVVybCB8fFxuICAgICAgREVGQVVMVF9NQVBCT1hfQVBJX1VSTH0vc3R5bGVzL3YxLyR7c3R5bGVJZH0/cGx1Z2luTmFtZT1LZXBsZXJnbCZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gO1xuICB9XG5cbiAgLy8gc3R5bGUgdXJsIG5vdCByZWNvZ25pemVkXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIHN0YXRpYyBtYXAgaW1hZ2UgZnJvbSBzdHlsZSBVcmwgdG8gYmUgdXNlZCBhcyBpY29uXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbS5zdHlsZVVybFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtLm1hcGJveEFwaUFjY2Vzc1Rva2VuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0ubWFwYm94QXBpVXJsXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW0ubWFwU3RhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYXJhbS5tYXBXXG4gKiBAcGFyYW0ge251bWJlcn0gcGFyYW0ubWFwSFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVJbWFnZUljb24oe1xuICBzdHlsZVVybCxcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcGJveEFwaVVybCA9IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIG1hcFN0YXRlID0ge1xuICAgIGxvbmdpdHVkZTogLTEyMi4zMzkxLFxuICAgIGxhdGl0dWRlOiAzNy43OTIyLFxuICAgIHpvb206IDlcbiAgfSxcbiAgbWFwVyA9IDQwMCxcbiAgbWFwSCA9IDMwMFxufSkge1xuICBjb25zdCBzdHlsZUlkID0gc3R5bGVVcmwucmVwbGFjZSgnbWFwYm94Oi8vc3R5bGVzLycsICcnKTtcblxuICByZXR1cm4gKFxuICAgIGAke21hcGJveEFwaVVybH0vc3R5bGVzL3YxLyR7c3R5bGVJZH0vc3RhdGljL2AgK1xuICAgIGAke21hcFN0YXRlLmxvbmdpdHVkZX0sJHttYXBTdGF0ZS5sYXRpdHVkZX0sJHttYXBTdGF0ZS56b29tfSwwLDAvYCArXG4gICAgYCR7bWFwV314JHttYXBIfWAgK1xuICAgIGA/YWNjZXNzX3Rva2VuPSR7bWFwYm94QXBpQWNjZXNzVG9rZW59JmxvZ289ZmFsc2UmYXR0cmlidXRpb249ZmFsc2VgXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZU1hcFN0eWxlQnlSZXNvbHV0aW9uKG1hcGJveFN0eWxlLCBzY2FsZSkge1xuICBpZiAoc2NhbGUgIT09IDEgJiYgbWFwYm94U3R5bGUpIHtcbiAgICBjb25zdCBsYWJlbExheWVyR3JvdXAgPSBERUZBVUxUX0xBWUVSX0dST1VQUy5maW5kKGxnID0+IGxnLnNsdWcgPT09ICdsYWJlbCcpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7ZmlsdGVyOiBsYWJlbExheWVyRmlsdGVyfSA9IGxhYmVsTGF5ZXJHcm91cDtcbiAgICBjb25zdCB6b29tT2Zmc2V0ID0gTWF0aC5sb2cyKHNjYWxlKTtcblxuICAgIGNvbnN0IGNvcHlTdHlsZSA9IGNsb25kRGVlcChtYXBib3hTdHlsZSk7XG4gICAgKGNvcHlTdHlsZS5sYXllcnMgfHwgW10pLmZvckVhY2goZCA9PiB7XG4gICAgICAvLyBlZGl0IG1pbnpvb20gYW5kIG1heHpvb21cbiAgICAgIGlmIChkLm1heHpvb20pIHtcbiAgICAgICAgZC5tYXh6b29tID0gTWF0aC5tYXgoZC5tYXh6b29tICsgem9vbU9mZnNldCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkLm1pbnpvb20pIHtcbiAgICAgICAgZC5taW56b29tID0gTWF0aC5tYXgoZC5taW56b29tICsgem9vbU9mZnNldCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVkaXQgdGV4dCBzaXplXG4gICAgICBpZiAobGFiZWxMYXllckZpbHRlcihkKSkge1xuICAgICAgICBpZiAoZC5sYXlvdXQgJiYgZC5sYXlvdXRbJ3RleHQtc2l6ZSddICYmIEFycmF5LmlzQXJyYXkoZC5sYXlvdXRbJ3RleHQtc2l6ZSddLnN0b3BzKSkge1xuICAgICAgICAgIGQubGF5b3V0Wyd0ZXh0LXNpemUnXS5zdG9wcy5mb3JFYWNoKHN0b3AgPT4ge1xuICAgICAgICAgICAgLy8gem9vbVxuICAgICAgICAgICAgc3RvcFswXSA9IE1hdGgubWF4KHN0b3BbMF0gKyB6b29tT2Zmc2V0LCAxKTtcbiAgICAgICAgICAgIC8vIHNpemVcbiAgICAgICAgICAgIHN0b3BbMV0gKj0gc2NhbGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb3B5U3R5bGU7XG4gIH1cblxuICByZXR1cm4gbWFwYm94U3R5bGU7XG59XG5cbi8qKlxuICogV2hlbiBzd2l0Y2ggdG8gYSBuZXcgc3R5bGUsIHRyeSB0byBrZWVwIGN1cnJlbnQgbGF5ZXIgZ3JvdXAgdmlzaWJpbGl0eVxuICogYnkgbWVyZ2luZyBkZWZhdWx0IGFuZCBjdXJyZW50XG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdExheWVyR3JvdXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdXJyZW50TGF5ZXJHcm91cFxuICogQHJldHVybiB7T2JqZWN0fSBtZXJnZWRMYXllckdyb3Vwc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckdyb3VwVmlzaWJpbGl0eShkZWZhdWx0TGF5ZXJHcm91cCwgY3VycmVudExheWVyR3JvdXApIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRlZmF1bHRMYXllckdyb3VwKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICAuLi4oY3VycmVudExheWVyR3JvdXAuaGFzT3duUHJvcGVydHkoa2V5KSA/IHtba2V5XTogY3VycmVudExheWVyR3JvdXBba2V5XX0gOiB7fSlcbiAgICB9KSxcbiAgICBkZWZhdWx0TGF5ZXJHcm91cFxuICApO1xufVxuIl19
|
|
214
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9tYXAtc3R5bGUtdXRpbHMvbWFwYm94LWdsLXN0eWxlLWVkaXRvci5qcyJdLCJuYW1lcyI6WyJtYXBVcmxSZyIsImh0dHBSZyIsImdldERlZmF1bHRMYXllckdyb3VwVmlzaWJpbGl0eSIsImxheWVyR3JvdXBzIiwicmVkdWNlIiwiYWNjdSIsImxheWVyIiwic2x1ZyIsImRlZmF1bHRWaXNpYmlsaXR5IiwicmVzb2x2ZXIiLCJpZCIsIm1hcFN0eWxlIiwidmlzaWJsZUxheWVyR3JvdXBzIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImQiLCJzb3J0Iiwiam9pbiIsImVkaXRUb3BNYXBTdHlsZSIsInZpc2libGVGaWx0ZXJzIiwibGciLCJtYXAiLCJmaWx0ZXJlZExheWVycyIsInN0eWxlIiwibGF5ZXJzIiwic29tZSIsIm1hdGNoIiwiZWRpdEJvdHRvbU1hcFN0eWxlIiwic2tldGNoVmFsdWUiLCJpbnZpc2libGVGaWx0ZXJzIiwiZXZlcnkiLCJpc1ZhbGlkU3R5bGVVcmwiLCJ1cmwiLCJCb29sZWFuIiwiZ2V0U3R5bGVEb3dubG9hZFVybCIsInN0eWxlVXJsIiwiYWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJzdGFydHNXaXRoIiwic3R5bGVJZCIsInJlcGxhY2UiLCJERUZBVUxUX01BUEJPWF9BUElfVVJMIiwiZ2V0U3R5bGVJbWFnZUljb24iLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcFN0YXRlIiwibG9uZ2l0dWRlIiwibGF0aXR1ZGUiLCJ6b29tIiwibWFwVyIsIm1hcEgiLCJzY2FsZU1hcFN0eWxlQnlSZXNvbHV0aW9uIiwibWFwYm94U3R5bGUiLCJzY2FsZSIsImxhYmVsTGF5ZXJHcm91cCIsIkRFRkFVTFRfTEFZRVJfR1JPVVBTIiwiZmluZCIsImxhYmVsTGF5ZXJGaWx0ZXIiLCJ6b29tT2Zmc2V0IiwiTWF0aCIsImxvZzIiLCJjb3B5U3R5bGUiLCJmb3JFYWNoIiwibWF4em9vbSIsIm1heCIsIm1pbnpvb20iLCJsYXlvdXQiLCJBcnJheSIsImlzQXJyYXkiLCJzdG9wcyIsInN0b3AiLCJtZXJnZUxheWVyR3JvdXBWaXNpYmlsaXR5IiwiZGVmYXVsdExheWVyR3JvdXAiLCJjdXJyZW50TGF5ZXJHcm91cCIsImtleSIsImhhc093blByb3BlcnR5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsUUFBUSxHQUFHLHdEQUFqQjtBQUNBLElBQU1DLE1BQU0sR0FBRyxxQkFBZjs7QUFFTyxTQUFTQyw4QkFBVCxPQUE0RDtBQUFBLDhCQUFuQkMsV0FBbUI7QUFBQSxNQUFuQkEsV0FBbUIsaUNBQUwsRUFBSztBQUNqRSxTQUFPQSxXQUFXLENBQUNDLE1BQVosQ0FDTCxVQUFDQyxJQUFELEVBQU9DLEtBQVA7QUFBQSwyQ0FDS0QsSUFETCw0Q0FFR0MsS0FBSyxDQUFDQyxJQUZULEVBRWdCRCxLQUFLLENBQUNFLGlCQUZ0QjtBQUFBLEdBREssRUFLTCxFQUxLLENBQVA7QUFPRDs7QUFFRCxJQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBVztBQUFBLE1BQUVDLEVBQUYsU0FBRUEsRUFBRjtBQUFBLE1BQU1DLFFBQU4sU0FBTUEsUUFBTjtBQUFBLG9DQUFnQkMsa0JBQWhCO0FBQUEsTUFBZ0JBLGtCQUFoQixzQ0FBcUMsRUFBckM7QUFBQSxtQkFDWkYsRUFEWSxjQUNORyxNQUFNLENBQUNDLElBQVAsQ0FBWUYsa0JBQVosRUFDTkcsTUFETSxDQUNDLFVBQUFDLENBQUM7QUFBQSxXQUFJSixrQkFBa0IsQ0FBQ0ksQ0FBRCxDQUF0QjtBQUFBLEdBREYsRUFFTkMsSUFGTSxHQUdOQyxJQUhNLENBR0QsR0FIQyxDQURNO0FBQUEsQ0FBakI7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sSUFBTUMsZUFBZSxHQUFHLHdCQUFRLGlCQUF3QztBQUFBLE1BQXRDVCxFQUFzQyxTQUF0Q0EsRUFBc0M7QUFBQSxNQUFsQ0MsUUFBa0Ms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LENBQUMsQ0FBRCxDQUFKLEdBQVVaLFVBQW5CLEVBQStCLENBQS9CLENBQVYsQ0FGMEMsQ0FHMUM7O0FBQ0FZLFlBQUFBLElBQUksQ0FBQyxDQUFELENBQUosSUFBV2pCLEtBQVg7QUFDRCxXQUxEO0FBTUQ7QUFDRjtBQUNGLEtBckJEO0FBdUJBLFdBQU9RLFNBQVA7QUFDRDs7QUFFRCxTQUFPVCxXQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU21CLHlCQUFULENBQW1DQyxpQkFBbkMsRUFBc0RDLGlCQUF0RCxFQUF5RTtBQUM5RSxTQUFPNUQsTUFBTSxDQUFDQyxJQUFQLENBQVkwRCxpQkFBWixFQUErQnBFLE1BQS9CLENBQ0wsVUFBQ0MsSUFBRCxFQUFPcUUsR0FBUDtBQUFBLDJDQUNLckUsSUFETCxHQUVNb0UsaUJBQWlCLENBQUNFLGNBQWxCLENBQWlDRCxHQUFqQyx5Q0FBMENBLEdBQTFDLEVBQWdERCxpQkFBaUIsQ0FBQ0MsR0FBRCxDQUFqRSxJQUEwRSxFQUZoRjtBQUFBLEdBREssRUFLTEYsaUJBTEssQ0FBUDtBQU9EIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoLm1lbW9pemUnO1xuaW1wb3J0IGNsb25kRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcbmltcG9ydCB7REVGQVVMVF9MQVlFUl9HUk9VUFMsIERFRkFVTFRfTUFQQk9YX0FQSV9VUkx9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuY29uc3QgbWFwVXJsUmcgPSAvXm1hcGJveDpcXC9cXC9zdHlsZXNcXC9bLWEtejAtOV17MiwyNTZ9XFwvWy1hLXowLTldezIsMjU2fS87XG5jb25zdCBodHRwUmcgPSAvXig/PShodHRwOnxodHRwczopKS87XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0TGF5ZXJHcm91cFZpc2liaWxpdHkoe2xheWVyR3JvdXBzID0gW119KSB7XG4gIHJldHVybiBsYXllckdyb3Vwcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5zbHVnXTogbGF5ZXIuZGVmYXVsdFZpc2liaWxpdHlcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG5jb25zdCByZXNvbHZlciA9ICh7aWQsIG1hcFN0eWxlLCB2aXNpYmxlTGF5ZXJHcm91cHMgPSB7fX0pID0+XG4gIGAke2lkfToke09iamVjdC5rZXlzKHZpc2libGVMYXllckdyb3VwcylcbiAgICAuZmlsdGVyKGQgPT4gdmlzaWJsZUxheWVyR3JvdXBzW2RdKVxuICAgIC5zb3J0KClcbiAgICAuam9pbignLScpfWA7XG5cbi8qKlxuICogRWRpdCBwcmVzZXQgbWFwIHN0eWxlIHRvIGtlZXAgb25seSB2aXNpYmxlIGxheWVyc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBTdHlsZSAtIHByZXNldCBtYXAgc3R5bGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB2aXNpYmxlTGF5ZXJHcm91cHMgLSB2aXNpYmxlIGxheWVycyBvZiB0b3AgbWFwXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0b3AgbWFwIHN0eWxlXG4gKi9cbmV4cG9ydCBjb25zdCBlZGl0VG9wTWFwU3R5bGUgPSBtZW1vaXplKCh7aWQsIG1hcFN0eWxlLCB2aXNpYmxlTGF5ZXJHcm91cHN9KSA9PiB7XG4gIGNvbnN0IHZpc2libGVGaWx0ZXJzID0gKG1hcFN0eWxlLmxheWVyR3JvdXBzIHx8IFtdKVxuICAgIC5maWx0ZXIobGcgPT4gdmlzaWJsZUxheWVyR3JvdXBzW2xnLnNsdWddKVxuICAgIC5tYXAobGcgPT4gbGcuZmlsdGVyKTtcblxuICAvLyBpZiB0b3AgbWFwXG4gIC8vIGtlZXAgb25seSB2aXNpYmxlIGxheWVyc1xuICBjb25zdCBmaWx0ZXJlZExheWVycyA9IG1hcFN0eWxlLnN0eWxlLmxheWVycy5maWx0ZXIobGF5ZXIgPT5cbiAgICB2aXNpYmxlRmlsdGVycy5zb21lKG1hdGNoID0+IG1hdGNoKGxheWVyKSlcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm1hcFN0eWxlLnN0eWxlLFxuICAgIGxheWVyczogZmlsdGVyZWRMYXllcnNcbiAgfTtcbn0sIHJlc29sdmVyKTtcblxuLyoqXG4gKiBFZGl0IHByZXNldCBtYXAgc3R5bGUgdG8gZmlsdGVyIG91dCBpbnZpc2libGUgbGF5ZXJzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG1hcFN0eWxlIC0gcHJlc2V0IG1hcCBzdHlsZVxuICogQHBhcmFtIHtPYmplY3R9IHZpc2libGVMYXllckdyb3VwcyAtIHZpc2libGUgbGF5ZXJzIG9mIGJvdHRvbSBtYXBcbiAqIEByZXR1cm5zIHtPYmplY3R9IGJvdHRvbSBtYXAgc3R5bGVcbiAqL1xuZXhwb3J0IGNvbnN0IGVkaXRCb3R0b21NYXBTdHlsZSA9IG1lbW9pemUoKHtpZCwgbWFwU3R5bGUsIHZpc2libGVMYXllckdyb3Vwcywgc2tldGNoVmFsdWV9KSA9PiB7XG4gIGNvbnN0IGludmlzaWJsZUZpbHRlcnMgPSAobWFwU3R5bGUubGF5ZXJHcm91cHMgfHwgW10pXG4gICAgLmZpbHRlcihsZyA9PiAhdmlzaWJsZUxheWVyR3JvdXBzW2xnLnNsdWddKVxuICAgIC5tYXAobGcgPT4gbGcuZmlsdGVyKTtcblxuICAvLyBpZiBib3R0b20gbWFwXG4gIC8vIGZpbHRlciBvdXQgaW52aXNpYmxlIGxheWVyc1xuICBjb25zdCBmaWx0ZXJlZExheWVycyA9IG1hcFN0eWxlLnN0eWxlLmxheWVycy5maWx0ZXIobGF5ZXIgPT5cbiAgICBpbnZpc2libGVGaWx0ZXJzLmV2ZXJ5KG1hdGNoID0+ICFtYXRjaChsYXllcikpXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5tYXBTdHlsZS5zdHlsZSxcbiAgICBsYXllcnM6IGZpbHRlcmVkTGF5ZXJzLFxuICAgIHNrZXRjaFZhbHVlXG4gIH07XG59LCByZXNvbHZlcik7XG5cbi8vIHZhbGlkIHN0eWxlIHVybFxuLy8gbWFwYm94Oi8vc3R5bGVzL3ViZXJkYXRhL2NqZnlsMDNrcDF0dWwyc21mNXYydGJkZDRcbi8vIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzIGFuZCBkYXNoZXMgb25seS5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkU3R5bGVVcmwodXJsKSB7XG4gIHJldHVybiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyAmJiBCb29sZWFuKHVybC5tYXRjaChtYXBVcmxSZykgfHwgdXJsLm1hdGNoKGh0dHBSZykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVEb3dubG9hZFVybChzdHlsZVVybCwgYWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCkge1xuICBpZiAoc3R5bGVVcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgcmV0dXJuIHN0eWxlVXJsO1xuICB9XG5cbiAgLy8gbWFwYm94Oi8vc3R5bGVzL2pja3IvY2poY2wwbHh2MTNkaTJycGZveXRkYmR5alxuICBpZiAoc3R5bGVVcmwuc3RhcnRzV2l0aCgnbWFwYm94Oi8vc3R5bGVzJykpIHtcbiAgICBjb25zdCBzdHlsZUlkID0gc3R5bGVVcmwucmVwbGFjZSgnbWFwYm94Oi8vc3R5bGVzLycsICcnKTtcblxuICAgIC8vIGh0dHBzOi8vYXBpLm1hcGJveC5jb20vc3R5bGVzL3YxL2hlc2hhbjAxMzEvY2pnMWJmdW1vMWN3bTJybHJqeGtpbmZndz9wbHVnaW5OYW1lPUtlcGxlcmdsJmFjY2Vzc190b2tlbj08dG9rZW4+XG4gICAgcmV0dXJuIGAke21hcGJveEFwaVVybCB8fFxuICAgICAgREVGQVVMVF9NQVBCT1hfQVBJX1VSTH0vc3R5bGVzL3YxLyR7c3R5bGVJZH0/cGx1Z2luTmFtZT1LZXBsZXJnbCZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gO1xuICB9XG5cbiAgLy8gc3R5bGUgdXJsIG5vdCByZWNvZ25pemVkXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIHN0YXRpYyBtYXAgaW1hZ2UgZnJvbSBzdHlsZSBVcmwgdG8gYmUgdXNlZCBhcyBpY29uXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbS5zdHlsZVVybFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtLm1hcGJveEFwaUFjY2Vzc1Rva2VuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0ubWFwYm94QXBpVXJsXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW0ubWFwU3RhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYXJhbS5tYXBXXG4gKiBAcGFyYW0ge251bWJlcn0gcGFyYW0ubWFwSFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVJbWFnZUljb24oe1xuICBzdHlsZVVybCxcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcGJveEFwaVVybCA9IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIG1hcFN0YXRlID0ge1xuICAgIGxvbmdpdHVkZTogLTEyMi4zMzkxLFxuICAgIGxhdGl0dWRlOiAzNy43OTIyLFxuICAgIHpvb206IDlcbiAgfSxcbiAgbWFwVyA9IDQwMCxcbiAgbWFwSCA9IDMwMFxufSkge1xuICBjb25zdCBzdHlsZUlkID0gc3R5bGVVcmwucmVwbGFjZSgnbWFwYm94Oi8vc3R5bGVzLycsICcnKTtcblxuICByZXR1cm4gKFxuICAgIGAke21hcGJveEFwaVVybH0vc3R5bGVzL3YxLyR7c3R5bGVJZH0vc3RhdGljL2AgK1xuICAgIGAke21hcFN0YXRlLmxvbmdpdHVkZX0sJHttYXBTdGF0ZS5sYXRpdHVkZX0sJHttYXBTdGF0ZS56b29tfSwwLDAvYCArXG4gICAgYCR7bWFwV314JHttYXBIfWAgK1xuICAgIGA/YWNjZXNzX3Rva2VuPSR7bWFwYm94QXBpQWNjZXNzVG9rZW59JmxvZ289ZmFsc2UmYXR0cmlidXRpb249ZmFsc2VgXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZU1hcFN0eWxlQnlSZXNvbHV0aW9uKG1hcGJveFN0eWxlLCBzY2FsZSkge1xuICBpZiAoc2NhbGUgIT09IDEgJiYgbWFwYm94U3R5bGUpIHtcbiAgICBjb25zdCBsYWJlbExheWVyR3JvdXAgPSBERUZBVUxUX0xBWUVSX0dST1VQUy5maW5kKGxnID0+IGxnLnNsdWcgPT09ICdsYWJlbCcpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7ZmlsdGVyOiBsYWJlbExheWVyRmlsdGVyfSA9IGxhYmVsTGF5ZXJHcm91cDtcbiAgICBjb25zdCB6b29tT2Zmc2V0ID0gTWF0aC5sb2cyKHNjYWxlKTtcblxuICAgIGNvbnN0IGNvcHlTdHlsZSA9IGNsb25kRGVlcChtYXBib3hTdHlsZSk7XG4gICAgKGNvcHlTdHlsZS5sYXllcnMgfHwgW10pLmZvckVhY2goZCA9PiB7XG4gICAgICAvLyBlZGl0IG1pbnpvb20gYW5kIG1heHpvb21cbiAgICAgIGlmIChkLm1heHpvb20pIHtcbiAgICAgICAgZC5tYXh6b29tID0gTWF0aC5tYXgoZC5tYXh6b29tICsgem9vbU9mZnNldCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkLm1pbnpvb20pIHtcbiAgICAgICAgZC5taW56b29tID0gTWF0aC5tYXgoZC5taW56b29tICsgem9vbU9mZnNldCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVkaXQgdGV4dCBzaXplXG4gICAgICBpZiAobGFiZWxMYXllckZpbHRlcihkKSkge1xuICAgICAgICBpZiAoZC5sYXlvdXQgJiYgZC5sYXlvdXRbJ3RleHQtc2l6ZSddICYmIEFycmF5LmlzQXJyYXkoZC5sYXlvdXRbJ3RleHQtc2l6ZSddLnN0b3BzKSkge1xuICAgICAgICAgIGQubGF5b3V0Wyd0ZXh0LXNpemUnXS5zdG9wcy5mb3JFYWNoKHN0b3AgPT4ge1xuICAgICAgICAgICAgLy8gem9vbVxuICAgICAgICAgICAgc3RvcFswXSA9IE1hdGgubWF4KHN0b3BbMF0gKyB6b29tT2Zmc2V0LCAxKTtcbiAgICAgICAgICAgIC8vIHNpemVcbiAgICAgICAgICAgIHN0b3BbMV0gKj0gc2NhbGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb3B5U3R5bGU7XG4gIH1cblxuICByZXR1cm4gbWFwYm94U3R5bGU7XG59XG5cbi8qKlxuICogV2hlbiBzd2l0Y2ggdG8gYSBuZXcgc3R5bGUsIHRyeSB0byBrZWVwIGN1cnJlbnQgbGF5ZXIgZ3JvdXAgdmlzaWJpbGl0eVxuICogYnkgbWVyZ2luZyBkZWZhdWx0IGFuZCBjdXJyZW50XG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdExheWVyR3JvdXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdXJyZW50TGF5ZXJHcm91cFxuICogQHJldHVybiB7T2JqZWN0fSBtZXJnZWRMYXllckdyb3Vwc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckdyb3VwVmlzaWJpbGl0eShkZWZhdWx0TGF5ZXJHcm91cCwgY3VycmVudExheWVyR3JvdXApIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRlZmF1bHRMYXllckdyb3VwKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICAuLi4oY3VycmVudExheWVyR3JvdXAuaGFzT3duUHJvcGVydHkoa2V5KSA/IHtba2V5XTogY3VycmVudExheWVyR3JvdXBba2V5XX0gOiB7fSlcbiAgICB9KSxcbiAgICBkZWZhdWx0TGF5ZXJHcm91cFxuICApO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@carto/kepler.gl",
|
|
3
3
|
"author": "CARTO",
|
|
4
4
|
"homepage": "https://github.com/CartoDB/carto-kepler#readme",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.70-alpha.hackathon-3dtiles.10",
|
|
6
6
|
"description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"main": "dist/index.js",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"web": "(yarn && yarn install:web && yarn start:web)",
|
|
60
60
|
"deploy": "yarn install:web && (cd website && yarn build)",
|
|
61
61
|
"clean": "rm -rf node_modules examples/**/node_modules website/node_modules",
|
|
62
|
-
"release:patch": "git
|
|
62
|
+
"release:patch": "git add CHANGELOG.md && git commit -m 'updated CHANGELOG.md' && npm version patch && git push origin && git push origin --tags"
|
|
63
63
|
},
|
|
64
64
|
"files": [
|
|
65
65
|
"dist",
|
|
@@ -251,7 +251,6 @@
|
|
|
251
251
|
"@loaders.gl/gltf": "^3.1.5",
|
|
252
252
|
"@loaders.gl/json": "^3.1.5",
|
|
253
253
|
"@loaders.gl/loader-utils": "^3.1.5",
|
|
254
|
-
"@loaders.gl/polyfills": "^3.1.5",
|
|
255
254
|
"@luma.gl/constants": "^8.5.10",
|
|
256
255
|
"@luma.gl/core": "^8.5.10",
|
|
257
256
|
"react": ">=16.3",
|
|
@@ -278,4 +277,4 @@
|
|
|
278
277
|
"volta": {
|
|
279
278
|
"node": "12.19.0"
|
|
280
279
|
}
|
|
281
|
-
}
|
|
280
|
+
}
|
|
@@ -95,6 +95,14 @@ export function mapStyleChange(
|
|
|
95
95
|
styleType: MapStyleChangeUpdaterAction['payload']
|
|
96
96
|
): Merge<MapStyleChangeUpdaterAction, {type: ActionTypes.MAP_STYLE_CHANGE}>;
|
|
97
97
|
|
|
98
|
+
/** SET_TILES_3D_SKETCH_VALUE */
|
|
99
|
+
export type SetTiles3dSketchValueActionUpdaterAction = {
|
|
100
|
+
payload: {inkStrength: number; hue: number; hueSaturation: number; dotScreen: boolean};
|
|
101
|
+
};
|
|
102
|
+
export function setTiles3dSketchValue(
|
|
103
|
+
sketchValue: SetTiles3dSketchValueActionUpdaterAction['payload']
|
|
104
|
+
): Merge<SetTiles3dSketchValueActionUpdaterAction, {type: ActionTypes.SET_TILES_3D_SKETCH_VALUE}>;
|
|
105
|
+
|
|
98
106
|
/** LOAD_CUSTOM_MAP_STYLE */
|
|
99
107
|
export type LoadCustomMapStyleUpdaterAction = {
|
|
100
108
|
payload: {
|
|
@@ -97,6 +97,22 @@ export const loadMapStyleErr = createAction(ActionTypes.LOAD_MAP_STYLE_ERR, erro
|
|
|
97
97
|
*/
|
|
98
98
|
export const mapStyleChange = createAction(ActionTypes.MAP_STYLE_CHANGE, styleType => styleType);
|
|
99
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Set Tiles3D sketch value
|
|
102
|
+
* @memberof mapStyleActions
|
|
103
|
+
* @param sketchValue
|
|
104
|
+
* @param sketchValue.inkStrength - 0.01 - 1.0
|
|
105
|
+
* @param sketchValue.hue - 0.01 - 1.0
|
|
106
|
+
* @param sketchValue.hueSaturation - 0.01 - 1.0
|
|
107
|
+
* @param sketchValue.dotScreen - true | false
|
|
108
|
+
* @type {typeof import('./map-style-actions').setTiles3dSketchValue}
|
|
109
|
+
* @public
|
|
110
|
+
*/
|
|
111
|
+
export const setTiles3dSketchValue = createAction(
|
|
112
|
+
ActionTypes.SET_TILES_3D_SKETCH_VALUE,
|
|
113
|
+
sketchValue => sketchValue
|
|
114
|
+
);
|
|
115
|
+
|
|
100
116
|
/**
|
|
101
117
|
* Callback when a custom map style object is received
|
|
102
118
|
* @memberof mapStyleActions
|
|
@@ -24,7 +24,15 @@ import PropTypes from 'prop-types';
|
|
|
24
24
|
import MapboxGLMap from 'react-map-gl';
|
|
25
25
|
import DeckGL from '@deck.gl/react';
|
|
26
26
|
import {createSelector} from 'reselect';
|
|
27
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
OPERATION,
|
|
29
|
+
Layer,
|
|
30
|
+
AmbientLight,
|
|
31
|
+
LightingEffect,
|
|
32
|
+
PostProcessEffect,
|
|
33
|
+
_SunLight
|
|
34
|
+
} from '@deck.gl/core';
|
|
35
|
+
import {brightnessContrast, hueSaturation, ink, dotScreen, vibrance} from '@luma.gl/shadertools';
|
|
28
36
|
import {SolidPolygonLayer} from '@deck.gl/layers';
|
|
29
37
|
import {TileLayer} from '@deck.gl/geo-layers';
|
|
30
38
|
import {errorNotification} from 'utils/notifications-utils';
|
|
@@ -54,6 +62,68 @@ import {
|
|
|
54
62
|
import {observeDimensions, unobserveDimensions} from '../utils/observe-dimensions';
|
|
55
63
|
import {LOCALE_CODES} from 'localization/locales';
|
|
56
64
|
|
|
65
|
+
// 3D tiles
|
|
66
|
+
import {_TerrainExtension as TerrainExtension} from '@deck.gl/extensions';
|
|
67
|
+
import {Tile3DLayer} from '@deck.gl/geo-layers';
|
|
68
|
+
|
|
69
|
+
const GOOGLE_MAPS_API_KEY = 'AIzaSyCpvQymc5wjSYIsxy3RV1widM3p3h78CAk';
|
|
70
|
+
|
|
71
|
+
class CustomTile3DLayer extends Tile3DLayer {
|
|
72
|
+
static layerName = 'CustomTile3DLayer';
|
|
73
|
+
|
|
74
|
+
filterSubLayer({layer, viewport}) {
|
|
75
|
+
// Do not show tiles which are many layers too low in resolution (avoids artifacts)
|
|
76
|
+
const lodZoom = 22 - Math.log2(layer.props.tile.lodMetricValue);
|
|
77
|
+
return lodZoom > viewport?.zoom;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
let h = 0;
|
|
82
|
+
const tiles3d = new CustomTile3DLayer({
|
|
83
|
+
id: 'google-3d-tiles',
|
|
84
|
+
data: 'https://tile.googleapis.com/v1/3dtiles/root.json',
|
|
85
|
+
onTilesetLoad: tileset3d => {
|
|
86
|
+
tileset3d.options.maximumScreenSpaceError = 5;
|
|
87
|
+
tileset3d._onTileLoadError = () => {};
|
|
88
|
+
tileset3d.options.onTraversalComplete = selectedTiles => {
|
|
89
|
+
let minLod = Infinity;
|
|
90
|
+
for (const {lodMetricValue} of selectedTiles) {
|
|
91
|
+
if (lodMetricValue < minLod) minLod = lodMetricValue;
|
|
92
|
+
}
|
|
93
|
+
const filtered = selectedTiles.filter(t => t.lodMetricValue < 4 * minLod);
|
|
94
|
+
|
|
95
|
+
// Hacky way to obtain height above sea level to improve controls
|
|
96
|
+
if (filtered.length) {
|
|
97
|
+
h = filtered.map(t => t.boundingBox[0][2]).reduce((a, n) => a + n) / filtered.length;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return selectedTiles;
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
loadOptions: {
|
|
104
|
+
fetch: {headers: {'X-GOOG-API-KEY': GOOGLE_MAPS_API_KEY}}
|
|
105
|
+
},
|
|
106
|
+
// @ts-ignore
|
|
107
|
+
operation: 'terrain+draw' // Required to enable draping of other layers
|
|
108
|
+
});
|
|
109
|
+
const terrainExtension = new TerrainExtension();
|
|
110
|
+
|
|
111
|
+
// Effects
|
|
112
|
+
const ambientLight = new AmbientLight({color: [255, 255, 255], intensity: 1});
|
|
113
|
+
const sunLight = new _SunLight({
|
|
114
|
+
timestamp: 1683869915777,
|
|
115
|
+
color: [255, 255, 255],
|
|
116
|
+
intensity: 1,
|
|
117
|
+
_shadow: true
|
|
118
|
+
});
|
|
119
|
+
const lightingEffect = new LightingEffect({
|
|
120
|
+
ambientLight,
|
|
121
|
+
sunLight
|
|
122
|
+
});
|
|
123
|
+
lightingEffect.shadowColor = [0, 0, 0, 0];
|
|
124
|
+
|
|
125
|
+
const vibranceEffect = new PostProcessEffect(vibrance, {amount: 1});
|
|
126
|
+
|
|
57
127
|
// Performance debugging
|
|
58
128
|
import {createTracker, createLayerUpdateTracker, renderPerformanceStats} from './performance';
|
|
59
129
|
const trackers = {};
|
|
@@ -130,6 +200,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
130
200
|
mapState: PropTypes.object.isRequired,
|
|
131
201
|
mapControls: PropTypes.object.isRequired,
|
|
132
202
|
mapStyle: PropTypes.object.isRequired,
|
|
203
|
+
sketchValue: PropTypes.object,
|
|
133
204
|
mapboxApiAccessToken: PropTypes.string.isRequired,
|
|
134
205
|
mapboxApiUrl: PropTypes.string,
|
|
135
206
|
visStateActions: PropTypes.object.isRequired,
|
|
@@ -339,6 +410,42 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
339
410
|
return screenCoord && {x: screenCoord[0], y: screenCoord[1]};
|
|
340
411
|
}
|
|
341
412
|
|
|
413
|
+
_getEffectsValues(mapStyle) {
|
|
414
|
+
const inkStrength = mapStyle.sketchValue?.inkStrength || 0.2;
|
|
415
|
+
const hue = mapStyle.sketchValue?.hue || 0;
|
|
416
|
+
const hueValueSaturation = mapStyle.sketchValue?.hueSaturation || 0.3;
|
|
417
|
+
const inkEffect = new PostProcessEffect(ink, {strength: inkStrength});
|
|
418
|
+
const hueSaturationEffect = new PostProcessEffect(hueSaturation, {
|
|
419
|
+
hue,
|
|
420
|
+
saturation: hueValueSaturation
|
|
421
|
+
});
|
|
422
|
+
const allEffects = [lightingEffect, hueSaturationEffect, vibranceEffect, inkEffect];
|
|
423
|
+
|
|
424
|
+
const dotScreenValue = mapStyle.sketchValue?.dotScreen || false;
|
|
425
|
+
if (dotScreenValue) {
|
|
426
|
+
const dotScreenEffect = new PostProcessEffect(dotScreen, {
|
|
427
|
+
centerX: 0,
|
|
428
|
+
centerY: 0,
|
|
429
|
+
angle: 0,
|
|
430
|
+
size: 1
|
|
431
|
+
});
|
|
432
|
+
const brightnessContrastEffect = new PostProcessEffect(brightnessContrast, {
|
|
433
|
+
contrast: 0.4,
|
|
434
|
+
brightness: 0.1
|
|
435
|
+
});
|
|
436
|
+
allEffects.push(dotScreenEffect);
|
|
437
|
+
allEffects.push(brightnessContrastEffect);
|
|
438
|
+
} else {
|
|
439
|
+
const brightnessContrastEffect = new PostProcessEffect(brightnessContrast, {
|
|
440
|
+
contrast: 0,
|
|
441
|
+
brightness: 0.2
|
|
442
|
+
});
|
|
443
|
+
allEffects.push(brightnessContrastEffect);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return allEffects;
|
|
447
|
+
}
|
|
448
|
+
|
|
342
449
|
_renderDeckOverlay(layersForDeck) {
|
|
343
450
|
const {
|
|
344
451
|
mapState,
|
|
@@ -404,6 +511,19 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
404
511
|
);
|
|
405
512
|
}
|
|
406
513
|
|
|
514
|
+
let effects = [];
|
|
515
|
+
if (mapStyle.bottomMapStyle?.type === 'gmaps_3d') {
|
|
516
|
+
// Inject 3D tiles when map style is Voyager without layers
|
|
517
|
+
deckGlLayers = deckGlLayers
|
|
518
|
+
.filter(l => Boolean(l && l.clone))
|
|
519
|
+
.map(l => l.clone({extensions: [...l.props.extensions, terrainExtension]}));
|
|
520
|
+
deckGlLayers.push(tiles3d.clone());
|
|
521
|
+
|
|
522
|
+
if (mapStyle.styleType === 'google-3d-sketch') {
|
|
523
|
+
effects = this._getEffectsValues(mapStyle);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
|
|
407
527
|
// Limit renders
|
|
408
528
|
const hasRendered = this._hasRendered;
|
|
409
529
|
const resetHasRendered = () => (hasRendered.current = false);
|
|
@@ -412,22 +532,26 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
412
532
|
controller={true}
|
|
413
533
|
{...this.props.deckGlProps}
|
|
414
534
|
viewState={mapState}
|
|
415
|
-
onViewStateChange={({viewState}) => {
|
|
535
|
+
onViewStateChange={({viewState, interactionState}) => {
|
|
416
536
|
// Limit updates (prevents freezes when dev tools open)
|
|
417
537
|
if (!hasRendered.current && viewState.width > 1 && viewState.height > 1) {
|
|
418
538
|
hasRendered.current = true;
|
|
419
|
-
this._onViewportChange(viewState);
|
|
539
|
+
this._onViewportChange(viewState, interactionState);
|
|
420
540
|
}
|
|
421
541
|
}}
|
|
422
542
|
id="default-deckgl-overlay"
|
|
423
543
|
layers={deckGlLayers}
|
|
544
|
+
effects={effects}
|
|
424
545
|
onBeforeRender={opts => {
|
|
425
546
|
resetHasRendered();
|
|
426
547
|
this._onBeforeRender(opts);
|
|
427
548
|
}}
|
|
428
549
|
onHover={visStateActions.onLayerHover}
|
|
429
550
|
onClick={visStateActions.onLayerClick}
|
|
430
|
-
onError={
|
|
551
|
+
onError={e => {
|
|
552
|
+
debugger;
|
|
553
|
+
this._onDeckError(e);
|
|
554
|
+
}}
|
|
431
555
|
ref={comp => {
|
|
432
556
|
if (comp && comp.deck && comp.deck !== this._deck) {
|
|
433
557
|
this._deck = comp.deck;
|
|
@@ -469,16 +593,20 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
469
593
|
}
|
|
470
594
|
}
|
|
471
595
|
|
|
472
|
-
_onViewportChange = viewState => {
|
|
596
|
+
_onViewportChange = (viewState, interactionState) => {
|
|
473
597
|
trackers.viewportChangeCount?.increment();
|
|
598
|
+
|
|
474
599
|
const {width, height, ...restViewState} = viewState;
|
|
475
600
|
const {primary, isExport} = this.props;
|
|
476
601
|
// react-map-gl sends 0,0 dimensions during initialization
|
|
477
602
|
// after we have received proper dimensions from observeDimensions
|
|
478
603
|
const next = {
|
|
479
604
|
...(width > 0 && height > 0 ? viewState : restViewState),
|
|
605
|
+
|
|
606
|
+
// Auto-update the camera height according to 3D tiles, except when transitioning
|
|
607
|
+
...(interactionState && !interactionState.inTransition && {position: [0, 0, h]})
|
|
480
608
|
// enabling transition in two maps may lead to endless update loops
|
|
481
|
-
transitionDuration: primary ? TRANSITION_DURATION : 0
|
|
609
|
+
// transitionDuration: primary ? TRANSITION_DURATION : 0 // Disable for 3D tiles transitions
|
|
482
610
|
};
|
|
483
611
|
if (typeof this.props.onViewStateChange === 'function') {
|
|
484
612
|
this.props.onViewStateChange(next);
|
|
@@ -501,6 +629,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
501
629
|
mapState,
|
|
502
630
|
mapStyle,
|
|
503
631
|
mapStateActions,
|
|
632
|
+
sketchValue,
|
|
504
633
|
layers,
|
|
505
634
|
MapComponent,
|
|
506
635
|
datasets,
|
|
@@ -536,6 +665,8 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
536
665
|
const isSplit = Boolean(mapState.isSplit);
|
|
537
666
|
const mousePosition = this._mousePosition;
|
|
538
667
|
|
|
668
|
+
const needsBasemap = mapStyle.bottomMapStyle.type !== 'gmaps_3d';
|
|
669
|
+
|
|
539
670
|
return (
|
|
540
671
|
<>
|
|
541
672
|
<MapControl
|
|
@@ -562,41 +693,49 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
562
693
|
onSetLocale={uiStateActions.setLocale}
|
|
563
694
|
onToggleEditorVisibility={visStateActions.toggleEditorVisibility}
|
|
564
695
|
/>
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
{PERF_DEBUG && renderPerformanceStats()}
|
|
579
|
-
{this._renderDeckOverlay(layersForDeck)}
|
|
580
|
-
{this._renderMapboxOverlays()}
|
|
581
|
-
<Editor
|
|
582
|
-
index={index}
|
|
583
|
-
datasets={datasets}
|
|
584
|
-
editor={editor}
|
|
585
|
-
filters={this.polygonFilters(this.props)}
|
|
586
|
-
isEnabled={isEdit}
|
|
587
|
-
layers={layers}
|
|
588
|
-
layersToRender={layersToRender}
|
|
589
|
-
onDeleteFeature={visStateActions.deleteFeature}
|
|
590
|
-
onSelect={visStateActions.setSelectedFeature}
|
|
591
|
-
onUpdate={visStateActions.setFeatures}
|
|
592
|
-
onTogglePolygonFilter={visStateActions.setPolygonFilterLayer}
|
|
593
|
-
style={{
|
|
594
|
-
pointerEvents: isEdit ? 'all' : 'none',
|
|
595
|
-
position: 'absolute',
|
|
596
|
-
display: editor.visible ? 'block' : 'none'
|
|
696
|
+
{needsBasemap ? (
|
|
697
|
+
<MapComponent
|
|
698
|
+
{...mapProps}
|
|
699
|
+
key="bottom"
|
|
700
|
+
ref={this._setMapboxMap}
|
|
701
|
+
mapStyle={mapStyle.bottomMapStyle}
|
|
702
|
+
sketchValue={sketchValue}
|
|
703
|
+
getCursor={this.props.hoverInfo ? () => 'pointer' : undefined}
|
|
704
|
+
onMouseMove={evt => {
|
|
705
|
+
// Sending mouse move updates via Redux is expensive. Store
|
|
706
|
+
// locally and rely on deck.gl to drive render updates
|
|
707
|
+
// See Builder: features/builder/ui/KeplerGl/MapContainer/MapContainer.tsx
|
|
708
|
+
mousePosition.current = {mousePosition: evt.point};
|
|
597
709
|
}}
|
|
598
|
-
|
|
599
|
-
|
|
710
|
+
>
|
|
711
|
+
{PERF_DEBUG && renderPerformanceStats()}
|
|
712
|
+
{this._renderDeckOverlay(layersForDeck)}
|
|
713
|
+
{this._renderMapboxOverlays()}
|
|
714
|
+
<Editor
|
|
715
|
+
index={index}
|
|
716
|
+
datasets={datasets}
|
|
717
|
+
editor={editor}
|
|
718
|
+
filters={this.polygonFilters(this.props)}
|
|
719
|
+
isEnabled={isEdit}
|
|
720
|
+
layers={layers}
|
|
721
|
+
layersToRender={layersToRender}
|
|
722
|
+
onDeleteFeature={visStateActions.deleteFeature}
|
|
723
|
+
onSelect={visStateActions.setSelectedFeature}
|
|
724
|
+
onUpdate={visStateActions.setFeatures}
|
|
725
|
+
onTogglePolygonFilter={visStateActions.setPolygonFilterLayer}
|
|
726
|
+
style={{
|
|
727
|
+
pointerEvents: isEdit ? 'all' : 'none',
|
|
728
|
+
position: 'absolute',
|
|
729
|
+
display: editor.visible ? 'block' : 'none'
|
|
730
|
+
}}
|
|
731
|
+
/>
|
|
732
|
+
</MapComponent>
|
|
733
|
+
) : (
|
|
734
|
+
<>
|
|
735
|
+
{PERF_DEBUG && renderPerformanceStats()}
|
|
736
|
+
{this._renderDeckOverlay(layersForDeck)}
|
|
737
|
+
</>
|
|
738
|
+
)}
|
|
600
739
|
{mapStyle.topMapStyle || hasGeocoderLayer ? (
|
|
601
740
|
<div style={MAP_STYLE.top}>
|
|
602
741
|
<MapComponent {...mapProps} key="top" mapStyle={mapStyle.topMapStyle}>
|
|
@@ -47,6 +47,7 @@ function MapManagerFactory(MapStyleSelector, LayerGroupSelector, ColorSelector)
|
|
|
47
47
|
|
|
48
48
|
buildingColorSelector = props => props.mapStyle.threeDBuildingColor;
|
|
49
49
|
setColorSelector = props => props.mapStyleActions.set3dBuildingColor;
|
|
50
|
+
setTiles3dSketchValue = props => props.mapStyleActions.setTiles3dSketchValue;
|
|
50
51
|
|
|
51
52
|
_toggleSelecting = () => {
|
|
52
53
|
this.setState({isSelecting: !this.state.isSelecting});
|
|
@@ -123,6 +123,7 @@ const ActionTypes = {
|
|
|
123
123
|
MAP_CONFIG_CHANGE: `${ACTION_PREFIX}MAP_CONFIG_CHANGE`,
|
|
124
124
|
SET_DEFAULT_MAP_STYLE: `${ACTION_PREFIX}SET_DEFAULT_MAP_STYLE`,
|
|
125
125
|
MAP_STYLE_CHANGE: `${ACTION_PREFIX}MAP_STYLE_CHANGE`,
|
|
126
|
+
SET_TILES_3D_SKETCH_VALUE: `${ACTION_PREFIX}SET_TILES_3D_SKETCH_VALUE`,
|
|
126
127
|
LOAD_MAP_STYLES: `${ACTION_PREFIX}LOAD_MAP_STYLES`,
|
|
127
128
|
LOAD_MAP_STYLE_ERR: `${ACTION_PREFIX}LOAD_MAP_STYLE_ERR`,
|
|
128
129
|
INPUT_MAP_STYLE: `${ACTION_PREFIX}INPUT_MAP_STYLE`,
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
19
|
// THE SOFTWARE.
|
|
20
20
|
|
|
21
|
-
import '@loaders.gl/polyfills';
|
|
22
21
|
import {parseInBatches} from '@loaders.gl/core';
|
|
23
22
|
import {JSONLoader, _JSONPath} from '@loaders.gl/json';
|
|
24
23
|
import {CSVLoader} from '@loaders.gl/csv';
|
|
@@ -51,6 +51,7 @@ export type MapStyle = {
|
|
|
51
51
|
inputStyle: InputStyle;
|
|
52
52
|
threeDBuildingColor: RGBColor;
|
|
53
53
|
custom3DBuildingColor: boolean;
|
|
54
|
+
sketchValue: {inkStrength: number; hue: number; hueSaturation: number; dotScreen: boolean};
|
|
54
55
|
};
|
|
55
56
|
|
|
56
57
|
export const INITIAL_MAP_STYLE: MapStyle;
|
|
@@ -64,6 +65,7 @@ export function loadMapStyleErrUpdater(state: MapStyle, action: MapStyleActions.
|
|
|
64
65
|
export function mapStyleChangeUpdater(state: MapStyle, action: MapStyleActions.MapStyleChangeUpdaterAction): MapStyle;
|
|
65
66
|
export function loadCustomMapStyleUpdater(state: MapStyle, action: MapStyleActions.LoadCustomMapStyleUpdaterAction): MapStyle;
|
|
66
67
|
export function set3dBuildingColorUpdater(state: MapStyle, action: MapStyleActions.Set3dBuildingColorUpdaterAction): MapStyle;
|
|
68
|
+
export function setTiles3dSketchValueUpdater(state: MapStyle, action: MapStyleActions.SetTiles3dSketchValueActionUpdaterAction): MapStyle;
|
|
67
69
|
|
|
68
70
|
export function receiveMapConfigUpdater(state: MapStyle, action: {
|
|
69
71
|
type?: ActionTypes.RECEIVE_MAP_CONFIG;
|
|
@@ -118,6 +118,7 @@ const mapStyleUpdaters = null;
|
|
|
118
118
|
* @memberof mapStyleUpdaters
|
|
119
119
|
* @constant
|
|
120
120
|
* @property styleType - Default: `'dark'`
|
|
121
|
+
* @property sketchValue - Default: {inkStrength: 0.2; hue: 0; hueSaturation: 0.3; dotScreen: false};
|
|
121
122
|
* @property visibleLayerGroups - Default: `{}`
|
|
122
123
|
* @property topLayerGroups - Default: `{}`
|
|
123
124
|
* @property mapStyles - mapping from style key to style object
|
|
@@ -138,9 +139,16 @@ export const INITIAL_MAP_STYLE = getDefaultState();
|
|
|
138
139
|
* @param {Object} visibleLayerGroups - visible layers of bottom map
|
|
139
140
|
* @param {Object} topLayerGroups - visible layers of top map
|
|
140
141
|
* @param {Object} mapStyles - a dictionary of all map styles
|
|
142
|
+
* @param {Object} sketchValue - current sketch value
|
|
141
143
|
* @returns {Object} bottomMapStyle | topMapStyle | isRaster
|
|
142
144
|
*/
|
|
143
|
-
export function getMapStyles({
|
|
145
|
+
export function getMapStyles({
|
|
146
|
+
styleType,
|
|
147
|
+
visibleLayerGroups,
|
|
148
|
+
topLayerGroups,
|
|
149
|
+
mapStyles,
|
|
150
|
+
sketchValue
|
|
151
|
+
}) {
|
|
144
152
|
const mapStyle = mapStyles[styleType];
|
|
145
153
|
|
|
146
154
|
// style might not be loaded yet
|
|
@@ -155,7 +163,8 @@ export function getMapStyles({styleType, visibleLayerGroups, topLayerGroups, map
|
|
|
155
163
|
: editBottomMapStyle({
|
|
156
164
|
id: styleType,
|
|
157
165
|
mapStyle,
|
|
158
|
-
visibleLayerGroups
|
|
166
|
+
visibleLayerGroups,
|
|
167
|
+
sketchValue
|
|
159
168
|
});
|
|
160
169
|
|
|
161
170
|
const hasTopLayer = editable && Object.values(topLayerGroups).some(v => v);
|
|
@@ -248,13 +257,32 @@ export const mapConfigChangeUpdater = (state, action) => ({
|
|
|
248
257
|
})
|
|
249
258
|
});
|
|
250
259
|
|
|
260
|
+
/**
|
|
261
|
+
* Updates Tiles 3D Sketch value
|
|
262
|
+
* @memberof mapStyleUpdaters
|
|
263
|
+
* @type {typeof import('./map-style-updaters').setTiles3dSketchValueUpdater}
|
|
264
|
+
*/
|
|
265
|
+
export const setTiles3dSketchValueUpdater = (state, {payload: sketchValue}) => {
|
|
266
|
+
const newState = {
|
|
267
|
+
...state,
|
|
268
|
+
sketchValue
|
|
269
|
+
};
|
|
270
|
+
return {
|
|
271
|
+
...newState,
|
|
272
|
+
...getMapStyles({
|
|
273
|
+
...state,
|
|
274
|
+
sketchValue
|
|
275
|
+
})
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
|
|
251
279
|
/**
|
|
252
280
|
* Change to another map style. The selected style should already been loaded into `mapStyle.mapStyles`
|
|
253
281
|
* @memberof mapStyleUpdaters
|
|
254
282
|
* @type {typeof import('./map-style-updaters').mapStyleChangeUpdater}
|
|
255
283
|
* @public
|
|
256
284
|
*/
|
|
257
|
-
export const mapStyleChangeUpdater = (state, {payload: styleType}) => {
|
|
285
|
+
export const mapStyleChangeUpdater = (state, {payload: styleType, sketchValue}) => {
|
|
258
286
|
if (!state.mapStyles[styleType]) {
|
|
259
287
|
// we might not have received the style yet
|
|
260
288
|
return state;
|
|
@@ -273,12 +301,14 @@ export const mapStyleChangeUpdater = (state, {payload: styleType}) => {
|
|
|
273
301
|
return {
|
|
274
302
|
...state,
|
|
275
303
|
styleType,
|
|
304
|
+
sketchValue,
|
|
276
305
|
visibleLayerGroups,
|
|
277
306
|
threeDBuildingColor,
|
|
278
307
|
...getMapStyles({
|
|
279
308
|
...state,
|
|
280
309
|
visibleLayerGroups,
|
|
281
|
-
styleType
|
|
310
|
+
styleType,
|
|
311
|
+
sketchValue
|
|
282
312
|
})
|
|
283
313
|
};
|
|
284
314
|
};
|
|
@@ -310,7 +340,6 @@ export const loadMapStylesUpdater = (state, action) => {
|
|
|
310
340
|
...addLayerGroups
|
|
311
341
|
}
|
|
312
342
|
};
|
|
313
|
-
|
|
314
343
|
return newStyles[state.styleType]
|
|
315
344
|
? mapStyleChangeUpdater(newState, {payload: state.styleType})
|
|
316
345
|
: newState;
|
|
@@ -31,6 +31,7 @@ const actionHandler = {
|
|
|
31
31
|
[ActionTypes.INPUT_MAP_STYLE]: mapStyleUpdaters.inputMapStyleUpdater,
|
|
32
32
|
[ActionTypes.MAP_CONFIG_CHANGE]: mapStyleUpdaters.mapConfigChangeUpdater,
|
|
33
33
|
[ActionTypes.MAP_STYLE_CHANGE]: mapStyleUpdaters.mapStyleChangeUpdater,
|
|
34
|
+
[ActionTypes.SET_TILES_3D_SKETCH_VALUE]: mapStyleUpdaters.setTiles3dSketchValueUpdater,
|
|
34
35
|
[ActionTypes.REQUEST_MAP_STYLES]: mapStyleUpdaters.requestMapStylesUpdater,
|
|
35
36
|
[ActionTypes.LOAD_MAP_STYLES]: mapStyleUpdaters.loadMapStylesUpdater,
|
|
36
37
|
[ActionTypes.LOAD_MAP_STYLE_ERR]: mapStyleUpdaters.loadMapStyleErrUpdater,
|
|
@@ -72,7 +72,7 @@ export const editTopMapStyle = memoize(({id, mapStyle, visibleLayerGroups}) => {
|
|
|
72
72
|
* @param {Object} visibleLayerGroups - visible layers of bottom map
|
|
73
73
|
* @returns {Object} bottom map style
|
|
74
74
|
*/
|
|
75
|
-
export const editBottomMapStyle = memoize(({id, mapStyle, visibleLayerGroups}) => {
|
|
75
|
+
export const editBottomMapStyle = memoize(({id, mapStyle, visibleLayerGroups, sketchValue}) => {
|
|
76
76
|
const invisibleFilters = (mapStyle.layerGroups || [])
|
|
77
77
|
.filter(lg => !visibleLayerGroups[lg.slug])
|
|
78
78
|
.map(lg => lg.filter);
|
|
@@ -85,7 +85,8 @@ export const editBottomMapStyle = memoize(({id, mapStyle, visibleLayerGroups}) =
|
|
|
85
85
|
|
|
86
86
|
return {
|
|
87
87
|
...mapStyle.style,
|
|
88
|
-
layers: filteredLayers
|
|
88
|
+
layers: filteredLayers,
|
|
89
|
+
sketchValue
|
|
89
90
|
};
|
|
90
91
|
}, resolver);
|
|
91
92
|
|