kepler.gl 3.2.0 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/ai-assistant/src/config/models.d.ts +8 -0
- package/dist/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -2
- package/dist/src/localization/src/translations/en.d.ts +1 -0
- package/dist/src/utils/src/arrow-data-container.d.ts +3 -2
- package/dist/src/utils/src/data-container-utils.d.ts +2 -0
- package/package.json +2 -2
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/dist/components/ai-assistant-config.js +40 -24
- package/src/ai-assistant/dist/config/models.d.ts +8 -0
- package/src/ai-assistant/dist/config/models.js +16 -8
- package/src/ai-assistant/dist/localization.js +7 -7
- package/src/ai-assistant/dist/reducers/index.js +3 -2
- package/src/ai-assistant/package.json +16 -16
- package/src/ai-assistant/src/components/ai-assistant-config.tsx +39 -28
- package/src/ai-assistant/src/config/models.ts +37 -25
- package/src/ai-assistant/src/localization.ts +6 -6
- package/src/ai-assistant/src/reducers/index.ts +2 -1
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/dist/common/color-legend.js +8 -8
- package/src/components/dist/common/data-table/index.js +13 -9
- package/src/components/dist/map/map-legend-panel.js +10 -4
- package/src/components/dist/map/map-legend.js +2 -2
- package/src/components/dist/plot-container.js +4 -2
- package/src/components/dist/side-panel/interaction-panel/interaction-panel.js +2 -2
- package/src/components/dist/side-panel/layer-panel/color-breaks-panel.js +11 -2
- package/src/components/dist/side-panel/layer-panel/color-scale-selector.js +65 -12
- package/src/components/dist/side-panel/layer-panel/custom-palette.js +18 -7
- package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -2
- package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +18 -4
- package/src/components/package.json +15 -15
- package/src/components/src/common/color-legend.tsx +15 -2
- package/src/components/src/common/data-table/index.tsx +1 -1
- package/src/components/src/map/map-legend-panel.tsx +21 -2
- package/src/components/src/map/map-legend.tsx +1 -1
- package/src/components/src/plot-container.tsx +2 -1
- package/src/components/src/side-panel/interaction-panel/interaction-panel.tsx +1 -0
- package/src/components/src/side-panel/layer-panel/color-breaks-panel.tsx +14 -3
- package/src/components/src/side-panel/layer-panel/color-scale-selector.tsx +62 -8
- package/src/components/src/side-panel/layer-panel/custom-palette.tsx +11 -5
- package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +19 -2
- package/src/constants/dist/default-settings.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1b/11/43d4199b6142de0b88c672f2b036c5aa4ca836cf35977bbafcdb1962b91e94f8336655a57f0742571ceb13fc69ef4ba0e3cb91dc9a8d61ef041c6eb15e7a +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b3/bd/e4f91c7af9e320b979e29ad3b9e3a4dfcd61e4a09d6e4579104c40dcace7651b443fdd6d7ff5d947ed6c9df2c0bbbcc76a2ea86d6398e4945257eeb80dd5 +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/ac/e2/e903ec95ada0b0075fdcfb6133e2e75c9b3b0504a29ca665704aaed90b2b +2 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b4/c5/a43653dff3b380f7b0793080a57c980a9a136764933e79454de0fe43a5ca +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/package.json +2 -2
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/dist/table/duckdb-table-utils.js +3 -2
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/table/duckdb-table-utils.ts +5 -1
- package/src/effects/package.json +5 -5
- package/src/layers/dist/geojson-layer/geojson-utils.js +23 -5
- package/src/layers/dist/icon-layer/icon-layer.js +12 -2
- package/src/layers/dist/vector-tile/common-tile/tile-dataset.d.ts +4 -0
- package/src/layers/dist/vector-tile/common-tile/tile-dataset.js +10 -1
- package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +11 -0
- package/src/layers/dist/vector-tile/vector-tile-layer.js +113 -7
- package/src/layers/package.json +9 -9
- package/src/layers/src/geojson-layer/geojson-utils.ts +22 -0
- package/src/layers/src/icon-layer/icon-layer.ts +49 -38
- package/src/layers/src/vector-tile/common-tile/tile-dataset.ts +7 -0
- package/src/layers/src/vector-tile/vector-tile-layer.ts +110 -6
- package/src/localization/dist/translations/en.d.ts +1 -0
- package/src/localization/dist/translations/en.js +2 -1
- package/src/localization/package.json +1 -1
- package/src/localization/src/translations/en.ts +1 -0
- package/src/processors/dist/data-processor.js +15 -5
- package/src/processors/package.json +7 -7
- package/src/processors/src/data-processor.ts +19 -4
- package/src/reducers/package.json +16 -16
- package/src/schemas/package.json +7 -7
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/52/82/28cacf6fd462b779c22675964b655bf3a9f3ce9ec3c9b141a401a5bf90cb7d904ac65ab8e484570130b12771af0a0d5bab20e6976cfa773666763e046a6a +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/53/93/f8e389b6450ee0636bf336363d2d6865d8a1fe2445c15cc1e36c651e1ddf448358eb74e894f4bf6fc48ef881dc64cc221c48b133ecf0e02132f2c5fbfe11 +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/2e/45/ed6e0c1beb8bca4698a47b5feda8789a22d96978bc4839949bd26e827454 +2 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/56/db/b5a812c56b0d1dcdcd33da37e464062a19c8752cb2296603dc72d2c54d31 +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/dist/dataset-utils.js +18 -7
- package/src/table/dist/kepler-table.js +2 -1
- package/src/table/package.json +5 -5
- package/src/table/src/dataset-utils.ts +7 -2
- package/src/table/src/kepler-table.ts +1 -0
- package/src/tasks/package.json +2 -2
- package/src/types/actions.d.ts +1 -0
- package/src/types/package.json +1 -1
- package/src/utils/dist/arrow-data-container.d.ts +3 -2
- package/src/utils/dist/arrow-data-container.js +3 -3
- package/src/utils/dist/data-container-utils.d.ts +2 -0
- package/src/utils/dist/data-container-utils.js +3 -2
- package/src/utils/package.json +4 -4
- package/src/utils/src/arrow-data-container.ts +9 -7
- package/src/utils/src/data-container-utils.ts +3 -1
- package/umd/keplergl.min.js +1366 -1333
|
@@ -12,6 +12,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
12
12
|
var _reactRedux = require("react-redux");
|
|
13
13
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
14
14
|
var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
|
|
15
|
+
var _fieldSelector = _interopRequireDefault(require("../../common/field-selector"));
|
|
15
16
|
var _channelByValueSelector = _interopRequireDefault(require("./channel-by-value-selector"));
|
|
16
17
|
var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
|
|
17
18
|
var _layerColorSelector = require("./layer-color-selector");
|
|
@@ -23,8 +24,8 @@ var _templateObject; // SPDX-License-Identifier: MIT
|
|
|
23
24
|
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); }
|
|
24
25
|
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; }
|
|
25
26
|
var StyledLayerConfigurator = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
|
|
26
|
-
VectorTileLayerConfiguratorFactory.deps = [_channelByValueSelector["default"], _layerColorSelector.LayerColorRangeSelectorFactory, _layerColorSelector.LayerColorSelectorFactory, _layerConfigGroup["default"], _visConfigSlider["default"], _visConfigSwitch["default"], _sourceDataSelector["default"]];
|
|
27
|
-
function VectorTileLayerConfiguratorFactory(ChannelByValueSelector, LayerColorRangeSelector, LayerColorSelector, LayerConfigGroup, VisConfigSlider, VisConfigSwitch) {
|
|
27
|
+
VectorTileLayerConfiguratorFactory.deps = [_channelByValueSelector["default"], _layerColorSelector.LayerColorRangeSelectorFactory, _layerColorSelector.LayerColorSelectorFactory, _layerConfigGroup["default"], _visConfigSlider["default"], _visConfigSwitch["default"], _sourceDataSelector["default"], _fieldSelector["default"]];
|
|
28
|
+
function VectorTileLayerConfiguratorFactory(ChannelByValueSelector, LayerColorRangeSelector, LayerColorSelector, LayerConfigGroup, VisConfigSlider, VisConfigSwitch, _SourceDataSelector, FieldSelector) {
|
|
28
29
|
var VectorTileLayerConfigurator = function VectorTileLayerConfigurator(_ref) {
|
|
29
30
|
var _layer$config$visConf;
|
|
30
31
|
var layer = _ref.layer,
|
|
@@ -77,7 +78,20 @@ function VectorTileLayerConfiguratorFactory(ChannelByValueSelector, LayerColorRa
|
|
|
77
78
|
label: false
|
|
78
79
|
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, layerChannelConfigProps.fields ? /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
|
|
79
80
|
channel: layer.visualChannels.radius
|
|
80
|
-
})) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.radiusUnits, visConfiguratorProps)))))
|
|
81
|
+
})) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.radiusUnits, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
82
|
+
label: "layer.uniqueIdField"
|
|
83
|
+
}), /*#__PURE__*/_react["default"].createElement(FieldSelector, {
|
|
84
|
+
fields: layerChannelConfigProps.fields || [],
|
|
85
|
+
value: layer.config.uniqueIdField || null,
|
|
86
|
+
onSelect: function onSelect(val) {
|
|
87
|
+
var _layerConfiguratorPro;
|
|
88
|
+
return (_layerConfiguratorPro = layerConfiguratorProps.onChange) === null || _layerConfiguratorPro === void 0 ? void 0 : _layerConfiguratorPro.call(layerConfiguratorProps, {
|
|
89
|
+
uniqueIdField: (val === null || val === void 0 ? void 0 : val.name) || null
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
placeholder: 'placeholder.selectField',
|
|
93
|
+
erasable: true
|
|
94
|
+
})));
|
|
81
95
|
};
|
|
82
96
|
var ConnectedVectorTileLayerConfigurator = (0, _reactRedux.connect)(function (state) {
|
|
83
97
|
return state;
|
|
@@ -85,4 +99,4 @@ function VectorTileLayerConfiguratorFactory(ChannelByValueSelector, LayerColorRa
|
|
|
85
99
|
return ConnectedVectorTileLayerConfigurator;
|
|
86
100
|
}
|
|
87
101
|
var _default = exports["default"] = VectorTileLayerConfiguratorFactory;
|
|
88
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFJlZHV4IiwiX3N0eWxlZENvbXBvbmVudHMiLCJfc291cmNlRGF0YVNlbGVjdG9yIiwiX2NoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJfbGF5ZXJDb25maWdHcm91cCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2xheWVyQ29sb3JTZWxlY3RvciIsIl9yYWRpdXNCeVpvb21JbnB1dCIsIl92aXNDb25maWdTbGlkZXIiLCJfdmlzQ29uZmlnU3dpdGNoIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIlZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkiLCJkZXBzIiwiQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiTGF5ZXJDb25maWdHcm91cEZhY3RvcnkiLCJWaXNDb25maWdTbGlkZXJGYWN0b3J5IiwiVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSIsIlNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yIiwiTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3IiLCJMYXllckNvbG9yU2VsZWN0b3IiLCJMYXllckNvbmZpZ0dyb3VwIiwiVmlzQ29uZmlnU2xpZGVyIiwiVmlzQ29uZmlnU3dpdGNoIiwiVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yIiwiX3JlZiIsIl9sYXllciRjb25maWckdmlzQ29uZiIsImxheWVyIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwibGFiZWwiLCJmaWVsZHMiLCJjaGFubmVsIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsImNvbmZpZyIsImNvbG9yRmllbGQiLCJGcmFnbWVudCIsInZpc0NvbmZpZ1NldHRpbmdzIiwiZHluYW1pY0NvbG9yIiwib3BhY2l0eSIsInN0cm9rZWQiLCJjb2xsYXBzaWJsZSIsInN0cm9rZUNvbG9yIiwic3Ryb2tlQ29sb3JGaWVsZCIsInByb3BlcnR5Iiwic2VsZWN0ZWRDb2xvciIsInZpc0NvbmZpZyIsIkNvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50Iiwic3Ryb2tlT3BhY2l0eSIsInNpemVGaWVsZCIsInNpemVSYW5nZSIsInN0cm9rZVdpZHRoIiwic2l6ZSIsImVuYWJsZTNkIiwiZWxldmF0aW9uU2NhbGUiLCJoZWlnaHQiLCJkZXNjcmlwdGlvbiIsInJhZGl1c0J5Wm9vbSIsImVuYWJsZWQiLCJvbkNoYW5nZSIsInVuaXQiLCJyYWRpdXMiLCJyYWRpdXNVbml0cyIsIkNvbm5lY3RlZFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvciIsImNvbm5lY3QiLCJzdGF0ZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL3ZlY3Rvci10aWxlLWxheWVyLWNvbmZpZ3VyYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7VmVjdG9yVGlsZUxheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge0tlcGxlclRhYmxlIGFzIEtlcGxlckRhdGFzZXR9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSBmcm9tICcuLi9jb21tb24vc291cmNlLWRhdGEtc2VsZWN0b3InO1xuaW1wb3J0IENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY2hhbm5lbC1ieS12YWx1ZS1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IHtMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnksIExheWVyQ29sb3JTZWxlY3RvckZhY3Rvcnl9IGZyb20gJy4vbGF5ZXItY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IFZpc0NvbmZpZ0J5Wm9vbUlucHV0IGZyb20gJy4vcmFkaXVzLWJ5LXpvb20taW5wdXQnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctc3dpdGNoJztcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tdG9wOiAxMnB4O1xuYDtcblxudHlwZSBHZXRQcm9wczxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBSZWFjdC5GQzxhbnk+PiA9IFBhcmFtZXRlcnM8UmV0dXJuVHlwZTxUPj5bMF07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxheWVyOiBWZWN0b3JUaWxlTGF5ZXI7XG4gIGRhdGFzZXQ/OiBLZXBsZXJEYXRhc2V0O1xuICB2aXNDb25maWd1cmF0b3JQcm9wczogYW55O1xuICBsYXllckNoYW5uZWxDb25maWdQcm9wczogR2V0UHJvcHM8dHlwZW9mIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5PjtcbiAgbGF5ZXJDb25maWd1cmF0b3JQcm9wczogYW55O1xufTtcblxuVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeS5kZXBzID0gW1xuICBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSxcbiAgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSxcbiAgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSxcbiAgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeVxuXTtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeShcbiAgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3Rvcnk+LFxuICBMYXllckNvbG9yUmFuZ2VTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5PixcbiAgTGF5ZXJDb2xvclNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5PixcbiAgTGF5ZXJDb25maWdHcm91cDogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb25maWdHcm91cEZhY3Rvcnk+LFxuICBWaXNDb25maWdTbGlkZXI6IFJldHVyblR5cGU8dHlwZW9mIFZpc0NvbmZpZ1NsaWRlckZhY3Rvcnk+LFxuICBWaXNDb25maWdTd2l0Y2g6IFJldHVyblR5cGU8dHlwZW9mIFZpc0NvbmZpZ1N3aXRjaEZhY3Rvcnk+XG4pOiBSZWFjdC5GQzxQcm9wcz4ge1xuICBjb25zdCBWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3IgPSAoe1xuICAgIGxheWVyLFxuICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzLFxuICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgfTogUHJvcHMpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgICB7LyogRmlsbCBDb2xvciAqL31cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLmZpbGxDb2xvclwiPlxuICAgICAgICAgIHtsYXllckNoYW5uZWxDb25maWdQcm9wcy5maWVsZHMgPyAoXG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5keW5hbWljQ29sb3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgey8qIFN0cm9rZSBjb2xvciAqL31cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlZH1cbiAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgPlxuICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvclxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JSYW5nZVwiXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I9e2xheWVyLmNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZU9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgey8qIFN0cm9rZSBXaWR0aCAqL31cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiXG4gICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgPlxuICAgICAgICAgIHtsYXllci5jb25maWcuc2l6ZUZpZWxkID8gKFxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZVdpZHRofVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgPlxuICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtsYXllckNoYW5uZWxDb25maWdQcm9wcy5maWVsZHMgPyAoXG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICB7LyogUmFkaXVzICovfVxuICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICBsYWJlbD17J2xheWVyLnJhZGl1cyd9XG4gICAgICAgICAgZGVzY3JpcHRpb249XCJQb2ludCByYWRpdXMgaW4gcGl4ZWxzIG9yIG1ldGVyc1wiXG4gICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgPlxuICAgICAgICAgIHtsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1c0J5Wm9vbT8uZW5hYmxlZCAmJiB2aXNDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZSA/IChcbiAgICAgICAgICAgIDxWaXNDb25maWdCeVpvb21JbnB1dFxuICAgICAgICAgICAgICBjb25maWc9e2xheWVyLmNvbmZpZy52aXNDb25maWcucmFkaXVzQnlab29tfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17dmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgIGxhYmVsPVwiUmFkaXVzXCJcbiAgICAgICAgICAgICAgcHJvcGVydHk9XCJyYWRpdXNCeVpvb21cIlxuICAgICAgICAgICAgICB1bml0PVwicHhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIHtsYXllckNoYW5uZWxDb25maWdQcm9wcy5maWVsZHMgPyAoXG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzVW5pdHN9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgQ29ubmVjdGVkVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yID0gY29ubmVjdChzdGF0ZSA9PiBzdGF0ZSkoVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yKTtcbiAgcmV0dXJuIENvbm5lY3RlZFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFLQSxJQUFBRyxtQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksdUJB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
|
|
102
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFJlZHV4IiwiX3N0eWxlZENvbXBvbmVudHMiLCJfc291cmNlRGF0YVNlbGVjdG9yIiwiX2ZpZWxkU2VsZWN0b3IiLCJfY2hhbm5lbEJ5VmFsdWVTZWxlY3RvciIsIl9sYXllckNvbmZpZ0dyb3VwIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfbGF5ZXJDb2xvclNlbGVjdG9yIiwiX3JhZGl1c0J5Wm9vbUlucHV0IiwiX3Zpc0NvbmZpZ1NsaWRlciIsIl92aXNDb25maWdTd2l0Y2giLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRMYXllckNvbmZpZ3VyYXRvciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSIsIlZpc0NvbmZpZ1NsaWRlckZhY3RvcnkiLCJWaXNDb25maWdTd2l0Y2hGYWN0b3J5IiwiU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSIsIkZpZWxkU2VsZWN0b3JGYWN0b3J5IiwiQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvciIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yIiwiTGF5ZXJDb2xvclNlbGVjdG9yIiwiTGF5ZXJDb25maWdHcm91cCIsIlZpc0NvbmZpZ1NsaWRlciIsIlZpc0NvbmZpZ1N3aXRjaCIsIl9Tb3VyY2VEYXRhU2VsZWN0b3IiLCJGaWVsZFNlbGVjdG9yIiwiVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yIiwiX3JlZiIsIl9sYXllciRjb25maWckdmlzQ29uZiIsImxheWVyIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwibGFiZWwiLCJmaWVsZHMiLCJjaGFubmVsIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsImNvbmZpZyIsImNvbG9yRmllbGQiLCJGcmFnbWVudCIsInZpc0NvbmZpZ1NldHRpbmdzIiwiZHluYW1pY0NvbG9yIiwib3BhY2l0eSIsInN0cm9rZWQiLCJjb2xsYXBzaWJsZSIsInN0cm9rZUNvbG9yIiwic3Ryb2tlQ29sb3JGaWVsZCIsInByb3BlcnR5Iiwic2VsZWN0ZWRDb2xvciIsInZpc0NvbmZpZyIsIkNvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50Iiwic3Ryb2tlT3BhY2l0eSIsInNpemVGaWVsZCIsInNpemVSYW5nZSIsInN0cm9rZVdpZHRoIiwic2l6ZSIsImVuYWJsZTNkIiwiZWxldmF0aW9uU2NhbGUiLCJoZWlnaHQiLCJkZXNjcmlwdGlvbiIsInJhZGl1c0J5Wm9vbSIsImVuYWJsZWQiLCJvbkNoYW5nZSIsInVuaXQiLCJyYWRpdXMiLCJyYWRpdXNVbml0cyIsInZhbHVlIiwidW5pcXVlSWRGaWVsZCIsIm9uU2VsZWN0IiwidmFsIiwiX2xheWVyQ29uZmlndXJhdG9yUHJvIiwibmFtZSIsInBsYWNlaG9sZGVyIiwiZXJhc2FibGUiLCJDb25uZWN0ZWRWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3IiLCJjb25uZWN0Iiwic3RhdGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2lkZS1wYW5lbC9sYXllci1wYW5lbC92ZWN0b3ItdGlsZS1sYXllci1jb25maWd1cmF0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge1ZlY3RvclRpbGVMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSBhcyBLZXBsZXJEYXRhc2V0fSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL3NvdXJjZS1kYXRhLXNlbGVjdG9yJztcbmltcG9ydCBGaWVsZFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuLi8uLi9jb21tb24vZmllbGQtc2VsZWN0b3InO1xuaW1wb3J0IENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY2hhbm5lbC1ieS12YWx1ZS1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IHtMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnksIExheWVyQ29sb3JTZWxlY3RvckZhY3Rvcnl9IGZyb20gJy4vbGF5ZXItY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IFZpc0NvbmZpZ0J5Wm9vbUlucHV0IGZyb20gJy4vcmFkaXVzLWJ5LXpvb20taW5wdXQnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctc3dpdGNoJztcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tdG9wOiAxMnB4O1xuYDtcblxudHlwZSBHZXRQcm9wczxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBSZWFjdC5GQzxhbnk+PiA9IFBhcmFtZXRlcnM8UmV0dXJuVHlwZTxUPj5bMF07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxheWVyOiBWZWN0b3JUaWxlTGF5ZXI7XG4gIGRhdGFzZXQ/OiBLZXBsZXJEYXRhc2V0O1xuICB2aXNDb25maWd1cmF0b3JQcm9wczogYW55O1xuICBsYXllckNoYW5uZWxDb25maWdQcm9wczogR2V0UHJvcHM8dHlwZW9mIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5PjtcbiAgbGF5ZXJDb25maWd1cmF0b3JQcm9wczogYW55O1xufTtcblxuVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeS5kZXBzID0gW1xuICBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSxcbiAgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSxcbiAgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSxcbiAgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSxcbiAgRmllbGRTZWxlY3RvckZhY3Rvcnlcbl07XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5PixcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeT4sXG4gIExheWVyQ29sb3JTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeT4sXG4gIExheWVyQ29uZmlnR3JvdXA6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29uZmlnR3JvdXBGYWN0b3J5PixcbiAgVmlzQ29uZmlnU2xpZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdTbGlkZXJGYWN0b3J5PixcbiAgVmlzQ29uZmlnU3dpdGNoOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdTd2l0Y2hGYWN0b3J5PixcbiAgX1NvdXJjZURhdGFTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeT4sXG4gIEZpZWxkU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIEZpZWxkU2VsZWN0b3JGYWN0b3J5PlxuKTogUmVhY3QuRkM8UHJvcHM+IHtcbiAgY29uc3QgVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yID0gKHtcbiAgICBsYXllcixcbiAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICBsYXllckNoYW5uZWxDb25maWdQcm9wcyxcbiAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzXG4gIH06IFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRMYXllckNvbmZpZ3VyYXRvcj5cbiAgICAgICAgey8qIEZpbGwgQ29sb3IgKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIj5cbiAgICAgICAgICB7bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMuZmllbGRzID8gKFxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZHluYW1pY0NvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBTdHJva2UgY29sb3IgKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlQ29sb3JcIlxuICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgID5cbiAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7bGF5ZXIuY29uZmlnLnN0cm9rZUNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIlxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VPcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgID5cbiAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VXaWR0aH1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgey8qIEVsZXZhdGlvbiAqL31cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgID5cbiAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMuZmllbGRzID8gKFxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgbGFiZWw9eydsYXllci5yYWRpdXMnfVxuICAgICAgICAgIGRlc2NyaXB0aW9uPVwiUG9pbnQgcmFkaXVzIGluIHBpeGVscyBvciBtZXRlcnNcIlxuICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgID5cbiAgICAgICAgICB7bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5yYWRpdXNCeVpvb20/LmVuYWJsZWQgJiYgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2UgPyAoXG4gICAgICAgICAgICA8VmlzQ29uZmlnQnlab29tSW5wdXRcbiAgICAgICAgICAgICAgY29uZmlnPXtsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1c0J5Wm9vbX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICBsYWJlbD1cIlJhZGl1c1wiXG4gICAgICAgICAgICAgIHByb3BlcnR5PVwicmFkaXVzQnlab29tXCJcbiAgICAgICAgICAgICAgdW5pdD1cInB4XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICB7bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMuZmllbGRzID8gKFxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5yYWRpdXN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1VuaXRzfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBVbmlxdWUgSUQgRmllbGQgKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci51bmlxdWVJZEZpZWxkXCI+XG4gICAgICAgICAgPEZpZWxkU2VsZWN0b3JcbiAgICAgICAgICAgIGZpZWxkcz17bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMuZmllbGRzIHx8IFtdfVxuICAgICAgICAgICAgdmFsdWU9e2xheWVyLmNvbmZpZy51bmlxdWVJZEZpZWxkIHx8IG51bGx9XG4gICAgICAgICAgICBvblNlbGVjdD17KHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlPy4oe3VuaXF1ZUlkRmllbGQ6IHZhbD8ubmFtZSB8fCBudWxsfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsncGxhY2Vob2xkZXIuc2VsZWN0RmllbGQnfVxuICAgICAgICAgICAgZXJhc2FibGVcbiAgICAgICAgICAvPlxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgQ29ubmVjdGVkVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yID0gY29ubmVjdChzdGF0ZSA9PiBzdGF0ZSkoVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yKTtcbiAgcmV0dXJuIENvbm5lY3RlZFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFLQSxJQUFBRyxtQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0Es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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/components",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.2",
|
|
5
5
|
"description": "kepler.gl constants used by kepler.gl components, actions and reducers",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -38,20 +38,20 @@
|
|
|
38
38
|
"@dnd-kit/utilities": "^3.2.2",
|
|
39
39
|
"@emotion/is-prop-valid": "^1.2.1",
|
|
40
40
|
"@floating-ui/react": "0.25.1",
|
|
41
|
-
"@kepler.gl/actions": "3.2.
|
|
42
|
-
"@kepler.gl/cloud-providers": "3.2.
|
|
43
|
-
"@kepler.gl/common-utils": "3.2.
|
|
44
|
-
"@kepler.gl/constants": "3.2.
|
|
45
|
-
"@kepler.gl/effects": "3.2.
|
|
46
|
-
"@kepler.gl/layers": "3.2.
|
|
47
|
-
"@kepler.gl/localization": "3.2.
|
|
48
|
-
"@kepler.gl/processors": "3.2.
|
|
49
|
-
"@kepler.gl/reducers": "3.2.
|
|
50
|
-
"@kepler.gl/schemas": "3.2.
|
|
51
|
-
"@kepler.gl/styles": "3.2.
|
|
52
|
-
"@kepler.gl/table": "3.2.
|
|
53
|
-
"@kepler.gl/types": "3.2.
|
|
54
|
-
"@kepler.gl/utils": "3.2.
|
|
41
|
+
"@kepler.gl/actions": "3.2.2",
|
|
42
|
+
"@kepler.gl/cloud-providers": "3.2.2",
|
|
43
|
+
"@kepler.gl/common-utils": "3.2.2",
|
|
44
|
+
"@kepler.gl/constants": "3.2.2",
|
|
45
|
+
"@kepler.gl/effects": "3.2.2",
|
|
46
|
+
"@kepler.gl/layers": "3.2.2",
|
|
47
|
+
"@kepler.gl/localization": "3.2.2",
|
|
48
|
+
"@kepler.gl/processors": "3.2.2",
|
|
49
|
+
"@kepler.gl/reducers": "3.2.2",
|
|
50
|
+
"@kepler.gl/schemas": "3.2.2",
|
|
51
|
+
"@kepler.gl/styles": "3.2.2",
|
|
52
|
+
"@kepler.gl/table": "3.2.2",
|
|
53
|
+
"@kepler.gl/types": "3.2.2",
|
|
54
|
+
"@kepler.gl/utils": "3.2.2",
|
|
55
55
|
"@loaders.gl/mvt": "^4.3.2",
|
|
56
56
|
"@loaders.gl/pmtiles": "^4.3.2",
|
|
57
57
|
"@loaders.gl/wms": "4.3.2",
|
|
@@ -32,7 +32,8 @@ const inputCss = css`
|
|
|
32
32
|
const StyledLegend = styled.div<{disableEdit: boolean; isExpanded?: boolean}>`
|
|
33
33
|
${props => props.theme.sidePanelScrollBar};
|
|
34
34
|
${props => (props.isExpanded ? '' : `max-height: 156px;`)};
|
|
35
|
-
overflow: auto;
|
|
35
|
+
overflow-y: auto;
|
|
36
|
+
overflow-x: hidden;
|
|
36
37
|
margin-bottom: ${GAP}px;
|
|
37
38
|
display: grid;
|
|
38
39
|
grid-row-gap: ${GAP}px;
|
|
@@ -45,12 +46,15 @@ const StyledLegendRow = styled.div`
|
|
|
45
46
|
display: flex;
|
|
46
47
|
align-items: center;
|
|
47
48
|
height: 20px;
|
|
49
|
+
min-width: 0;
|
|
48
50
|
`;
|
|
49
51
|
|
|
50
52
|
export function ResetColorLabelFactory() {
|
|
51
53
|
return styled(Reset)`
|
|
52
54
|
color: ${props => props.theme.labelColorLT};
|
|
53
55
|
cursor: pointer;
|
|
56
|
+
flex-shrink: 0;
|
|
57
|
+
margin-left: ${GAP}px;
|
|
54
58
|
|
|
55
59
|
&:hover {
|
|
56
60
|
color: ${props => props.theme.panelHeaderIconHover};
|
|
@@ -66,6 +70,10 @@ const StyleInlineInput = styled(InlineInput)`
|
|
|
66
70
|
width: unset;
|
|
67
71
|
padding: 2px;
|
|
68
72
|
flex: 1;
|
|
73
|
+
min-width: 0;
|
|
74
|
+
overflow: hidden;
|
|
75
|
+
text-overflow: ellipsis;
|
|
76
|
+
white-space: nowrap;
|
|
69
77
|
margin: 0 ${GAP}px;
|
|
70
78
|
:hover {
|
|
71
79
|
height: ${ROW_H}px;
|
|
@@ -125,6 +133,11 @@ const StyledLabel = styled.div`
|
|
|
125
133
|
font-size: 10px;
|
|
126
134
|
color: ${props => props.theme.textColor};
|
|
127
135
|
padding-left: 2px;
|
|
136
|
+
flex: 1;
|
|
137
|
+
min-width: 0;
|
|
138
|
+
overflow: hidden;
|
|
139
|
+
text-overflow: ellipsis;
|
|
140
|
+
white-space: nowrap;
|
|
128
141
|
`;
|
|
129
142
|
|
|
130
143
|
export type LegendRowProps = {
|
|
@@ -155,7 +168,7 @@ export function LegendRowFactory(
|
|
|
155
168
|
[color, onUpdateLabel]
|
|
156
169
|
);
|
|
157
170
|
const onReset = useCallback(() => onResetLabel && onResetLabel(color), [color, onResetLabel]);
|
|
158
|
-
const value = displayLabel ? label
|
|
171
|
+
const value = displayLabel ? String(label ?? '') : '';
|
|
159
172
|
return (
|
|
160
173
|
<StyledLegendRow>
|
|
161
174
|
<LegendColorDisplay color={color} />
|
|
@@ -349,7 +349,7 @@ export const TableSection = ({
|
|
|
349
349
|
height={headerGridProps.height + browserScrollBarWidth}
|
|
350
350
|
width={headerGridWidth}
|
|
351
351
|
scrollLeft={scrollLeft}
|
|
352
|
-
onScroll={onScroll}
|
|
352
|
+
onScroll={args => onScroll?.({...args, scrollTop:scrollTop ?? 0 })}
|
|
353
353
|
/>
|
|
354
354
|
</div>
|
|
355
355
|
<div
|
|
@@ -116,6 +116,23 @@ const StyledResizeHandle = styled.div`
|
|
|
116
116
|
cursor: ns-resize;
|
|
117
117
|
`;
|
|
118
118
|
|
|
119
|
+
const StyledFixedLegendContent = styled.div<{contentHeight?: number}>`
|
|
120
|
+
.map-control__panel-content {
|
|
121
|
+
max-height: calc(100vh - 100px);
|
|
122
|
+
${props => (props.contentHeight ? `height: ${props.contentHeight}px;` : '')};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Hide scrollbars in export to avoid OS default styling differences */
|
|
126
|
+
.styled-color-legend {
|
|
127
|
+
-ms-overflow-style: none; /* IE and old Edge */
|
|
128
|
+
scrollbar-width: none; /* Firefox */
|
|
129
|
+
}
|
|
130
|
+
.styled-color-legend::-webkit-scrollbar {
|
|
131
|
+
width: 0 !important; /* Chrome, Safari, new Edge */
|
|
132
|
+
height: 0 !important;
|
|
133
|
+
}
|
|
134
|
+
`;
|
|
135
|
+
|
|
119
136
|
export type MapLegendPanelFactoryDeps = [
|
|
120
137
|
typeof MapControlTooltipFactory,
|
|
121
138
|
typeof MapControlPanelFactory,
|
|
@@ -240,7 +257,7 @@ const ImageExportLegend = withTheme(({settings, isSidePanelShown, theme, childre
|
|
|
240
257
|
const containerRef: React.MutableRefObject<HTMLDivElement | null> = useRef(null);
|
|
241
258
|
const legendContentRef: React.MutableRefObject<HTMLDivElement | null> = useRef(null);
|
|
242
259
|
|
|
243
|
-
const {positionStyles} = useLegendPosition({
|
|
260
|
+
const {positionStyles, contentHeight} = useLegendPosition({
|
|
244
261
|
legendContentRef,
|
|
245
262
|
isSidePanelShown,
|
|
246
263
|
theme,
|
|
@@ -263,7 +280,9 @@ const ImageExportLegend = withTheme(({settings, isSidePanelShown, theme, childre
|
|
|
263
280
|
ref={legendContentRef}
|
|
264
281
|
style={{...positionStyles, position: 'absolute'}}
|
|
265
282
|
>
|
|
266
|
-
{
|
|
283
|
+
<StyledFixedLegendContent contentHeight={contentHeight}>
|
|
284
|
+
{children}
|
|
285
|
+
</StyledFixedLegendContent>
|
|
267
286
|
</div>,
|
|
268
287
|
portalRoot
|
|
269
288
|
)
|
|
@@ -202,7 +202,7 @@ export function LayerColorLegendFactory(
|
|
|
202
202
|
fieldType={(colorField && colorField.type) || 'real'}
|
|
203
203
|
range={colorRange}
|
|
204
204
|
onUpdateColorLegend={onUpdateColorLegend}
|
|
205
|
-
disableEdit={disableEdit}
|
|
205
|
+
disableEdit={disableEdit || Boolean(isExport)}
|
|
206
206
|
isFixed={isFixed}
|
|
207
207
|
mapState={mapState}
|
|
208
208
|
labelFormat={
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
colorMapToColorBreaks,
|
|
13
13
|
isNumericColorBreaks as notOrdinalColorBreaks
|
|
14
14
|
} from '@kepler.gl/utils';
|
|
15
|
-
import React, {useCallback, useMemo} from 'react';
|
|
15
|
+
import React, {useCallback, useMemo, useEffect} from 'react';
|
|
16
16
|
import styled from 'styled-components';
|
|
17
17
|
import ColumnStatsChartFactory from '../../common/column-stats-chart';
|
|
18
18
|
import {Edit} from '../../common/icons';
|
|
@@ -155,6 +155,17 @@ function ColorBreaksPanelFactory(
|
|
|
155
155
|
[customPalette.colorMap, isEditingCustomBreaks, colorBreaks]
|
|
156
156
|
);
|
|
157
157
|
|
|
158
|
+
// Update layers on editing custom breaks
|
|
159
|
+
useEffect(() => {
|
|
160
|
+
const {type} = customPalette || {};
|
|
161
|
+
if (
|
|
162
|
+
isEditingCustomBreaks &&
|
|
163
|
+
(type === SCALE_TYPES.customOrdinal || type === SCALE_TYPES.custom)
|
|
164
|
+
) {
|
|
165
|
+
onScaleChange(type, customPalette);
|
|
166
|
+
}
|
|
167
|
+
}, [isEditingCustomBreaks, customPalette, onScaleChange]);
|
|
168
|
+
|
|
158
169
|
const onClickEditCustomBreaks = useCallback(() => {
|
|
159
170
|
setColorUI({
|
|
160
171
|
colorRangeConfig: {
|
|
@@ -231,8 +242,8 @@ function ColorBreaksPanelFactory(
|
|
|
231
242
|
currentBreaks={currentBreaks}
|
|
232
243
|
onEdit={isCustomBreaks ? onClickEditCustomBreaks : null}
|
|
233
244
|
/>
|
|
234
|
-
) : customPalette.
|
|
235
|
-
customPalette.
|
|
245
|
+
) : (isCustomBreaks || customPalette.type === SCALE_TYPES.customOrdinal) &&
|
|
246
|
+
customPalette.colorMap &&
|
|
236
247
|
customPalette.name?.endsWith(colorField.name) ? (
|
|
237
248
|
<CategoricalColorDisplay
|
|
238
249
|
colorMap={customPalette.colorMap}
|
|
@@ -148,6 +148,28 @@ function ColorScaleSelectorFactory(
|
|
|
148
148
|
);
|
|
149
149
|
const [tippyInstance, setTippyInstance] = useState<TippyInstance>();
|
|
150
150
|
const isEditingColorBreaks = colorUIConfig?.colorRangeConfig?.customBreaks;
|
|
151
|
+
|
|
152
|
+
// Stores the previous selection for live preview: when choosing Custom/Custom Ordinal, we apply a temporary palette.
|
|
153
|
+
// Cancel restores {scale, range} from this ref; Confirm keeps the change and clears the ref.
|
|
154
|
+
// If the user switches between different custom scale types (e.g., from "Custom" to "Custom Ordinal") or is already in a custom scale state,
|
|
155
|
+
// this ref is updated to always store the most recent non-custom selection. Only the latest non-custom selection is restorable on cancel.
|
|
156
|
+
const prevSelectionRef = React.useRef<{scale: string; range: ColorRange} | null>(null);
|
|
157
|
+
|
|
158
|
+
// when custom color scale - but Confirm is not clicked yet
|
|
159
|
+
const pendingOption = useMemo(
|
|
160
|
+
() =>
|
|
161
|
+
isEditingColorBreaks
|
|
162
|
+
? (dropdownSelectProps.options || []).find(
|
|
163
|
+
o => getOptionValue(o) === colorUIConfig?.customPalette?.type
|
|
164
|
+
) || null
|
|
165
|
+
: null,
|
|
166
|
+
[
|
|
167
|
+
isEditingColorBreaks,
|
|
168
|
+
dropdownSelectProps.options,
|
|
169
|
+
getOptionValue,
|
|
170
|
+
colorUIConfig?.customPalette?.type
|
|
171
|
+
]
|
|
172
|
+
);
|
|
151
173
|
const colorScale = useMemo(
|
|
152
174
|
() =>
|
|
153
175
|
getLayerColorScale({
|
|
@@ -234,14 +256,16 @@ function ColorScaleSelectorFactory(
|
|
|
234
256
|
const onSelectScale = useCallback(
|
|
235
257
|
val => {
|
|
236
258
|
// highlight selected option
|
|
237
|
-
if (!val
|
|
259
|
+
if (!val) return;
|
|
260
|
+
|
|
238
261
|
const selectedScale = getOptionValue(val);
|
|
239
|
-
if (selectedScale === SCALE_TYPES.custom) {
|
|
262
|
+
if (selectedScale === SCALE_TYPES.custom || selectedScale === SCALE_TYPES.customOrdinal) {
|
|
240
263
|
const customPalette = initCustomPaletteByCustomScale({
|
|
241
264
|
scale: selectedScale,
|
|
242
265
|
field,
|
|
243
266
|
range,
|
|
244
|
-
colorBreaks
|
|
267
|
+
colorBreaks,
|
|
268
|
+
...(selectedScale === SCALE_TYPES.customOrdinal ? {ordinalDomain} : {})
|
|
245
269
|
});
|
|
246
270
|
setColorUI({
|
|
247
271
|
showColorChart: true,
|
|
@@ -250,28 +274,55 @@ function ColorScaleSelectorFactory(
|
|
|
250
274
|
},
|
|
251
275
|
customPalette
|
|
252
276
|
});
|
|
277
|
+
// store previous selection for cancel, then preview custom on the map
|
|
278
|
+
if (!prevSelectionRef.current) {
|
|
279
|
+
prevSelectionRef.current = {scale: scaleType, range};
|
|
280
|
+
}
|
|
253
281
|
onSelect(selectedScale, customPalette);
|
|
254
|
-
} else if (hasColorMap(range)
|
|
282
|
+
} else if (hasColorMap(range)) {
|
|
255
283
|
// not custom
|
|
256
284
|
// remove colorMap
|
|
257
285
|
// eslint-disable-next-line no-unused-vars
|
|
258
286
|
const {colorMap: _, ...newRange} = range;
|
|
287
|
+
// reset colorUI before changing the scale
|
|
288
|
+
setColorUI({
|
|
289
|
+
showColorChart: false,
|
|
290
|
+
colorRangeConfig: {
|
|
291
|
+
customBreaks: false
|
|
292
|
+
}
|
|
293
|
+
});
|
|
259
294
|
onSelect(selectedScale, newRange);
|
|
260
295
|
} else {
|
|
296
|
+
// reset colorUI before changing the scale
|
|
297
|
+
setColorUI({
|
|
298
|
+
showColorChart: false,
|
|
299
|
+
colorRangeConfig: {
|
|
300
|
+
customBreaks: false
|
|
301
|
+
}
|
|
302
|
+
});
|
|
261
303
|
onSelect(selectedScale);
|
|
262
304
|
}
|
|
263
305
|
},
|
|
264
|
-
[
|
|
306
|
+
[field, setColorUI, onSelect, range, getOptionValue, colorBreaks, ordinalDomain, scaleType]
|
|
265
307
|
);
|
|
266
308
|
|
|
267
309
|
const onApply = useCallback(() => {
|
|
268
|
-
|
|
310
|
+
// change scale type only if confirmed
|
|
311
|
+
const nextScaleType = colorUIConfig?.customPalette?.type || scaleType;
|
|
312
|
+
onSelect(nextScaleType, colorUIConfig.customPalette);
|
|
269
313
|
hideTippy(tippyInstance);
|
|
314
|
+
prevSelectionRef.current = null;
|
|
270
315
|
}, [onSelect, colorUIConfig.customPalette, tippyInstance, scaleType]);
|
|
271
316
|
|
|
272
317
|
const onCancel = useCallback(() => {
|
|
318
|
+
// restore previous selection if any
|
|
319
|
+
if (prevSelectionRef.current) {
|
|
320
|
+
const {scale: prevScale, range: prevRange} = prevSelectionRef.current;
|
|
321
|
+
onSelect(prevScale, prevRange);
|
|
322
|
+
}
|
|
273
323
|
hideTippy(tippyInstance);
|
|
274
|
-
|
|
324
|
+
prevSelectionRef.current = null;
|
|
325
|
+
}, [tippyInstance, onSelect]);
|
|
275
326
|
|
|
276
327
|
const isCustomBreaks =
|
|
277
328
|
scaleType === SCALE_TYPES.custom || scaleType === SCALE_TYPES.customOrdinal;
|
|
@@ -317,6 +368,9 @@ function ColorScaleSelectorFactory(
|
|
|
317
368
|
customListComponent={ColorScaleSelectDropdown}
|
|
318
369
|
searchable={false}
|
|
319
370
|
showOptionsWhenEmpty
|
|
371
|
+
selectedItems={
|
|
372
|
+
pendingOption ? [pendingOption] : dropdownSelectProps.selectedItems
|
|
373
|
+
}
|
|
320
374
|
/>
|
|
321
375
|
)}
|
|
322
376
|
</DropdownWrapper>
|
|
@@ -327,7 +381,7 @@ function ColorScaleSelectorFactory(
|
|
|
327
381
|
<DropdownSelect
|
|
328
382
|
{...dropdownSelectProps}
|
|
329
383
|
displayOption={displayOption}
|
|
330
|
-
value={dropdownSelectProps.selectedItems[0]}
|
|
384
|
+
value={pendingOption || dropdownSelectProps.selectedItems[0]}
|
|
331
385
|
/>
|
|
332
386
|
</div>
|
|
333
387
|
</LazyTippy>
|
|
@@ -377,8 +377,11 @@ export const EditableColorRange: React.FC<EditableColorRangeProps> = ({
|
|
|
377
377
|
editColorMap,
|
|
378
378
|
editable
|
|
379
379
|
}) => {
|
|
380
|
-
const
|
|
381
|
-
const
|
|
380
|
+
const hasInputs = Array.isArray(item?.inputs);
|
|
381
|
+
const leftInput = hasInputs ? item.inputs[0] : undefined;
|
|
382
|
+
const rightInput = hasInputs ? item.inputs[1] : undefined;
|
|
383
|
+
const noMinBound = !Number.isFinite(leftInput) && index === 0;
|
|
384
|
+
const noMaxBound = !Number.isFinite(rightInput) && isLast;
|
|
382
385
|
const onChangeLeft = useCallback(
|
|
383
386
|
val => {
|
|
384
387
|
if (editable && editColorMap) editColorMap(parseFloat(val), index - 1);
|
|
@@ -395,7 +398,7 @@ export const EditableColorRange: React.FC<EditableColorRangeProps> = ({
|
|
|
395
398
|
return (
|
|
396
399
|
<StyledRangeInput>
|
|
397
400
|
<ColorPaletteInput
|
|
398
|
-
value={noMinBound ? 'Less' :
|
|
401
|
+
value={noMinBound ? 'Less' : String(leftInput ?? '')}
|
|
399
402
|
id={`color-palette-input-${index}-left`}
|
|
400
403
|
width="50px"
|
|
401
404
|
textAlign="end"
|
|
@@ -404,7 +407,7 @@ export const EditableColorRange: React.FC<EditableColorRangeProps> = ({
|
|
|
404
407
|
/>
|
|
405
408
|
<Dash />
|
|
406
409
|
<ColorPaletteInput
|
|
407
|
-
value={noMaxBound ? 'More' :
|
|
410
|
+
value={noMaxBound ? 'More' : String(rightInput ?? '')}
|
|
408
411
|
id={`color-palette-input-${index}-right`}
|
|
409
412
|
width="50px"
|
|
410
413
|
textAlign="end"
|
|
@@ -468,7 +471,7 @@ export const CustomPaletteInput: React.FC<CustomPaletteInputProps> = ({
|
|
|
468
471
|
/>
|
|
469
472
|
</StyledColorHexInput>
|
|
470
473
|
) : null}
|
|
471
|
-
{isNumericColorBreaks(colorBreaks) ? (
|
|
474
|
+
{colorBreaks && index < colorBreaks.length && isNumericColorBreaks(colorBreaks) ? (
|
|
472
475
|
<EditableColorRange
|
|
473
476
|
item={colorBreaks[index]}
|
|
474
477
|
isLast={index === colorBreaks.length - 1}
|
|
@@ -719,6 +722,9 @@ export const CategoricalSelector: React.FC<CategoricalSelectorProps> = ({
|
|
|
719
722
|
listAnchor: 'list__item__anchor'
|
|
720
723
|
}}
|
|
721
724
|
options={allValues}
|
|
725
|
+
// add safe string casting for the Typeahead, so fuzzy search never receives non-strings, preventing the toLowerCase crash
|
|
726
|
+
displayOption={o => String(o ?? '')}
|
|
727
|
+
filterOption={(input, o) => String(o ?? '').includes(String(input ?? ''))}
|
|
722
728
|
placeholder={'Search'}
|
|
723
729
|
onOptionSelected={onOptionSelected}
|
|
724
730
|
customListComponent={ModifiedDropdownList}
|
|
@@ -9,6 +9,7 @@ import {VectorTileLayer} from '@kepler.gl/layers';
|
|
|
9
9
|
import {KeplerTable as KeplerDataset} from '@kepler.gl/table';
|
|
10
10
|
|
|
11
11
|
import SourceDataSelectorFactory from '../common/source-data-selector';
|
|
12
|
+
import FieldSelectorFactory from '../../common/field-selector';
|
|
12
13
|
import ChannelByValueSelectorFactory from './channel-by-value-selector';
|
|
13
14
|
import LayerConfigGroupFactory, {ConfigGroupCollapsibleContent} from './layer-config-group';
|
|
14
15
|
import {LayerColorRangeSelectorFactory, LayerColorSelectorFactory} from './layer-color-selector';
|
|
@@ -37,7 +38,8 @@ VectorTileLayerConfiguratorFactory.deps = [
|
|
|
37
38
|
LayerConfigGroupFactory,
|
|
38
39
|
VisConfigSliderFactory,
|
|
39
40
|
VisConfigSwitchFactory,
|
|
40
|
-
SourceDataSelectorFactory
|
|
41
|
+
SourceDataSelectorFactory,
|
|
42
|
+
FieldSelectorFactory
|
|
41
43
|
];
|
|
42
44
|
|
|
43
45
|
function VectorTileLayerConfiguratorFactory(
|
|
@@ -46,7 +48,9 @@ function VectorTileLayerConfiguratorFactory(
|
|
|
46
48
|
LayerColorSelector: ReturnType<typeof LayerColorSelectorFactory>,
|
|
47
49
|
LayerConfigGroup: ReturnType<typeof LayerConfigGroupFactory>,
|
|
48
50
|
VisConfigSlider: ReturnType<typeof VisConfigSliderFactory>,
|
|
49
|
-
VisConfigSwitch: ReturnType<typeof VisConfigSwitchFactory
|
|
51
|
+
VisConfigSwitch: ReturnType<typeof VisConfigSwitchFactory>,
|
|
52
|
+
_SourceDataSelector: ReturnType<typeof SourceDataSelectorFactory>,
|
|
53
|
+
FieldSelector: ReturnType<typeof FieldSelectorFactory>
|
|
50
54
|
): React.FC<Props> {
|
|
51
55
|
const VectorTileLayerConfigurator = ({
|
|
52
56
|
layer,
|
|
@@ -190,6 +194,19 @@ function VectorTileLayerConfiguratorFactory(
|
|
|
190
194
|
<VisConfigSwitch {...layer.visConfigSettings.radiusUnits} {...visConfiguratorProps} />
|
|
191
195
|
</ConfigGroupCollapsibleContent>
|
|
192
196
|
</LayerConfigGroup>
|
|
197
|
+
|
|
198
|
+
{/* Unique ID Field */}
|
|
199
|
+
<LayerConfigGroup {...visConfiguratorProps} label="layer.uniqueIdField">
|
|
200
|
+
<FieldSelector
|
|
201
|
+
fields={layerChannelConfigProps.fields || []}
|
|
202
|
+
value={layer.config.uniqueIdField || null}
|
|
203
|
+
onSelect={(val: any) =>
|
|
204
|
+
layerConfiguratorProps.onChange?.({uniqueIdField: val?.name || null})
|
|
205
|
+
}
|
|
206
|
+
placeholder={'placeholder.selectField'}
|
|
207
|
+
erasable
|
|
208
|
+
/>
|
|
209
|
+
</LayerConfigGroup>
|
|
193
210
|
</StyledLayerConfigurator>
|
|
194
211
|
);
|
|
195
212
|
};
|
|
@@ -101,7 +101,7 @@ var KEPLER_GL_NAME = exports.KEPLER_GL_NAME = 'kepler.gl';
|
|
|
101
101
|
// Since we are injecting this during the build process with babel
|
|
102
102
|
// while developing VERSION is not defined, we capture the exception and return
|
|
103
103
|
// an empty string which will allow us to retrieve the latest umd version
|
|
104
|
-
var KEPLER_GL_VERSION = exports.KEPLER_GL_VERSION = "3.2.
|
|
104
|
+
var KEPLER_GL_VERSION = exports.KEPLER_GL_VERSION = "3.2.2";
|
|
105
105
|
var KEPLER_GL_WEBSITE = exports.KEPLER_GL_WEBSITE = 'http://kepler.gl/';
|
|
106
106
|
var DIMENSIONS = exports.DIMENSIONS = {
|
|
107
107
|
sidePanel: {
|