@kepler.gl/components 3.1.4 → 3.1.5
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/hooks/use-fetch-raster-tile-metadata.d.ts +21 -0
- package/dist/hooks/use-fetch-raster-tile-metadata.js +120 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +16 -1
- package/dist/kepler-gl.d.ts +1 -0
- package/dist/loading-indicator.js +4 -2
- package/dist/map-container.js +2 -2
- package/dist/modals/export-data-modal.js +5 -5
- package/dist/modals/tilesets-modals/common.d.ts +3 -2
- package/dist/modals/tilesets-modals/common.js +1 -1
- package/dist/modals/tilesets-modals/load-tileset.js +45 -26
- package/dist/modals/tilesets-modals/tileset-icon.js +12 -5
- package/dist/modals/tilesets-modals/tileset-raster-form.d.ts +13 -0
- package/dist/modals/tilesets-modals/tileset-raster-form.js +174 -0
- package/dist/modals/tilesets-modals/tileset-vector-form.js +18 -9
- package/dist/side-panel/common/dataset-info.js +2 -2
- package/dist/side-panel/layer-manager.js +14 -3
- package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-section.js +13 -2
- package/dist/side-panel/layer-panel/layer-configurator.d.ts +3 -2
- package/dist/side-panel/layer-panel/layer-configurator.js +9 -3
- package/dist/side-panel/layer-panel/layer-type-list-item.js +4 -2
- package/dist/side-panel/layer-panel/raster-tile-colormap-list-item.d.ts +15 -0
- package/dist/side-panel/layer-panel/raster-tile-colormap-list-item.js +61 -0
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.d.ts +17 -0
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +358 -0
- package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +1 -1
- package/package.json +15 -15
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
16
|
+
var _constants = require("@kepler.gl/constants");
|
|
17
|
+
var _layers = require("@kepler.gl/layers");
|
|
18
|
+
var _localization = require("@kepler.gl/localization");
|
|
19
|
+
var _utils = require("@kepler.gl/utils");
|
|
20
|
+
var _rasterTileColormapListItem = require("./raster-tile-colormap-list-item");
|
|
21
|
+
var _styledComponents2 = require("../../common/styled-components");
|
|
22
|
+
var _switch = _interopRequireDefault(require("../../common/switch"));
|
|
23
|
+
var _infoHelper = _interopRequireDefault(require("../../common/info-helper"));
|
|
24
|
+
var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
|
|
25
|
+
var _visConfigSlider = _interopRequireDefault(require("../../side-panel/layer-panel/vis-config-slider"));
|
|
26
|
+
var _layerConfigGroup = _interopRequireDefault(require("../../side-panel/layer-panel/layer-config-group"));
|
|
27
|
+
var _visConfigSwitch = _interopRequireDefault(require("../../side-panel/layer-panel/vis-config-switch"));
|
|
28
|
+
var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT
|
|
29
|
+
// Copyright contributors to the kepler.gl project
|
|
30
|
+
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); }
|
|
31
|
+
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; }
|
|
32
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
33
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
34
|
+
var STAC_SEARCH_UI_ENABLED = true;
|
|
35
|
+
var StyledVisConfigSwitch = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n\n .vis-config-switch__title {\n display: flex;\n }\n"])));
|
|
36
|
+
var CustomVisConfigSwitch = function CustomVisConfigSwitch(_ref) {
|
|
37
|
+
var _ref$layer = _ref.layer,
|
|
38
|
+
id = _ref$layer.id,
|
|
39
|
+
config = _ref$layer.config,
|
|
40
|
+
property = _ref.property,
|
|
41
|
+
_onChange2 = _ref.onChange,
|
|
42
|
+
label = _ref.label,
|
|
43
|
+
disabled = _ref.disabled;
|
|
44
|
+
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, {
|
|
45
|
+
disabled: Boolean(disabled)
|
|
46
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledVisConfigSwitch, {
|
|
47
|
+
className: "vis-config-switch"
|
|
48
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
49
|
+
className: "vis-config-switch__title"
|
|
50
|
+
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, label ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, label && /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
51
|
+
id: label
|
|
52
|
+
}) || (0, _utils.capitalizeFirstLetter)(property)) : null)), /*#__PURE__*/_react["default"].createElement("div", {
|
|
53
|
+
className: "vis-config-switch__switch"
|
|
54
|
+
}, /*#__PURE__*/_react["default"].createElement(_switch["default"], {
|
|
55
|
+
checked: config.visConfig[property],
|
|
56
|
+
id: "".concat(id, "-").concat(property, "-switch"),
|
|
57
|
+
onChange: function onChange() {
|
|
58
|
+
return _onChange2((0, _defineProperty2["default"])({}, property, !config.visConfig[property]));
|
|
59
|
+
}
|
|
60
|
+
}))));
|
|
61
|
+
};
|
|
62
|
+
var StyledLayerConfigurator = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
|
|
63
|
+
var DescriptionText = (0, _styledComponents["default"])(_styledComponents2.PanelLabel)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n text-transform: none;\n display: inline;\n color: ", ";\n\n a {\n text-decoration: underline;\n margin-left: 4px;\n }\n"])), function (props) {
|
|
64
|
+
return props.theme.subtextColor;
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// TODO: combine these two helpers into one
|
|
68
|
+
function findVisConfigItemById(layer, prop) {
|
|
69
|
+
return layer.visConfigSettings[prop].options.find(function (op) {
|
|
70
|
+
return op.id === layer.config.visConfig[prop];
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function findItemById(layer, options, prop) {
|
|
74
|
+
// For now it's possible that non-raster metadata will be passed to the raster configurator, so
|
|
75
|
+
// options may be null
|
|
76
|
+
return options === null || options === void 0 ? void 0 : options.find(function (op) {
|
|
77
|
+
return op.id === layer.config.visConfig[prop];
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Generate drop down labels for single band selector
|
|
83
|
+
* @param stac - STAC item metadata object
|
|
84
|
+
* @returns array of {id, label} elements
|
|
85
|
+
*/
|
|
86
|
+
function getBandSelectorOptions(stac) {
|
|
87
|
+
var eoBands = (0, _layers.getEOBands)(stac) || [];
|
|
88
|
+
return eoBands.map(function (eoBand) {
|
|
89
|
+
return {
|
|
90
|
+
id: eoBand.name || eoBand.common_name,
|
|
91
|
+
label: eoBand.common_name ? "".concat(eoBand.name || eoBand.common_name, " (").concat(eoBand.common_name, ")") : eoBand.name
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function getCategoricalColormapListItem(categoricalColorMap) {
|
|
96
|
+
var categoricalItem;
|
|
97
|
+
if (categoricalColorMap) {
|
|
98
|
+
categoricalItem = {
|
|
99
|
+
label: 'Categorical',
|
|
100
|
+
id: _layers.CATEGORICAL_COLORMAP_ID
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return categoricalItem;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Check if data source global pixel color range is calculated correctly
|
|
108
|
+
* @param layer - raster layer
|
|
109
|
+
* @param stac - STAC metadata object
|
|
110
|
+
* @param preset - preset name
|
|
111
|
+
* @param singleBandPresetOptions - options for single band preset
|
|
112
|
+
* @returns boolean value
|
|
113
|
+
*/
|
|
114
|
+
function isDataSourceColorRangeAvailable(layer, stac, preset, singleBandPresetOptions) {
|
|
115
|
+
var minPixelValue = null;
|
|
116
|
+
var maxPixelValue = null;
|
|
117
|
+
var dataSourceParams = layer.getDataSourceParams(stac, preset, {
|
|
118
|
+
singleBand: singleBandPresetOptions
|
|
119
|
+
});
|
|
120
|
+
if (dataSourceParams) {
|
|
121
|
+
minPixelValue = dataSourceParams.minPixelValue;
|
|
122
|
+
maxPixelValue = dataSourceParams.maxPixelValue;
|
|
123
|
+
}
|
|
124
|
+
return minPixelValue !== null && maxPixelValue !== null;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Updates color parameters based on a change in visualization preset.
|
|
129
|
+
*
|
|
130
|
+
* This function adjusts the color processing parameters when the visualization
|
|
131
|
+
* preset changes, based on whether the preset is switching to or from a
|
|
132
|
+
* single-band. Determines whether to apply color
|
|
133
|
+
* enhancements or reset parameters based on the preset transition.
|
|
134
|
+
*
|
|
135
|
+
* @param stac A STAC (SpatioTemporal Asset Catalog) object representing the dataset.
|
|
136
|
+
* @param newPreset The old visualization preset being applied.
|
|
137
|
+
* @param newPreset The new visualization preset being applied.
|
|
138
|
+
* @returns The updated color parameters to apply.
|
|
139
|
+
*/
|
|
140
|
+
function updateColorParamsOnPresetChange(stac, oldPreset, newPreset) {
|
|
141
|
+
var colorParams = {};
|
|
142
|
+
var colorOverrides = _layers.DATA_SOURCE_COLOR_DEFAULTS[stac.id];
|
|
143
|
+
if (colorOverrides) return colorParams;
|
|
144
|
+
var bandOfInterest = 'singleBand';
|
|
145
|
+
if (oldPreset === bandOfInterest && newPreset !== bandOfInterest) {
|
|
146
|
+
// enchance colors for multiband combinations
|
|
147
|
+
colorParams = colorOverrides;
|
|
148
|
+
} else if (oldPreset !== bandOfInterest && newPreset === bandOfInterest) {
|
|
149
|
+
// reset image processng params
|
|
150
|
+
colorParams = _layers.RASTER_COLOR_RESET_PARAMS;
|
|
151
|
+
}
|
|
152
|
+
return colorParams;
|
|
153
|
+
}
|
|
154
|
+
RasterTileLayerConfiguratorFactory.deps = [_layerConfigGroup["default"], _visConfigSlider["default"], _infoHelper["default"], _visConfigSwitch["default"]];
|
|
155
|
+
function RasterTileLayerConfiguratorFactory(LayerConfigGroup, VisConfigSlider, InfoHelper, VisConfigSwitch) {
|
|
156
|
+
/**
|
|
157
|
+
* Wrapper around configurator to check for dataset.metadata being null/undefined
|
|
158
|
+
*/
|
|
159
|
+
var STACCheckConfiguratorWrapper = function STACCheckConfiguratorWrapper(_ref2) {
|
|
160
|
+
var layer = _ref2.layer,
|
|
161
|
+
visConfiguratorProps = _ref2.visConfiguratorProps,
|
|
162
|
+
dataset = _ref2.dataset;
|
|
163
|
+
var stac = dataset === null || dataset === void 0 ? void 0 : dataset.metadata;
|
|
164
|
+
|
|
165
|
+
// If no dataset is loaded into Kepler, stac can be undefined
|
|
166
|
+
if (!stac) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
return /*#__PURE__*/_react["default"].createElement(RasterTileLayerConfigurator, {
|
|
170
|
+
layer: layer,
|
|
171
|
+
visConfiguratorProps: visConfiguratorProps,
|
|
172
|
+
dataset: dataset
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
// eslint-disable-next-line complexity
|
|
177
|
+
var RasterTileLayerConfigurator = function RasterTileLayerConfigurator(_ref3) {
|
|
178
|
+
var _stac$rasterTileServe2;
|
|
179
|
+
var layer = _ref3.layer,
|
|
180
|
+
visConfiguratorProps = _ref3.visConfiguratorProps,
|
|
181
|
+
dataset = _ref3.dataset;
|
|
182
|
+
var _layer$config$visConf = layer.config.visConfig,
|
|
183
|
+
preset = _layer$config$visConf.preset,
|
|
184
|
+
nonLinearRescaling = _layer$config$visConf.nonLinearRescaling,
|
|
185
|
+
useSTACSearching = _layer$config$visConf.useSTACSearching,
|
|
186
|
+
categoricalColorMap = _layer$config$visConf.colorRange.colorMap,
|
|
187
|
+
dynamicColor = _layer$config$visConf.dynamicColor,
|
|
188
|
+
singleBandName = _layer$config$visConf.singleBandName;
|
|
189
|
+
var stac = dataset === null || dataset === void 0 ? void 0 : dataset.metadata;
|
|
190
|
+
var availablePresets = (0, _react.useMemo)(function () {
|
|
191
|
+
return (0, _layers.filterAvailablePresets)(stac, _layers.PRESET_OPTIONS);
|
|
192
|
+
}, [stac]);
|
|
193
|
+
var presetOptions = (0, _react.useMemo)(function () {
|
|
194
|
+
return layer.visConfigSettings.preset.options.filter(function (_ref4) {
|
|
195
|
+
var id = _ref4.id;
|
|
196
|
+
return availablePresets === null || availablePresets === void 0 ? void 0 : availablePresets.includes(id);
|
|
197
|
+
});
|
|
198
|
+
}, [layer.visConfigSettings.preset.options, availablePresets]);
|
|
199
|
+
var singleBandOptions = (0, _react.useMemo)(function () {
|
|
200
|
+
return getBandSelectorOptions(stac);
|
|
201
|
+
}, [stac]);
|
|
202
|
+
var colormapOptions = (0, _react.useMemo)(function () {
|
|
203
|
+
var options = (0, _toConsumableArray2["default"])(layer.visConfigSettings.colormapId.options);
|
|
204
|
+
var categoricalListItem = getCategoricalColormapListItem(categoricalColorMap);
|
|
205
|
+
if (categoricalListItem) {
|
|
206
|
+
options.push(categoricalListItem);
|
|
207
|
+
}
|
|
208
|
+
return options;
|
|
209
|
+
}, [layer.visConfigSettings.colormapId.options, categoricalColorMap]);
|
|
210
|
+
var _ref5 = _layers.PRESET_OPTIONS[preset] || {},
|
|
211
|
+
bandCombination = _ref5.bandCombination;
|
|
212
|
+
var colormapAllowed = (0, _layers.isColormapAllowed)(bandCombination);
|
|
213
|
+
var rescalingAllowed = !categoricalColorMap && (0, _layers.isRescalingAllowed)(bandCombination);
|
|
214
|
+
var filterAllowed = (0, _layers.isFilterAllowed)(bandCombination);
|
|
215
|
+
|
|
216
|
+
// Here we show the UI when useSTACSearching is explicitly set to true so that the UI shows up
|
|
217
|
+
var stacSearchAllowed = (0, _layers.isSearchableStac)(stac) || useSTACSearching;
|
|
218
|
+
var selectedColormap = findVisConfigItemById(layer, 'colormapId') || getCategoricalColormapListItem(categoricalColorMap);
|
|
219
|
+
var selectedPreset = findVisConfigItemById(layer, 'preset');
|
|
220
|
+
var selectedSingleBandName = findItemById(layer, singleBandOptions, 'singleBandName');
|
|
221
|
+
var singleBandPresetOptions = (0, _layers.getSingleBandPresetOptions)(stac, singleBandName);
|
|
222
|
+
var _getRasterStatisticsM = (0, _layers.getRasterStatisticsMinMax)(stac, preset, singleBandPresetOptions),
|
|
223
|
+
_getRasterStatisticsM2 = (0, _slicedToArray2["default"])(_getRasterStatisticsM, 2),
|
|
224
|
+
minCategoricalBandValue = _getRasterStatisticsM2[0],
|
|
225
|
+
maxCategoricalBandValue = _getRasterStatisticsM2[1];
|
|
226
|
+
var ColorMapListItem = (0, _react.useMemo)(function () {
|
|
227
|
+
return (0, _rasterTileColormapListItem.getColorMapListItemComponent)({
|
|
228
|
+
colorMap: categoricalColorMap,
|
|
229
|
+
minValue: minCategoricalBandValue,
|
|
230
|
+
maxValue: maxCategoricalBandValue
|
|
231
|
+
});
|
|
232
|
+
}, [categoricalColorMap, minCategoricalBandValue, maxCategoricalBandValue]);
|
|
233
|
+
var isDynamicColorsOnly = !isDataSourceColorRangeAvailable(layer, stac, preset, singleBandPresetOptions);
|
|
234
|
+
|
|
235
|
+
// Default of `dynamicColor` is false. Set it true if it is not possible to get data source
|
|
236
|
+
// wide color range
|
|
237
|
+
(0, _react.useEffect)(function () {
|
|
238
|
+
if (isDynamicColorsOnly && !dynamicColor) {
|
|
239
|
+
visConfiguratorProps.onChange({
|
|
240
|
+
dynamicColor: true
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}, [visConfiguratorProps, dynamicColor, isDynamicColorsOnly]);
|
|
244
|
+
|
|
245
|
+
// For PMTiles in raster format, only show opacity and terrain options for now
|
|
246
|
+
if (stac.pmtilesType === _constants.PMTilesType.RASTER) {
|
|
247
|
+
var _stac$rasterTileServe;
|
|
248
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
249
|
+
label: "Visual Settings",
|
|
250
|
+
collapsible: false
|
|
251
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps))), (0, _utils.getApplicationConfig)().rasterServerSupportsElevation && ((_stac$rasterTileServe = stac.rasterTileServerUrls) === null || _stac$rasterTileServe === void 0 ? void 0 : _stac$rasterTileServe.length) && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
252
|
+
label: "Terrain"
|
|
253
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enableTerrain))));
|
|
254
|
+
}
|
|
255
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, availablePresets && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
256
|
+
label: "Image Selection",
|
|
257
|
+
collapsible: false
|
|
258
|
+
}), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "Preset"), /*#__PURE__*/_react["default"].createElement(InfoHelper, {
|
|
259
|
+
id: "preset",
|
|
260
|
+
description: "Select a preset to describe how to combine spectral bands."
|
|
261
|
+
})), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
|
|
262
|
+
selectedItems: selectedPreset,
|
|
263
|
+
options: presetOptions,
|
|
264
|
+
multiSelect: false,
|
|
265
|
+
searchable: false,
|
|
266
|
+
displayOption: "label",
|
|
267
|
+
getOptionValue: "id",
|
|
268
|
+
onChange: function onChange(newPreset) {
|
|
269
|
+
var overrides = updateColorParamsOnPresetChange(stac, visConfiguratorProps.layer.config.visConfig.preset, newPreset);
|
|
270
|
+
visConfiguratorProps.onChange(_objectSpread(_objectSpread({}, overrides), {}, {
|
|
271
|
+
preset: newPreset
|
|
272
|
+
}));
|
|
273
|
+
}
|
|
274
|
+
}), selectedPreset !== null && selectedPreset !== void 0 && selectedPreset.description ? /*#__PURE__*/_react["default"].createElement(DescriptionText, null, selectedPreset === null || selectedPreset === void 0 ? void 0 : selectedPreset.description, selectedPreset !== null && selectedPreset !== void 0 && selectedPreset.infoUrl ? /*#__PURE__*/_react["default"].createElement("a", {
|
|
275
|
+
target: "_blank",
|
|
276
|
+
rel: "noopener noreferrer",
|
|
277
|
+
href: selectedPreset === null || selectedPreset === void 0 ? void 0 : selectedPreset.infoUrl
|
|
278
|
+
}, "More Info") : null) : null), selectedPreset.id === 'singleBand' && /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "Single Band Name"), /*#__PURE__*/_react["default"].createElement(InfoHelper, {
|
|
279
|
+
id: "".concat(layer.id, "-single-band-name"),
|
|
280
|
+
description: "Select a single band."
|
|
281
|
+
})), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
|
|
282
|
+
selectedItems: selectedSingleBandName,
|
|
283
|
+
options: singleBandOptions,
|
|
284
|
+
multiSelect: false,
|
|
285
|
+
searchable: false,
|
|
286
|
+
displayOption: "label",
|
|
287
|
+
getOptionValue: "id",
|
|
288
|
+
onChange: function onChange(val) {
|
|
289
|
+
visConfiguratorProps.onChange({
|
|
290
|
+
singleBandName: val
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
})), STAC_SEARCH_UI_ENABLED && stacSearchAllowed && /*#__PURE__*/_react["default"].createElement(CustomVisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.useSTACSearching, visConfiguratorProps)), STAC_SEARCH_UI_ENABLED && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, stacSearchAllowed && useSTACSearching ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "STAC Search Provider")), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], (0, _extends2["default"])({}, layer.visConfigSettings.stacSearchProvider, {
|
|
294
|
+
selectedItems: findVisConfigItemById(layer, 'stacSearchProvider'),
|
|
295
|
+
placeholder: "Choose search provider",
|
|
296
|
+
multiSelect: false,
|
|
297
|
+
searchable: false,
|
|
298
|
+
displayOption: "label",
|
|
299
|
+
getOptionValue: "id",
|
|
300
|
+
onChange: function onChange(val) {
|
|
301
|
+
// TODO: check when switching layers so that you don't mismatch allowed mosaics with layers
|
|
302
|
+
visConfiguratorProps.onChange({
|
|
303
|
+
stacSearchProvider: val
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
})), /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "Date Range")), /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
|
|
307
|
+
type: "text",
|
|
308
|
+
id: "".concat(layer.id, "-startDate"),
|
|
309
|
+
onChange: function onChange(_ref6) {
|
|
310
|
+
var value = _ref6.target.value;
|
|
311
|
+
visConfiguratorProps.onChange({
|
|
312
|
+
startDate: value
|
|
313
|
+
});
|
|
314
|
+
},
|
|
315
|
+
value: layer.config.visConfig.startDate
|
|
316
|
+
}), /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
|
|
317
|
+
type: "text",
|
|
318
|
+
id: "".concat(layer.id, "-endDate"),
|
|
319
|
+
onChange: function onChange(_ref7) {
|
|
320
|
+
var value = _ref7.target.value;
|
|
321
|
+
visConfiguratorProps.onChange({
|
|
322
|
+
endDate: value
|
|
323
|
+
});
|
|
324
|
+
},
|
|
325
|
+
value: layer.config.visConfig.endDate
|
|
326
|
+
}), /*#__PURE__*/_react["default"].createElement(DescriptionText, null, "Date format must be \"YYYY-MM-DD\"")) : null)), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
327
|
+
label: "Visual Settings",
|
|
328
|
+
collapsible: false
|
|
329
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)), colormapAllowed && /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "Colormap"), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
|
|
330
|
+
selectedItems: selectedColormap,
|
|
331
|
+
options: colormapOptions,
|
|
332
|
+
multiSelect: false,
|
|
333
|
+
displayOption: "label",
|
|
334
|
+
getOptionValue: "id",
|
|
335
|
+
onChange: function onChange(val) {
|
|
336
|
+
visConfiguratorProps.onChange({
|
|
337
|
+
colormapId: val
|
|
338
|
+
});
|
|
339
|
+
},
|
|
340
|
+
DropDownLineItemRenderComponent: ColorMapListItem,
|
|
341
|
+
filterOption: "label",
|
|
342
|
+
searchable: true
|
|
343
|
+
}))), rescalingAllowed && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
344
|
+
label: "Rescaling"
|
|
345
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.dynamicColor, {
|
|
346
|
+
disabled: isDynamicColorsOnly
|
|
347
|
+
})), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.nonLinearRescaling, visConfiguratorProps, {
|
|
348
|
+
label: nonLinearRescaling ? 'Non-Linear Rescaling' : 'Linear Rescaling'
|
|
349
|
+
})), nonLinearRescaling ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.gammaContrastFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sigmoidalContrastFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sigmoidalBiasFactor, visConfiguratorProps))) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.linearRescalingFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.saturationValue, visConfiguratorProps))), filterAllowed && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filterEnabled, visConfiguratorProps, {
|
|
350
|
+
collapsible: true
|
|
351
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.filterRange, visConfiguratorProps))), (0, _utils.getApplicationConfig)().rasterServerSupportsElevation && ((_stac$rasterTileServe2 = stac.rasterTileServerUrls) === null || _stac$rasterTileServe2 === void 0 ? void 0 : _stac$rasterTileServe2.length) && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
352
|
+
label: "Terrain"
|
|
353
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enableTerrain))));
|
|
354
|
+
};
|
|
355
|
+
return STACCheckConfiguratorWrapper;
|
|
356
|
+
}
|
|
357
|
+
var _default = exports["default"] = RasterTileLayerConfiguratorFactory;
|
|
358
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfcmFzdGVyVGlsZUNvbG9ybWFwTGlzdEl0ZW0iLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfc3dpdGNoIiwiX2luZm9IZWxwZXIiLCJfaXRlbVNlbGVjdG9yIiwiX3Zpc0NvbmZpZ1NsaWRlciIsIl9sYXllckNvbmZpZ0dyb3VwIiwiX3Zpc0NvbmZpZ1N3aXRjaCIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU1RBQ19TRUFSQ0hfVUlfRU5BQkxFRCIsIlN0eWxlZFZpc0NvbmZpZ1N3aXRjaCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiQ3VzdG9tVmlzQ29uZmlnU3dpdGNoIiwiX3JlZiIsIl9yZWYkbGF5ZXIiLCJsYXllciIsImlkIiwiY29uZmlnIiwicHJvcGVydHkiLCJvbkNoYW5nZSIsImxhYmVsIiwiZGlzYWJsZWQiLCJjcmVhdGVFbGVtZW50IiwiU2lkZVBhbmVsU2VjdGlvbiIsIkJvb2xlYW4iLCJjbGFzc05hbWUiLCJQYW5lbExhYmVsV3JhcHBlciIsIlBhbmVsTGFiZWwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiY2FwaXRhbGl6ZUZpcnN0TGV0dGVyIiwiY2hlY2tlZCIsInZpc0NvbmZpZyIsImNvbmNhdCIsIlN0eWxlZExheWVyQ29uZmlndXJhdG9yIiwiRGVzY3JpcHRpb25UZXh0IiwicHJvcHMiLCJ0aGVtZSIsInN1YnRleHRDb2xvciIsImZpbmRWaXNDb25maWdJdGVtQnlJZCIsInByb3AiLCJ2aXNDb25maWdTZXR0aW5ncyIsIm9wdGlvbnMiLCJmaW5kIiwib3AiLCJmaW5kSXRlbUJ5SWQiLCJnZXRCYW5kU2VsZWN0b3JPcHRpb25zIiwic3RhYyIsImVvQmFuZHMiLCJnZXRFT0JhbmRzIiwibWFwIiwiZW9CYW5kIiwibmFtZSIsImNvbW1vbl9uYW1lIiwiZ2V0Q2F0ZWdvcmljYWxDb2xvcm1hcExpc3RJdGVtIiwiY2F0ZWdvcmljYWxDb2xvck1hcCIsImNhdGVnb3JpY2FsSXRlbSIsIkNBVEVHT1JJQ0FMX0NPTE9STUFQX0lEIiwiaXNEYXRhU291cmNlQ29sb3JSYW5nZUF2YWlsYWJsZSIsInByZXNldCIsInNpbmdsZUJhbmRQcmVzZXRPcHRpb25zIiwibWluUGl4ZWxWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJkYXRhU291cmNlUGFyYW1zIiwiZ2V0RGF0YVNvdXJjZVBhcmFtcyIsInNpbmdsZUJhbmQiLCJ1cGRhdGVDb2xvclBhcmFtc09uUHJlc2V0Q2hhbmdlIiwib2xkUHJlc2V0IiwibmV3UHJlc2V0IiwiY29sb3JQYXJhbXMiLCJjb2xvck92ZXJyaWRlcyIsIkRBVEFfU09VUkNFX0NPTE9SX0RFRkFVTFRTIiwiYmFuZE9mSW50ZXJlc3QiLCJSQVNURVJfQ09MT1JfUkVTRVRfUEFSQU1TIiwiUmFzdGVyVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSIsIlZpc0NvbmZpZ1NsaWRlckZhY3RvcnkiLCJJbmZvSGVscGVyRmFjdG9yeSIsIlZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkiLCJMYXllckNvbmZpZ0dyb3VwIiwiVmlzQ29uZmlnU2xpZGVyIiwiSW5mb0hlbHBlciIsIlZpc0NvbmZpZ1N3aXRjaCIsIlNUQUNDaGVja0NvbmZpZ3VyYXRvcldyYXBwZXIiLCJfcmVmMiIsInZpc0NvbmZpZ3VyYXRvclByb3BzIiwiZGF0YXNldCIsIm1ldGFkYXRhIiwiUmFzdGVyVGlsZUxheWVyQ29uZmlndXJhdG9yIiwiX3JlZjMiLCJfc3RhYyRyYXN0ZXJUaWxlU2VydmUyIiwiX2xheWVyJGNvbmZpZyR2aXNDb25mIiwibm9uTGluZWFyUmVzY2FsaW5nIiwidXNlU1RBQ1NlYXJjaGluZyIsImNvbG9yUmFuZ2UiLCJjb2xvck1hcCIsImR5bmFtaWNDb2xvciIsInNpbmdsZUJhbmROYW1lIiwiYXZhaWxhYmxlUHJlc2V0cyIsInVzZU1lbW8iLCJmaWx0ZXJBdmFpbGFibGVQcmVzZXRzIiwiUFJFU0VUX09QVElPTlMiLCJwcmVzZXRPcHRpb25zIiwiX3JlZjQiLCJpbmNsdWRlcyIsInNpbmdsZUJhbmRPcHRpb25zIiwiY29sb3JtYXBPcHRpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNvbG9ybWFwSWQiLCJjYXRlZ29yaWNhbExpc3RJdGVtIiwiX3JlZjUiLCJiYW5kQ29tYmluYXRpb24iLCJjb2xvcm1hcEFsbG93ZWQiLCJpc0NvbG9ybWFwQWxsb3dlZCIsInJlc2NhbGluZ0FsbG93ZWQiLCJpc1Jlc2NhbGluZ0FsbG93ZWQiLCJmaWx0ZXJBbGxvd2VkIiwiaXNGaWx0ZXJBbGxvd2VkIiwic3RhY1NlYXJjaEFsbG93ZWQiLCJpc1NlYXJjaGFibGVTdGFjIiwic2VsZWN0ZWRDb2xvcm1hcCIsInNlbGVjdGVkUHJlc2V0Iiwic2VsZWN0ZWRTaW5nbGVCYW5kTmFtZSIsImdldFNpbmdsZUJhbmRQcmVzZXRPcHRpb25zIiwiX2dldFJhc3RlclN0YXRpc3RpY3NNIiwiZ2V0UmFzdGVyU3RhdGlzdGljc01pbk1heCIsIl9nZXRSYXN0ZXJTdGF0aXN0aWNzTTIiLCJfc2xpY2VkVG9BcnJheTIiLCJtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSIsIm1heENhdGVnb3JpY2FsQmFuZFZhbHVlIiwiQ29sb3JNYXBMaXN0SXRlbSIsImdldENvbG9yTWFwTGlzdEl0ZW1Db21wb25lbnQiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwiaXNEeW5hbWljQ29sb3JzT25seSIsInVzZUVmZmVjdCIsInBtdGlsZXNUeXBlIiwiUE1UaWxlc1R5cGUiLCJSQVNURVIiLCJfc3RhYyRyYXN0ZXJUaWxlU2VydmUiLCJfZXh0ZW5kczIiLCJjb2xsYXBzaWJsZSIsIm9wYWNpdHkiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInJhc3RlclNlcnZlclN1cHBvcnRzRWxldmF0aW9uIiwicmFzdGVyVGlsZVNlcnZlclVybHMiLCJlbmFibGVUZXJyYWluIiwiZGVzY3JpcHRpb24iLCJzZWxlY3RlZEl0ZW1zIiwibXVsdGlTZWxlY3QiLCJzZWFyY2hhYmxlIiwiZGlzcGxheU9wdGlvbiIsImdldE9wdGlvblZhbHVlIiwib3ZlcnJpZGVzIiwiaW5mb1VybCIsInRhcmdldCIsInJlbCIsImhyZWYiLCJ2YWwiLCJGcmFnbWVudCIsInN0YWNTZWFyY2hQcm92aWRlciIsInBsYWNlaG9sZGVyIiwiSW5wdXQiLCJ0eXBlIiwiX3JlZjYiLCJ2YWx1ZSIsInN0YXJ0RGF0ZSIsIl9yZWY3IiwiZW5kRGF0ZSIsIkRyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnQiLCJmaWx0ZXJPcHRpb24iLCJnYW1tYUNvbnRyYXN0RmFjdG9yIiwic2lnbW9pZGFsQ29udHJhc3RGYWN0b3IiLCJzaWdtb2lkYWxCaWFzRmFjdG9yIiwibGluZWFyUmVzY2FsaW5nRmFjdG9yIiwic2F0dXJhdGlvblZhbHVlIiwiZmlsdGVyRW5hYmxlZCIsImZpbHRlclJhbmdlIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvcmFzdGVyLXRpbGUtbGF5ZXItY29uZmlndXJhdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge1BNVGlsZXNUeXBlfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBmaWx0ZXJBdmFpbGFibGVQcmVzZXRzLFxuICBnZXRFT0JhbmRzLFxuICBnZXRSYXN0ZXJTdGF0aXN0aWNzTWluTWF4LFxuICBnZXRTaW5nbGVCYW5kUHJlc2V0T3B0aW9ucyxcbiAgaXNDb2xvcm1hcEFsbG93ZWQsXG4gIGlzRmlsdGVyQWxsb3dlZCxcbiAgaXNSZXNjYWxpbmdBbGxvd2VkLFxuICBpc1NlYXJjaGFibGVTdGFjLFxuICBDb21wbGV0ZVNUQUNPYmplY3QsXG4gIEdldFRpbGVEYXRhQ3VzdG9tUHJvcHMsXG4gIERhdGFTb3VyY2VQYXJhbXMsXG4gIFByZXNldE9wdGlvbixcbiAgUmFzdGVyVGlsZUxheWVyLFxuICBDQVRFR09SSUNBTF9DT0xPUk1BUF9JRCxcbiAgUFJFU0VUX09QVElPTlMsXG4gIFJBU1RFUl9DT0xPUl9SRVNFVF9QQVJBTVMsXG4gIERBVEFfU09VUkNFX0NPTE9SX0RFRkFVTFRTXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtjYXBpdGFsaXplRmlyc3RMZXR0ZXIsIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7S2VwbGVyVGFibGUgYXMgS2VwbGVyRGF0YXNldH0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQgdHlwZSB7U3RhY1R5cGVzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtnZXRDb2xvck1hcExpc3RJdGVtQ29tcG9uZW50fSBmcm9tICcuL3Jhc3Rlci10aWxlLWNvbG9ybWFwLWxpc3QtaXRlbSc7XG5cbmltcG9ydCB7XG4gIElucHV0LFxuICBQYW5lbExhYmVsLFxuICBQYW5lbExhYmVsV3JhcHBlcixcbiAgU2lkZVBhbmVsU2VjdGlvblxufSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFN3aXRjaCBmcm9tICcuLi8uLi9jb21tb24vc3dpdGNoJztcbmltcG9ydCBJbmZvSGVscGVyRmFjdG9yeSBmcm9tICcuLi8uLi9jb21tb24vaW5mby1oZWxwZXInO1xuaW1wb3J0IEl0ZW1TZWxlY3RvciBmcm9tICcuLi8uLi9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcbmltcG9ydCBWaXNDb25maWdTbGlkZXJGYWN0b3J5IGZyb20gJy4uLy4uL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvdmlzLWNvbmZpZy1zbGlkZXInO1xuaW1wb3J0IExheWVyQ29uZmlnR3JvdXBGYWN0b3J5IGZyb20gJy4uLy4uL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItY29uZmlnLWdyb3VwJztcbmltcG9ydCBWaXNDb25maWdTd2l0Y2hGYWN0b3J5IGZyb20gJy4uLy4uL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvdmlzLWNvbmZpZy1zd2l0Y2gnO1xuXG50eXBlIEVPQmFuZCA9IFN0YWNUeXBlcy5CYW5kO1xuXG5jb25zdCBTVEFDX1NFQVJDSF9VSV9FTkFCTEVEID0gdHJ1ZTtcblxuY29uc3QgU3R5bGVkVmlzQ29uZmlnU3dpdGNoID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC52aXMtY29uZmlnLXN3aXRjaF9fdGl0bGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbmA7XG5cbmNvbnN0IEN1c3RvbVZpc0NvbmZpZ1N3aXRjaCA9ICh7XG4gIGxheWVyOiB7aWQsIGNvbmZpZ30sXG4gIHByb3BlcnR5LFxuICBvbkNoYW5nZSxcbiAgbGFiZWwsXG4gIGRpc2FibGVkXG59OiB7XG4gIGxheWVyOiBSYXN0ZXJUaWxlTGF5ZXI7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgbGFiZWw6IHN0cmluZztcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG59KSA9PiAoXG4gIDxTaWRlUGFuZWxTZWN0aW9uIGRpc2FibGVkPXtCb29sZWFuKGRpc2FibGVkKX0+XG4gICAgPFN0eWxlZFZpc0NvbmZpZ1N3aXRjaCBjbGFzc05hbWU9XCJ2aXMtY29uZmlnLXN3aXRjaFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ2aXMtY29uZmlnLXN3aXRjaF9fdGl0bGVcIj5cbiAgICAgICAgPFBhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgIHtsYWJlbCA/IChcbiAgICAgICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgICAgICB7KGxhYmVsICYmIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXtsYWJlbH0gLz4pIHx8IGNhcGl0YWxpemVGaXJzdExldHRlcihwcm9wZXJ0eSl9XG4gICAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidmlzLWNvbmZpZy1zd2l0Y2hfX3N3aXRjaFwiPlxuICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgY2hlY2tlZD17Y29uZmlnLnZpc0NvbmZpZ1twcm9wZXJ0eV19XG4gICAgICAgICAgaWQ9e2Ake2lkfS0ke3Byb3BlcnR5fS1zd2l0Y2hgfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBvbkNoYW5nZSh7W3Byb3BlcnR5XTogIWNvbmZpZy52aXNDb25maWdbcHJvcGVydHldfSl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L1N0eWxlZFZpc0NvbmZpZ1N3aXRjaD5cbiAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuKTtcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tdG9wOiAxMnB4O1xuYDtcblxuY29uc3QgRGVzY3JpcHRpb25UZXh0ID0gc3R5bGVkKFBhbmVsTGFiZWwpYFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lO1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3J9O1xuXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gIH1cbmA7XG5cbi8vIFRPRE86IGNvbWJpbmUgdGhlc2UgdHdvIGhlbHBlcnMgaW50byBvbmVcbmZ1bmN0aW9uIGZpbmRWaXNDb25maWdJdGVtQnlJZChsYXllciwgcHJvcCkge1xuICByZXR1cm4gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3NbcHJvcF0ub3B0aW9ucy5maW5kKG9wID0+IG9wLmlkID09PSBsYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdKTtcbn1cblxuZnVuY3Rpb24gZmluZEl0ZW1CeUlkKGxheWVyLCBvcHRpb25zLCBwcm9wKSB7XG4gIC8vIEZvciBub3cgaXQncyBwb3NzaWJsZSB0aGF0IG5vbi1yYXN0ZXIgbWV0YWRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHJhc3RlciBjb25maWd1cmF0b3IsIHNvXG4gIC8vIG9wdGlvbnMgbWF5IGJlIG51bGxcbiAgcmV0dXJuIG9wdGlvbnM/LmZpbmQob3AgPT4gb3AuaWQgPT09IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF0pO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGRyb3AgZG93biBsYWJlbHMgZm9yIHNpbmdsZSBiYW5kIHNlbGVjdG9yXG4gKiBAcGFyYW0gc3RhYyAtIFNUQUMgaXRlbSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIGFycmF5IG9mIHtpZCwgbGFiZWx9IGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGdldEJhbmRTZWxlY3Rvck9wdGlvbnMoc3RhYzogQ29tcGxldGVTVEFDT2JqZWN0KToge2lkPzogc3RyaW5nOyBsYWJlbD86IHN0cmluZ31bXSB7XG4gIGNvbnN0IGVvQmFuZHMgPSBnZXRFT0JhbmRzKHN0YWMpIHx8IFtdO1xuICByZXR1cm4gZW9CYW5kcy5tYXAoKGVvQmFuZDogRU9CYW5kKSA9PiAoe1xuICAgIGlkOiBlb0JhbmQubmFtZSB8fCBlb0JhbmQuY29tbW9uX25hbWUsXG4gICAgbGFiZWw6IGVvQmFuZC5jb21tb25fbmFtZVxuICAgICAgPyBgJHtlb0JhbmQubmFtZSB8fCBlb0JhbmQuY29tbW9uX25hbWV9ICgke2VvQmFuZC5jb21tb25fbmFtZX0pYFxuICAgICAgOiBlb0JhbmQubmFtZVxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGdldENhdGVnb3JpY2FsQ29sb3JtYXBMaXN0SXRlbShjYXRlZ29yaWNhbENvbG9yTWFwKSB7XG4gIGxldCBjYXRlZ29yaWNhbEl0ZW06IHtsYWJlbDogc3RyaW5nOyBpZDogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbiAgaWYgKGNhdGVnb3JpY2FsQ29sb3JNYXApIHtcbiAgICBjYXRlZ29yaWNhbEl0ZW0gPSB7bGFiZWw6ICdDYXRlZ29yaWNhbCcsIGlkOiBDQVRFR09SSUNBTF9DT0xPUk1BUF9JRH07XG4gIH1cbiAgcmV0dXJuIGNhdGVnb3JpY2FsSXRlbTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBkYXRhIHNvdXJjZSBnbG9iYWwgcGl4ZWwgY29sb3IgcmFuZ2UgaXMgY2FsY3VsYXRlZCBjb3JyZWN0bHlcbiAqIEBwYXJhbSBsYXllciAtIHJhc3RlciBsYXllclxuICogQHBhcmFtIHN0YWMgLSBTVEFDIG1ldGFkYXRhIG9iamVjdFxuICogQHBhcmFtIHByZXNldCAtIHByZXNldCBuYW1lXG4gKiBAcGFyYW0gc2luZ2xlQmFuZFByZXNldE9wdGlvbnMgLSBvcHRpb25zIGZvciBzaW5nbGUgYmFuZCBwcmVzZXRcbiAqIEByZXR1cm5zIGJvb2xlYW4gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNEYXRhU291cmNlQ29sb3JSYW5nZUF2YWlsYWJsZShcbiAgbGF5ZXI6IFJhc3RlclRpbGVMYXllcixcbiAgc3RhYzogQ29tcGxldGVTVEFDT2JqZWN0LFxuICBwcmVzZXQ6IHN0cmluZyxcbiAgc2luZ2xlQmFuZFByZXNldE9wdGlvbnM6IFByZXNldE9wdGlvblsnc2luZ2xlQmFuZCddXG4pOiBib29sZWFuIHtcbiAgbGV0IG1pblBpeGVsVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgbWF4UGl4ZWxWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGRhdGFTb3VyY2VQYXJhbXM6IERhdGFTb3VyY2VQYXJhbXMgfCBudWxsID0gbGF5ZXIuZ2V0RGF0YVNvdXJjZVBhcmFtcyhzdGFjLCBwcmVzZXQsIHtcbiAgICBzaW5nbGVCYW5kOiBzaW5nbGVCYW5kUHJlc2V0T3B0aW9uc1xuICB9KTtcbiAgaWYgKGRhdGFTb3VyY2VQYXJhbXMpIHtcbiAgICBtaW5QaXhlbFZhbHVlID0gZGF0YVNvdXJjZVBhcmFtcy5taW5QaXhlbFZhbHVlO1xuICAgIG1heFBpeGVsVmFsdWUgPSBkYXRhU291cmNlUGFyYW1zLm1heFBpeGVsVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG1pblBpeGVsVmFsdWUgIT09IG51bGwgJiYgbWF4UGl4ZWxWYWx1ZSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGNvbG9yIHBhcmFtZXRlcnMgYmFzZWQgb24gYSBjaGFuZ2UgaW4gdmlzdWFsaXphdGlvbiBwcmVzZXQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhZGp1c3RzIHRoZSBjb2xvciBwcm9jZXNzaW5nIHBhcmFtZXRlcnMgd2hlbiB0aGUgdmlzdWFsaXphdGlvblxuICogcHJlc2V0IGNoYW5nZXMsIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHByZXNldCBpcyBzd2l0Y2hpbmcgdG8gb3IgZnJvbSBhXG4gKiBzaW5nbGUtYmFuZC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGFwcGx5IGNvbG9yXG4gKiBlbmhhbmNlbWVudHMgb3IgcmVzZXQgcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgcHJlc2V0IHRyYW5zaXRpb24uXG4gKlxuICogQHBhcmFtIHN0YWMgQSBTVEFDIChTcGF0aW9UZW1wb3JhbCBBc3NldCBDYXRhbG9nKSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkYXRhc2V0LlxuICogQHBhcmFtIG5ld1ByZXNldCBUaGUgb2xkIHZpc3VhbGl6YXRpb24gcHJlc2V0IGJlaW5nIGFwcGxpZWQuXG4gKiBAcGFyYW0gbmV3UHJlc2V0IFRoZSBuZXcgdmlzdWFsaXphdGlvbiBwcmVzZXQgYmVpbmcgYXBwbGllZC5cbiAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIGNvbG9yIHBhcmFtZXRlcnMgdG8gYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUNvbG9yUGFyYW1zT25QcmVzZXRDaGFuZ2UoXG4gIHN0YWM6IENvbXBsZXRlU1RBQ09iamVjdCxcbiAgb2xkUHJlc2V0OiBzdHJpbmcsXG4gIG5ld1ByZXNldDogc3RyaW5nXG4pIHtcbiAgbGV0IGNvbG9yUGFyYW1zID0ge307XG4gIGNvbnN0IGNvbG9yT3ZlcnJpZGVzID0gREFUQV9TT1VSQ0VfQ09MT1JfREVGQVVMVFNbc3RhYy5pZF07XG4gIGlmIChjb2xvck92ZXJyaWRlcykgcmV0dXJuIGNvbG9yUGFyYW1zO1xuXG4gIGNvbnN0IGJhbmRPZkludGVyZXN0ID0gJ3NpbmdsZUJhbmQnO1xuICBpZiAob2xkUHJlc2V0ID09PSBiYW5kT2ZJbnRlcmVzdCAmJiBuZXdQcmVzZXQgIT09IGJhbmRPZkludGVyZXN0KSB7XG4gICAgLy8gZW5jaGFuY2UgY29sb3JzIGZvciBtdWx0aWJhbmQgY29tYmluYXRpb25zXG4gICAgY29sb3JQYXJhbXMgPSBjb2xvck92ZXJyaWRlcztcbiAgfSBlbHNlIGlmIChvbGRQcmVzZXQgIT09IGJhbmRPZkludGVyZXN0ICYmIG5ld1ByZXNldCA9PT0gYmFuZE9mSW50ZXJlc3QpIHtcbiAgICAvLyByZXNldCBpbWFnZSBwcm9jZXNzbmcgcGFyYW1zXG4gICAgY29sb3JQYXJhbXMgPSBSQVNURVJfQ09MT1JfUkVTRVRfUEFSQU1TO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yUGFyYW1zO1xufVxuXG50eXBlIFJhc3RlclRpbGVMYXllckNvbmZpZ3VyYXRvclByb3BzID0ge1xuICBsYXllcjogUmFzdGVyVGlsZUxheWVyO1xuICB2aXNDb25maWd1cmF0b3JQcm9wczogYW55O1xuICBkYXRhc2V0OiBLZXBsZXJEYXRhc2V0O1xufTtcblxuUmFzdGVyVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeS5kZXBzID0gW1xuICBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSxcbiAgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSxcbiAgSW5mb0hlbHBlckZhY3RvcnksXG4gIFZpc0NvbmZpZ1N3aXRjaEZhY3Rvcnlcbl07XG5cbmZ1bmN0aW9uIFJhc3RlclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIExheWVyQ29uZmlnR3JvdXA6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29uZmlnR3JvdXBGYWN0b3J5PixcbiAgVmlzQ29uZmlnU2xpZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdTbGlkZXJGYWN0b3J5PixcbiAgSW5mb0hlbHBlcjogUmV0dXJuVHlwZTx0eXBlb2YgSW5mb0hlbHBlckZhY3Rvcnk+LFxuICBWaXNDb25maWdTd2l0Y2g6IFJldHVyblR5cGU8dHlwZW9mIFZpc0NvbmZpZ1N3aXRjaEZhY3Rvcnk+XG4pOiBSZWFjdC5GQzxSYXN0ZXJUaWxlTGF5ZXJDb25maWd1cmF0b3JQcm9wcz4ge1xuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgY29uZmlndXJhdG9yIHRvIGNoZWNrIGZvciBkYXRhc2V0Lm1ldGFkYXRhIGJlaW5nIG51bGwvdW5kZWZpbmVkXG4gICAqL1xuICBjb25zdCBTVEFDQ2hlY2tDb25maWd1cmF0b3JXcmFwcGVyID0gKHtcbiAgICBsYXllcixcbiAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICBkYXRhc2V0XG4gIH06IFJhc3RlclRpbGVMYXllckNvbmZpZ3VyYXRvclByb3BzKSA9PiB7XG4gICAgY29uc3Qgc3RhYyA9IGRhdGFzZXQ/Lm1ldGFkYXRhO1xuXG4gICAgLy8gSWYgbm8gZGF0YXNldCBpcyBsb2FkZWQgaW50byBLZXBsZXIsIHN0YWMgY2FuIGJlIHVuZGVmaW5lZFxuICAgIGlmICghc3RhYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSYXN0ZXJUaWxlTGF5ZXJDb25maWd1cmF0b3JcbiAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcz17dmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgIGRhdGFzZXQ9e2RhdGFzZXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3QgUmFzdGVyVGlsZUxheWVyQ29uZmlndXJhdG9yOiBSZWFjdC5GQzxSYXN0ZXJUaWxlTGF5ZXJDb25maWd1cmF0b3JQcm9wcz4gPSAoe1xuICAgIGxheWVyLFxuICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgIGRhdGFzZXRcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHByZXNldCxcbiAgICAgIG5vbkxpbmVhclJlc2NhbGluZyxcbiAgICAgIHVzZVNUQUNTZWFyY2hpbmcsXG4gICAgICBjb2xvclJhbmdlOiB7Y29sb3JNYXA6IGNhdGVnb3JpY2FsQ29sb3JNYXB9LFxuICAgICAgZHluYW1pY0NvbG9yLFxuICAgICAgc2luZ2xlQmFuZE5hbWVcbiAgICB9ID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZztcblxuICAgIGNvbnN0IHN0YWMgPSBkYXRhc2V0Py5tZXRhZGF0YSBhcyBHZXRUaWxlRGF0YUN1c3RvbVByb3BzWydzdGFjJ107XG5cbiAgICBjb25zdCBhdmFpbGFibGVQcmVzZXRzID0gdXNlTWVtbygoKSA9PiBmaWx0ZXJBdmFpbGFibGVQcmVzZXRzKHN0YWMsIFBSRVNFVF9PUFRJT05TKSwgW3N0YWNdKTtcblxuICAgIGNvbnN0IHByZXNldE9wdGlvbnMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT5cbiAgICAgICAgKFxuICAgICAgICAgIGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnByZXNldC5vcHRpb25zIGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgICAgfVtdXG4gICAgICAgICkuZmlsdGVyKCh7aWR9KSA9PiBhdmFpbGFibGVQcmVzZXRzPy5pbmNsdWRlcyhpZCkpLFxuICAgICAgW2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnByZXNldC5vcHRpb25zLCBhdmFpbGFibGVQcmVzZXRzXVxuICAgICk7XG4gICAgY29uc3Qgc2luZ2xlQmFuZE9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IGdldEJhbmRTZWxlY3Rvck9wdGlvbnMoc3RhYyksIFtzdGFjXSk7XG4gICAgY29uc3QgY29sb3JtYXBPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAgICAuLi4obGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JtYXBJZC5vcHRpb25zIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgICAgfVtdKVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNhdGVnb3JpY2FsTGlzdEl0ZW0gPSBnZXRDYXRlZ29yaWNhbENvbG9ybWFwTGlzdEl0ZW0oY2F0ZWdvcmljYWxDb2xvck1hcCk7XG4gICAgICBpZiAoY2F0ZWdvcmljYWxMaXN0SXRlbSkge1xuICAgICAgICBvcHRpb25zLnB1c2goY2F0ZWdvcmljYWxMaXN0SXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9LCBbbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JtYXBJZC5vcHRpb25zLCBjYXRlZ29yaWNhbENvbG9yTWFwXSk7XG5cbiAgICBjb25zdCB7YmFuZENvbWJpbmF0aW9ufSA9IFBSRVNFVF9PUFRJT05TW3ByZXNldF0gfHwge307XG4gICAgY29uc3QgY29sb3JtYXBBbGxvd2VkID0gaXNDb2xvcm1hcEFsbG93ZWQoYmFuZENvbWJpbmF0aW9uKTtcbiAgICBjb25zdCByZXNjYWxpbmdBbGxvd2VkID0gIWNhdGVnb3JpY2FsQ29sb3JNYXAgJiYgaXNSZXNjYWxpbmdBbGxvd2VkKGJhbmRDb21iaW5hdGlvbik7XG4gICAgY29uc3QgZmlsdGVyQWxsb3dlZCA9IGlzRmlsdGVyQWxsb3dlZChiYW5kQ29tYmluYXRpb24pO1xuXG4gICAgLy8gSGVyZSB3ZSBzaG93IHRoZSBVSSB3aGVuIHVzZVNUQUNTZWFyY2hpbmcgaXMgZXhwbGljaXRseSBzZXQgdG8gdHJ1ZSBzbyB0aGF0IHRoZSBVSSBzaG93cyB1cFxuICAgIGNvbnN0IHN0YWNTZWFyY2hBbGxvd2VkID0gaXNTZWFyY2hhYmxlU3RhYyhzdGFjKSB8fCB1c2VTVEFDU2VhcmNoaW5nO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2xvcm1hcCA9XG4gICAgICBmaW5kVmlzQ29uZmlnSXRlbUJ5SWQobGF5ZXIsICdjb2xvcm1hcElkJykgfHxcbiAgICAgIGdldENhdGVnb3JpY2FsQ29sb3JtYXBMaXN0SXRlbShjYXRlZ29yaWNhbENvbG9yTWFwKTtcbiAgICBjb25zdCBzZWxlY3RlZFByZXNldCA9IGZpbmRWaXNDb25maWdJdGVtQnlJZChsYXllciwgJ3ByZXNldCcpO1xuICAgIGNvbnN0IHNlbGVjdGVkU2luZ2xlQmFuZE5hbWUgPSBmaW5kSXRlbUJ5SWQobGF5ZXIsIHNpbmdsZUJhbmRPcHRpb25zLCAnc2luZ2xlQmFuZE5hbWUnKTtcblxuICAgIGNvbnN0IHNpbmdsZUJhbmRQcmVzZXRPcHRpb25zID0gZ2V0U2luZ2xlQmFuZFByZXNldE9wdGlvbnMoc3RhYywgc2luZ2xlQmFuZE5hbWUpO1xuICAgIGNvbnN0IFttaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSwgbWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWVdID0gZ2V0UmFzdGVyU3RhdGlzdGljc01pbk1heChcbiAgICAgIHN0YWMsXG4gICAgICBwcmVzZXQsXG4gICAgICBzaW5nbGVCYW5kUHJlc2V0T3B0aW9uc1xuICAgICk7XG4gICAgY29uc3QgQ29sb3JNYXBMaXN0SXRlbSA9IHVzZU1lbW8oXG4gICAgICAoKSA9PlxuICAgICAgICBnZXRDb2xvck1hcExpc3RJdGVtQ29tcG9uZW50KHtcbiAgICAgICAgICBjb2xvck1hcDogY2F0ZWdvcmljYWxDb2xvck1hcCxcbiAgICAgICAgICBtaW5WYWx1ZTogbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgICAgICAgbWF4VmFsdWU6IG1heENhdGVnb3JpY2FsQmFuZFZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgW2NhdGVnb3JpY2FsQ29sb3JNYXAsIG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlLCBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZV1cbiAgICApO1xuICAgIGNvbnN0IGlzRHluYW1pY0NvbG9yc09ubHkgPSAhaXNEYXRhU291cmNlQ29sb3JSYW5nZUF2YWlsYWJsZShcbiAgICAgIGxheWVyLFxuICAgICAgc3RhYyxcbiAgICAgIHByZXNldCxcbiAgICAgIHNpbmdsZUJhbmRQcmVzZXRPcHRpb25zXG4gICAgKTtcblxuICAgIC8vIERlZmF1bHQgb2YgYGR5bmFtaWNDb2xvcmAgaXMgZmFsc2UuIFNldCBpdCB0cnVlIGlmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgZGF0YSBzb3VyY2VcbiAgICAvLyB3aWRlIGNvbG9yIHJhbmdlXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc0R5bmFtaWNDb2xvcnNPbmx5ICYmICFkeW5hbWljQ29sb3IpIHtcbiAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe2R5bmFtaWNDb2xvcjogdHJ1ZX0pO1xuICAgICAgfVxuICAgIH0sIFt2aXNDb25maWd1cmF0b3JQcm9wcywgZHluYW1pY0NvbG9yLCBpc0R5bmFtaWNDb2xvcnNPbmx5XSk7XG5cbiAgICAvLyBGb3IgUE1UaWxlcyBpbiByYXN0ZXIgZm9ybWF0LCBvbmx5IHNob3cgb3BhY2l0eSBhbmQgdGVycmFpbiBvcHRpb25zIGZvciBub3dcbiAgICBpZiAoc3RhYy5wbXRpbGVzVHlwZSA9PT0gUE1UaWxlc1R5cGUuUkFTVEVSKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cIlZpc3VhbCBTZXR0aW5nc1wiIGNvbGxhcHNpYmxlPXtmYWxzZX0+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHtnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnJhc3RlclNlcnZlclN1cHBvcnRzRWxldmF0aW9uICYmXG4gICAgICAgICAgICBzdGFjLnJhc3RlclRpbGVTZXJ2ZXJVcmxzPy5sZW5ndGggJiYgKFxuICAgICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwiVGVycmFpblwiPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2hcbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVUZXJyYWlufVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICAgIHthdmFpbGFibGVQcmVzZXRzICYmIChcbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwiSW1hZ2UgU2VsZWN0aW9uXCIgY29sbGFwc2libGU9e2ZhbHNlfT5cbiAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgPFBhbmVsTGFiZWw+UHJlc2V0PC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgIDxJbmZvSGVscGVyXG4gICAgICAgICAgICAgICAgICBpZD1cInByZXNldFwiXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIlNlbGVjdCBhIHByZXNldCB0byBkZXNjcmliZSBob3cgdG8gY29tYmluZSBzcGVjdHJhbCBiYW5kcy5cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXtzZWxlY3RlZFByZXNldH1cbiAgICAgICAgICAgICAgICBvcHRpb25zPXtwcmVzZXRPcHRpb25zfVxuICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0PXtmYWxzZX1cbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNwbGF5T3B0aW9uPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtuZXdQcmVzZXQgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGVzID0gdXBkYXRlQ29sb3JQYXJhbXNPblByZXNldENoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgc3RhYyxcbiAgICAgICAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMubGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5wcmVzZXQsXG4gICAgICAgICAgICAgICAgICAgIG5ld1ByZXNldCBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZSh7Li4ub3ZlcnJpZGVzLCBwcmVzZXQ6IG5ld1ByZXNldH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFByZXNldD8uZGVzY3JpcHRpb24gPyAoXG4gICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZFByZXNldD8uZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRQcmVzZXQ/LmluZm9VcmwgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBocmVmPXtzZWxlY3RlZFByZXNldD8uaW5mb1VybH0+XG4gICAgICAgICAgICAgICAgICAgICAgTW9yZSBJbmZvXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvRGVzY3JpcHRpb25UZXh0PlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cblxuICAgICAgICAgICAge3NlbGVjdGVkUHJlc2V0LmlkID09PSAnc2luZ2xlQmFuZCcgJiYgKFxuICAgICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5TaW5nbGUgQmFuZCBOYW1lPC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgICAgPEluZm9IZWxwZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake2xheWVyLmlkfS1zaW5nbGUtYmFuZC1uYW1lYH1cbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJTZWxlY3QgYSBzaW5nbGUgYmFuZC5cIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e3NlbGVjdGVkU2luZ2xlQmFuZE5hbWV9XG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtzaW5nbGVCYW5kT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0PXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgZGlzcGxheU9wdGlvbj1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3ZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtzaW5nbGVCYW5kTmFtZTogdmFsfSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtTVEFDX1NFQVJDSF9VSV9FTkFCTEVEICYmIHN0YWNTZWFyY2hBbGxvd2VkICYmIChcbiAgICAgICAgICAgICAgPEN1c3RvbVZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy51c2VTVEFDU2VhcmNoaW5nfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtTVEFDX1NFQVJDSF9VSV9FTkFCTEVEICYmIChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7c3RhY1NlYXJjaEFsbG93ZWQgJiYgdXNlU1RBQ1NlYXJjaGluZyA/IChcbiAgICAgICAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFBhbmVsTGFiZWw+U1RBQyBTZWFyY2ggUHJvdmlkZXI8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3RhY1NlYXJjaFByb3ZpZGVyfVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e2ZpbmRWaXNDb25maWdJdGVtQnlJZChsYXllciwgJ3N0YWNTZWFyY2hQcm92aWRlcicpfVxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIHNlYXJjaCBwcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlPcHRpb249XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3ZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBjaGVjayB3aGVuIHN3aXRjaGluZyBsYXllcnMgc28gdGhhdCB5b3UgZG9uJ3QgbWlzbWF0Y2ggYWxsb3dlZCBtb3NhaWNzIHdpdGggbGF5ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZSh7c3RhY1NlYXJjaFByb3ZpZGVyOiB2YWx9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5EYXRlIFJhbmdlPC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake2xheWVyLmlkfS1zdGFydERhdGVgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoe3RhcmdldDoge3ZhbHVlfX0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtzdGFydERhdGU6IHZhbHVlfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdGFydERhdGV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7bGF5ZXIuaWR9LWVuZERhdGVgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoe3RhcmdldDoge3ZhbHVlfX0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtlbmREYXRlOiB2YWx1ZX0pO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2xheWVyLmNvbmZpZy52aXNDb25maWcuZW5kRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uVGV4dD5EYXRlIGZvcm1hdCBtdXN0IGJlIFwiWVlZWS1NTS1ERFwiPC9EZXNjcmlwdGlvblRleHQ+XG4gICAgICAgICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICl9XG5cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cIlZpc3VhbCBTZXR0aW5nc1wiIGNvbGxhcHNpYmxlPXtmYWxzZX0+XG4gICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgIHtjb2xvcm1hcEFsbG93ZWQgJiYgKFxuICAgICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgIDxQYW5lbExhYmVsPkNvbG9ybWFwPC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17c2VsZWN0ZWRDb2xvcm1hcH1cbiAgICAgICAgICAgICAgICBvcHRpb25zPXtjb2xvcm1hcE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGRpc3BsYXlPcHRpb249XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3ZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZSh7Y29sb3JtYXBJZDogdmFsfSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50PXtDb2xvck1hcExpc3RJdGVtfVxuICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbj1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBSZXNjYWxpbmcgKi99XG4gICAgICAgIHtyZXNjYWxpbmdBbGxvd2VkICYmIChcbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwiUmVzY2FsaW5nXCI+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmR5bmFtaWNDb2xvcn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRHluYW1pY0NvbG9yc09ubHl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mubm9uTGluZWFyUmVzY2FsaW5nfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtub25MaW5lYXJSZXNjYWxpbmcgPyAnTm9uLUxpbmVhciBSZXNjYWxpbmcnIDogJ0xpbmVhciBSZXNjYWxpbmcnfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgey8qIFRPRE86IGFkZCBzbGlkZXJzIGZvciByZWQsIGdyZWVuLCBibHVlLCBub3QgYSBzaW5nbGUgc2xpZGVyICovfVxuICAgICAgICAgICAge25vbkxpbmVhclJlc2NhbGluZyA/IChcbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZ2FtbWFDb250cmFzdEZhY3Rvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaWdtb2lkYWxDb250cmFzdEZhY3Rvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaWdtb2lkYWxCaWFzRmFjdG9yfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5saW5lYXJSZXNjYWxpbmdGYWN0b3J9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2F0dXJhdGlvblZhbHVlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZmlsdGVyQWxsb3dlZCAmJiAoXG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWx0ZXJFbmFibGVkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWx0ZXJSYW5nZX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgKX1cblxuICAgICAgICB7Z2V0QXBwbGljYXRpb25Db25maWcoKS5yYXN0ZXJTZXJ2ZXJTdXBwb3J0c0VsZXZhdGlvbiAmJlxuICAgICAgICAgIHN0YWMucmFzdGVyVGlsZVNlcnZlclVybHM/Lmxlbmd0aCAmJiAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwiVGVycmFpblwiPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVUZXJyYWlufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICl9XG4gICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFNUQUNDaGVja0NvbmZpZ3VyYXRvcldyYXBwZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBbUJBLElBQUFLLGFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQUlBLElBQUFPLDJCQUFBLEdBQUFQLE9BQUE7QUFFQSxJQUFBUSxrQkFBQSxHQUFBUixPQUFBO0FBTUEsSUFBQVMsT0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsV0FBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsYUFB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
|
|
@@ -17,6 +17,6 @@ declare type Props = {
|
|
|
17
17
|
};
|
|
18
18
|
declare function VectorTileLayerConfiguratorFactory(ChannelByValueSelector: ReturnType<typeof ChannelByValueSelectorFactory>, LayerColorRangeSelector: ReturnType<typeof LayerColorRangeSelectorFactory>, LayerColorSelector: ReturnType<typeof LayerColorSelectorFactory>, LayerConfigGroup: ReturnType<typeof LayerConfigGroupFactory>, VisConfigSlider: ReturnType<typeof VisConfigSliderFactory>, VisConfigSwitch: ReturnType<typeof VisConfigSwitchFactory>): React.FC<Props>;
|
|
19
19
|
declare namespace VectorTileLayerConfiguratorFactory {
|
|
20
|
-
var deps: (typeof VisConfigSwitchFactory | typeof
|
|
20
|
+
var deps: (typeof VisConfigSwitchFactory | typeof LayerConfigGroupFactory | typeof VisConfigSliderFactory | typeof SourceDataSelectorFactory | typeof ChannelByValueSelectorFactory | typeof LayerColorSelectorFactory | typeof LayerColorRangeSelectorFactory)[];
|
|
21
21
|
}
|
|
22
22
|
export default VectorTileLayerConfiguratorFactory;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/components",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.5",
|
|
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.1.
|
|
42
|
-
"@kepler.gl/cloud-providers": "3.1.
|
|
43
|
-
"@kepler.gl/common-utils": "3.1.
|
|
44
|
-
"@kepler.gl/constants": "3.1.
|
|
45
|
-
"@kepler.gl/effects": "3.1.
|
|
46
|
-
"@kepler.gl/layers": "3.1.
|
|
47
|
-
"@kepler.gl/localization": "3.1.
|
|
48
|
-
"@kepler.gl/processors": "3.1.
|
|
49
|
-
"@kepler.gl/reducers": "3.1.
|
|
50
|
-
"@kepler.gl/schemas": "3.1.
|
|
51
|
-
"@kepler.gl/styles": "3.1.
|
|
52
|
-
"@kepler.gl/table": "3.1.
|
|
53
|
-
"@kepler.gl/types": "3.1.
|
|
54
|
-
"@kepler.gl/utils": "3.1.
|
|
41
|
+
"@kepler.gl/actions": "3.1.5",
|
|
42
|
+
"@kepler.gl/cloud-providers": "3.1.5",
|
|
43
|
+
"@kepler.gl/common-utils": "3.1.5",
|
|
44
|
+
"@kepler.gl/constants": "3.1.5",
|
|
45
|
+
"@kepler.gl/effects": "3.1.5",
|
|
46
|
+
"@kepler.gl/layers": "3.1.5",
|
|
47
|
+
"@kepler.gl/localization": "3.1.5",
|
|
48
|
+
"@kepler.gl/processors": "3.1.5",
|
|
49
|
+
"@kepler.gl/reducers": "3.1.5",
|
|
50
|
+
"@kepler.gl/schemas": "3.1.5",
|
|
51
|
+
"@kepler.gl/styles": "3.1.5",
|
|
52
|
+
"@kepler.gl/table": "3.1.5",
|
|
53
|
+
"@kepler.gl/types": "3.1.5",
|
|
54
|
+
"@kepler.gl/utils": "3.1.5",
|
|
55
55
|
"@loaders.gl/mvt": "^4.3.2",
|
|
56
56
|
"@loaders.gl/pmtiles": "^4.3.2",
|
|
57
57
|
"@mapbox/mapbox-sdk": "^0.15.3",
|