UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

757 lines (665 loc) 91.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.AggregationTypeSelector = exports.AggrColorScaleSelector = exports.ChannelByValueSelector = exports.ColorRangeConfig = exports.ArcLayerColorSelector = exports.LayerColorSelector = exports.HowToButton = exports.default = undefined; var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends3 = require('babel-runtime/helpers/extends'); var _extends4 = _interopRequireDefault(_extends3); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral'); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); var _class, _temp; var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n position: relative;\n margin-top: 12px;\n'], ['\n position: relative;\n margin-top: 12px;\n']), _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n margin-top: 12px;\n'], ['\n margin-top: 12px;\n']), _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n position: absolute;\n right: 0;\n top: 0;\n'], ['\n position: absolute;\n right: 0;\n top: 0;\n']); // Copyright (c) 2018 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _styledComponents = require('styled-components'); var _styledComponents2 = _interopRequireDefault(_styledComponents); var _styledComponents3 = require('../../common/styled-components'); var _itemSelector = require('../../common/item-selector/item-selector'); var _itemSelector2 = _interopRequireDefault(_itemSelector); var _visConfigByFieldSelector = require('./vis-config-by-field-selector'); var _visConfigByFieldSelector2 = _interopRequireDefault(_visConfigByFieldSelector); var _layerColumnConfig = require('./layer-column-config'); var _layerColumnConfig2 = _interopRequireDefault(_layerColumnConfig); var _layerTypeSelector = require('./layer-type-selector'); var _layerTypeSelector2 = _interopRequireDefault(_layerTypeSelector); var _dimensionScaleSelector = require('./dimension-scale-selector'); var _dimensionScaleSelector2 = _interopRequireDefault(_dimensionScaleSelector); var _colorSelector = require('./color-selector'); var _colorSelector2 = _interopRequireDefault(_colorSelector); var _sourceDataSelector = require('../source-data-selector'); var _sourceDataSelector2 = _interopRequireDefault(_sourceDataSelector); var _visConfigSwitch = require('./vis-config-switch'); var _visConfigSwitch2 = _interopRequireDefault(_visConfigSwitch); var _visConfigSlider = require('./vis-config-slider'); var _visConfigSlider2 = _interopRequireDefault(_visConfigSlider); var _layerConfigGroup = require('./layer-config-group'); var _layerConfigGroup2 = _interopRequireDefault(_layerConfigGroup); var _textLabelPanel = require('./text-label-panel'); var _textLabelPanel2 = _interopRequireDefault(_textLabelPanel); var _layerFactory = require('../../../layers/layer-factory'); var _utils = require('../../../utils/utils'); var _defaultSettings = require('../../../constants/default-settings'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var StyledLayerConfigurator = _styledComponents2.default.div.attrs({ className: 'layer-panel__config' })(_templateObject); var StyledLayerVisualConfigurator = _styledComponents2.default.div.attrs({ className: 'layer-panel__config__visualC-config' })(_templateObject2); var LayerConfigurator = (_temp = _class = function (_Component) { (0, _inherits3.default)(LayerConfigurator, _Component); function LayerConfigurator() { (0, _classCallCheck3.default)(this, LayerConfigurator); return (0, _possibleConstructorReturn3.default)(this, (LayerConfigurator.__proto__ || Object.getPrototypeOf(LayerConfigurator)).apply(this, arguments)); } (0, _createClass3.default)(LayerConfigurator, [{ key: '_renderPointLayerConfig', value: function _renderPointLayerConfig(props) { return this._renderScatterplotLayerConfig(props); } }, { key: '_renderIconLayerConfig', value: function _renderIconLayerConfig(props) { return this._renderScatterplotLayerConfig(props); } }, { key: '_renderScatterplotLayerConfig', value: function _renderScatterplotLayerConfig(_ref) { var layer = _ref.layer, visConfiguratorProps = _ref.visConfiguratorProps, layerChannelConfigProps = _ref.layerChannelConfigProps, layerConfiguratorProps = _ref.layerConfiguratorProps; return _react2.default.createElement( StyledLayerVisualConfigurator, null, _react2.default.createElement( _layerConfigGroup2.default, { label: 'color' }, layer.config.colorField ? _react2.default.createElement(ColorRangeConfig, visConfiguratorProps) : _react2.default.createElement(LayerColorSelector, layerConfiguratorProps), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.color }, layerChannelConfigProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)) ), _react2.default.createElement( _layerConfigGroup2.default, { label: 'radius' }, !layer.config.sizeField ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.radius, visConfiguratorProps, { label: false, disabled: Boolean(layer.config.sizeField) })) : _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.radiusRange, visConfiguratorProps, { disabled: !layer.config.sizeField || layer.config.visConfig.fixedRadius })), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.size }, layerChannelConfigProps)), layer.config.sizeField ? _react2.default.createElement(_visConfigSwitch2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.fixedRadius, visConfiguratorProps, { disabled: !layer.config.sizeField })) : null ), layer.type === _defaultSettings.LAYER_TYPES.point ? _react2.default.createElement( _layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.outline, visConfiguratorProps), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps, { label: false, disabled: !layer.config.visConfig.outline })) ) : null, _react2.default.createElement(_textLabelPanel2.default, { visConfiguratorProps: visConfiguratorProps, layerConfiguratorProps: layerConfiguratorProps, textLabel: layer.config.textLabel }), _react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS['hi-precision'], visConfiguratorProps)) ); } }, { key: '_renderClusterLayerConfig', value: function _renderClusterLayerConfig(_ref2) { var layer = _ref2.layer, visConfiguratorProps = _ref2.visConfiguratorProps, layerConfiguratorProps = _ref2.layerConfiguratorProps, layerChannelConfigProps = _ref2.layerChannelConfigProps; return _react2.default.createElement( StyledLayerVisualConfigurator, null, _react2.default.createElement( _layerConfigGroup2.default, { label: 'color' }, _react2.default.createElement(ColorRangeConfig, visConfiguratorProps), _react2.default.createElement(AggrColorScaleSelector, layerConfiguratorProps), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.color }, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? _react2.default.createElement(AggregationTypeSelector, (0, _extends4.default)({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, { channel: layer.visualChannels.color })) : null, _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.opacity, visConfiguratorProps)) ), _react2.default.createElement( _layerConfigGroup2.default, { label: 'radius' }, _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.clusterRadius, visConfiguratorProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.radiusRange, visConfiguratorProps)) ) ); } }, { key: '_renderHeatmapLayerConfig', value: function _renderHeatmapLayerConfig(_ref3) { var layer = _ref3.layer, visConfiguratorProps = _ref3.visConfiguratorProps, layerConfiguratorProps = _ref3.layerConfiguratorProps, layerChannelConfigProps = _ref3.layerChannelConfigProps; return _react2.default.createElement( StyledLayerVisualConfigurator, null, _react2.default.createElement( _layerConfigGroup2.default, { label: 'color' }, _react2.default.createElement(ColorRangeConfig, visConfiguratorProps), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.opacity, visConfiguratorProps)) ), _react2.default.createElement( _layerConfigGroup2.default, { label: 'radius' }, _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.radius, visConfiguratorProps, { label: false })) ), _react2.default.createElement( _layerConfigGroup2.default, { label: 'weight' }, _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.weight }, layerChannelConfigProps)) ) ); } }, { key: '_renderGridLayerConfig', value: function _renderGridLayerConfig(props) { return this._renderAggregationLayerConfig(props); } }, { key: '_renderHexagonLayerConfig', value: function _renderHexagonLayerConfig(props) { return this._renderAggregationLayerConfig(props); } }, { key: '_renderAggregationLayerConfig', value: function _renderAggregationLayerConfig(_ref4) { var layer = _ref4.layer, visConfiguratorProps = _ref4.visConfiguratorProps, layerConfiguratorProps = _ref4.layerConfiguratorProps, layerChannelConfigProps = _ref4.layerChannelConfigProps; var config = layer.config; var enable3d = config.visConfig.enable3d; var elevationByDescription = 'When off, height is based on count of points'; var colorByDescription = 'When off, color is based on count of points'; return _react2.default.createElement( StyledLayerVisualConfigurator, null, _react2.default.createElement( _layerConfigGroup2.default, { label: 'color' }, _react2.default.createElement(ColorRangeConfig, visConfiguratorProps), _react2.default.createElement(AggrColorScaleSelector, layerConfiguratorProps), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.color }, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? _react2.default.createElement(AggregationTypeSelector, (0, _extends4.default)({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, { descreiption: colorByDescription, channel: layer.visualChannels.color })) : null, layer.visConfigSettings.percentile && layer.visConfigSettings.percentile.condition(layer.config) ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.percentile, visConfiguratorProps)) : null, _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.opacity, visConfiguratorProps)) ), _react2.default.createElement( _layerConfigGroup2.default, { label: 'radius' }, _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.worldUnitSize, visConfiguratorProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.coverage, visConfiguratorProps)) ), layer.visConfigSettings.enable3d ? _react2.default.createElement( _layerConfigGroup2.default, (0, _extends4.default)({}, layer.visConfigSettings.enable3d, visConfiguratorProps), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.elevationScale, visConfiguratorProps)), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({}, layerChannelConfigProps, { channel: layer.visualChannels.size, description: elevationByDescription, disabled: !enable3d })), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? _react2.default.createElement(AggregationTypeSelector, (0, _extends4.default)({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, { channel: layer.visualChannels.size })) : null, layer.visConfigSettings.elevationPercentile.condition(layer.config) ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null ) : null, _react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, layer.visConfigSettings['hi-precision'], visConfiguratorProps)) ); } // TODO: Shan move these into layer class }, { key: '_renderHexagonIdLayerConfig', value: function _renderHexagonIdLayerConfig(_ref5) { var layer = _ref5.layer, visConfiguratorProps = _ref5.visConfiguratorProps, layerConfiguratorProps = _ref5.layerConfiguratorProps, layerChannelConfigProps = _ref5.layerChannelConfigProps; return _react2.default.createElement( StyledLayerVisualConfigurator, null, _react2.default.createElement( _layerConfigGroup2.default, { label: 'color' }, layer.config.colorField ? _react2.default.createElement(ColorRangeConfig, visConfiguratorProps) : _react2.default.createElement(LayerColorSelector, layerConfiguratorProps), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.color }, layerChannelConfigProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)) ), _react2.default.createElement( _layerConfigGroup2.default, { label: 'coverage' }, !layer.config.coverageField ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.coverage, visConfiguratorProps)) : _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, layer.visConfigSettings.coverageRange, visConfiguratorProps)), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.coverage }, layerChannelConfigProps)) ), _react2.default.createElement( _layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.enable3d, visConfiguratorProps), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.size }, layerChannelConfigProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.elevationRange, visConfiguratorProps)) ), _react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS['hi-precision'], visConfiguratorProps)) ); } }, { key: '_renderArcLayerConfig', value: function _renderArcLayerConfig(args) { return this._renderLineLayerConfig(args); } }, { key: '_renderLineLayerConfig', value: function _renderLineLayerConfig(_ref6) { var layer = _ref6.layer, visConfiguratorProps = _ref6.visConfiguratorProps, layerConfiguratorProps = _ref6.layerConfiguratorProps, layerChannelConfigProps = _ref6.layerChannelConfigProps; return _react2.default.createElement( StyledLayerVisualConfigurator, null, _react2.default.createElement( _layerConfigGroup2.default, { label: 'color' }, layer.config.colorField ? _react2.default.createElement(ColorRangeConfig, visConfiguratorProps) : _react2.default.createElement(ArcLayerColorSelector, { layer: layer, onChangeConfig: layerConfiguratorProps.onChange, onChangeVisConfig: visConfiguratorProps.onChange }), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.color }, layerChannelConfigProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)) ), _react2.default.createElement( _layerConfigGroup2.default, { label: 'stroke' }, layer.config.sizeField ? _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.strokeWidthRange, visConfiguratorProps, { disabled: !layer.config.sizeField })) : _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps)), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.size }, layerChannelConfigProps)) ), _react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS['hi-precision'], visConfiguratorProps)) ); } }, { key: '_renderGeojsonLayerConfig', value: function _renderGeojsonLayerConfig(_ref7) { var layer = _ref7.layer, visConfiguratorProps = _ref7.visConfiguratorProps, layerConfiguratorProps = _ref7.layerConfiguratorProps, layerChannelConfigProps = _ref7.layerChannelConfigProps; var _layer$meta$featureTy = layer.meta.featureTypes, featureTypes = _layer$meta$featureTy === undefined ? {} : _layer$meta$featureTy, visConfig = layer.config.visConfig; return _react2.default.createElement( StyledLayerVisualConfigurator, null, _react2.default.createElement( _layerConfigGroup2.default, { label: 'color' }, featureTypes.polygon ? _react2.default.createElement(_visConfigSwitch2.default, (0, _extends4.default)({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.filled)) : null, layer.config.colorField ? _react2.default.createElement(ColorRangeConfig, visConfiguratorProps) : _react2.default.createElement(LayerColorSelector, layerConfiguratorProps), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.color }, layerChannelConfigProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.opacity, visConfiguratorProps)) ), featureTypes.line || featureTypes.polygon ? _react2.default.createElement( _layerConfigGroup2.default, (0, _extends4.default)({ label: 'stroke' }, visConfiguratorProps, featureTypes.polygon ? _layerFactory.LAYER_VIS_CONFIGS.stroked : {}), visConfig.stroked ? _react2.default.createElement( 'div', null, _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.thickness, visConfiguratorProps)), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.size }, layerChannelConfigProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.strokeWidthRange, visConfiguratorProps, { disabled: !layer.config.sizeField })) ) : null ) : null, featureTypes.polygon && visConfig.filled ? _react2.default.createElement( _layerConfigGroup2.default, (0, _extends4.default)({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.enable3d), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.elevationScale, visConfiguratorProps)), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.height }, layerChannelConfigProps)), _react2.default.createElement(_visConfigSwitch2.default, (0, _extends4.default)({}, visConfiguratorProps, _layerFactory.LAYER_VIS_CONFIGS.wireframe)) ) : null, featureTypes.point ? _react2.default.createElement( 'div', null, _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.radius, visConfiguratorProps, { label: 'Point Radius', disabled: Boolean(layer.config.radiusField) })), _react2.default.createElement(ChannelByValueSelector, (0, _extends4.default)({ channel: layer.visualChannels.radius }, layerChannelConfigProps)), _react2.default.createElement(_visConfigSlider2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS.radiusRange, visConfiguratorProps, { disabled: !layer.config.radiusField })) ) : null, _react2.default.createElement(_layerConfigGroup2.default, (0, _extends4.default)({}, _layerFactory.LAYER_VIS_CONFIGS['hi-precision'], visConfiguratorProps)) ); } }, { key: 'render', value: function render() { var _this2 = this; var _props = this.props, layer = _props.layer, datasets = _props.datasets, updateLayerConfig = _props.updateLayerConfig, layerTypeOptions = _props.layerTypeOptions, updateLayerType = _props.updateLayerType; var _ref8 = layer.config.dataId ? datasets[layer.config.dataId] : {}, _ref8$fields = _ref8.fields, fields = _ref8$fields === undefined ? [] : _ref8$fields, fieldPairs = _ref8.fieldPairs; var config = layer.config; var commonConfigProp = { layer: layer, fields: fields }; var visConfiguratorProps = (0, _extends4.default)({}, commonConfigProp, { onChange: this.props.updateLayerVisConfig }); var layerConfiguratorProps = (0, _extends4.default)({}, commonConfigProp, { onChange: updateLayerConfig }); var layerChannelConfigProps = (0, _extends4.default)({}, commonConfigProp, { onChange: this.props.updateLayerVisualChannelConfig }); var renderTemplate = layer.type && '_render' + (0, _utils.capitalizeFirstLetter)(layer.type) + 'LayerConfig'; return _react2.default.createElement( StyledLayerConfigurator, null, layer.layerInfoModal ? _react2.default.createElement(HowToButton, { onClick: function onClick() { return _this2.props.openModal(layer.layerInfoModal); } }) : null, _react2.default.createElement( _layerConfigGroup2.default, { label: 'basic' }, Object.keys(datasets).length > 1 && _react2.default.createElement(_sourceDataSelector2.default, { datasets: datasets, id: layer.id, disabled: layer.tyep && config.columns, dataId: config.dataId, onSelect: function onSelect(value) { return updateLayerConfig({ dataId: value }); } }), _react2.default.createElement(_layerTypeSelector2.default, { layer: layer, layerTypeOptions: layerTypeOptions, onSelect: updateLayerType }), _react2.default.createElement(_layerColumnConfig2.default, { layer: layer, fields: fields, fieldPairs: fieldPairs, updateLayerConfig: updateLayerConfig, updateLayerType: this.props.updateLayerType }) ), this[renderTemplate] && this[renderTemplate]({ layer: layer, visConfiguratorProps: visConfiguratorProps, layerChannelConfigProps: layerChannelConfigProps, layerConfiguratorProps: layerConfiguratorProps }) ); } }]); return LayerConfigurator; }(_react.Component), _class.propTypes = { layer: _propTypes2.default.object.isRequired, datasets: _propTypes2.default.object.isRequired, layerTypeOptions: _propTypes2.default.arrayOf(_propTypes2.default.any).isRequired, openModal: _propTypes2.default.func.isRequired, updateLayerConfig: _propTypes2.default.func.isRequired, updateLayerType: _propTypes2.default.func.isRequired, updateLayerVisConfig: _propTypes2.default.func.isRequired, updateLayerVisualChannelConfig: _propTypes2.default.func.isRequired }, _temp); /* * Componentize config component into pure functional components */ exports.default = LayerConfigurator; var StyledHowToButton = _styledComponents2.default.div(_templateObject3); var HowToButton = exports.HowToButton = function HowToButton(_ref9) { var onClick = _ref9.onClick; return _react2.default.createElement( StyledHowToButton, null, _react2.default.createElement( _styledComponents3.Button, { secondary: true, small: true, onClick: onClick }, 'How to' ) ); }; var LayerColorSelector = exports.LayerColorSelector = function LayerColorSelector(_ref10) { var layer = _ref10.layer, onChange = _ref10.onChange, label = _ref10.label; return _react2.default.createElement( _styledComponents3.SidePanelSection, { disabled: layer.config.colorField }, _react2.default.createElement(_colorSelector2.default, { colorSets: [{ selectedColor: layer.config.color, setColor: function setColor(rgbValue) { return onChange({ color: rgbValue }); } }] }) ); }; var ArcLayerColorSelector = exports.ArcLayerColorSelector = function ArcLayerColorSelector(_ref11) { var layer = _ref11.layer, onChangeConfig = _ref11.onChangeConfig, onChangeVisConfig = _ref11.onChangeVisConfig; return _react2.default.createElement( _styledComponents3.SidePanelSection, null, _react2.default.createElement(_colorSelector2.default, { colorSets: [{ selectedColor: layer.config.color, setColor: function setColor(rgbValue) { return onChangeConfig({ color: rgbValue }); }, label: 'Source' }, { selectedColor: layer.config.visConfig.targetColor || layer.config.color, setColor: function setColor(rgbValue) { return onChangeVisConfig({ targetColor: rgbValue }); }, label: 'Target' }] }) ); }; var ColorRangeConfig = exports.ColorRangeConfig = function ColorRangeConfig(_ref12) { var layer = _ref12.layer, onChange = _ref12.onChange; return _react2.default.createElement( _styledComponents3.SidePanelSection, null, _react2.default.createElement(_colorSelector2.default, { colorSets: [{ selectedColor: layer.config.visConfig.colorRange, isRange: true, setColor: function setColor(colorRange) { return onChange({ colorRange: colorRange }); } }] }) ); }; var ChannelByValueSelector = exports.ChannelByValueSelector = function ChannelByValueSelector(_ref13) { var layer = _ref13.layer, channel = _ref13.channel, onChange = _ref13.onChange, fields = _ref13.fields, description = _ref13.description; var channelScaleType = channel.channelScaleType, domain = channel.domain, field = channel.field, key = channel.key, property = channel.property, range = channel.range, scale = channel.scale, defaultMeasure = channel.defaultMeasure, supportedFieldTypes = channel.supportedFieldTypes; var channelSupportedFieldTypes = supportedFieldTypes || _defaultSettings.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType]; var supportedFields = fields.filter(function (_ref14) { var type = _ref14.type; return channelSupportedFieldTypes.includes(type); }); var scaleOptions = layer.getScaleOptions(channel.key); var showScale = !layer.isAggregated && layer.config[scale] && scaleOptions.length > 1; var defaultDescription = 'Calculate ' + property + ' based on selected field'; return _react2.default.createElement(_visConfigByFieldSelector2.default, { channel: channel.key, description: description || defaultDescription, domain: layer.config[domain], fields: supportedFields, id: layer.id, key: key + '-channel-selector', property: property, placeholder: defaultMeasure || 'Select a field', range: layer.config.visConfig[range], scaleOptions: scaleOptions, scaleType: scale ? layer.config[scale] : null, selectedField: layer.config[field], showScale: showScale, updateField: function updateField(val) { return onChange((0, _defineProperty3.default)({}, field, val), key); }, updateScale: function updateScale(val) { return onChange((0, _defineProperty3.default)({}, scale, val), key); } }); }; var AggrColorScaleSelector = exports.AggrColorScaleSelector = function AggrColorScaleSelector(_ref15) { var layer = _ref15.layer, onChange = _ref15.onChange; var scaleOptions = layer.getScaleOptions('color'); return Array.isArray(scaleOptions) && scaleOptions.length > 1 ? _react2.default.createElement(_dimensionScaleSelector2.default, { label: 'Color Scale', options: scaleOptions, scaleType: layer.config.colorScale, onSelect: function onSelect(val) { return onChange({ colorScale: val }, 'color'); } }) : null; }; var AggregationTypeSelector = exports.AggregationTypeSelector = function AggregationTypeSelector(_ref16) { var layer = _ref16.layer, channel = _ref16.channel, _onChange3 = _ref16.onChange; var field = channel.field, aggregation = channel.aggregation, key = channel.key; var selectedField = layer.config[field]; var visConfig = layer.config.visConfig; // aggregation should only be selectable when field is selected var aggregationOptions = layer.getAggregationOptions(key); return _react2.default.createElement( _styledComponents3.SidePanelSection, null, _react2.default.createElement( _styledComponents3.PanelLabel, null, 'Aggregate ' + selectedField.name + ' by' ), _react2.default.createElement(_itemSelector2.default, { selectedItems: visConfig[aggregation], options: aggregationOptions, multiSelect: false, searchable: false, onChange: function onChange(value) { return _onChange3({ visConfig: (0, _extends4.default)({}, layer.config.visConfig, (0, _defineProperty3.default)({}, aggregation, value)) }, channel.key); } }) ); }; /* eslint-enable max-params */ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItY29uZmlndXJhdG9yLmpzIl0sIm5hbWVzIjpbIlN0eWxlZExheWVyQ29uZmlndXJhdG9yIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvciIsIkxheWVyQ29uZmlndXJhdG9yIiwicHJvcHMiLCJfcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyIsImxheWVyIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJjb25maWciLCJjb2xvckZpZWxkIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsIkxBWUVSX1ZJU19DT05GSUdTIiwib3BhY2l0eSIsInNpemVGaWVsZCIsInJhZGl1cyIsIkJvb2xlYW4iLCJyYWRpdXNSYW5nZSIsInZpc0NvbmZpZyIsImZpeGVkUmFkaXVzIiwic2l6ZSIsInR5cGUiLCJMQVlFUl9UWVBFUyIsInBvaW50Iiwib3V0bGluZSIsInRoaWNrbmVzcyIsInRleHRMYWJlbCIsInZpc0NvbmZpZ1NldHRpbmdzIiwiY29sb3JBZ2dyZWdhdGlvbiIsImNvbmRpdGlvbiIsImNsdXN0ZXJSYWRpdXMiLCJ3ZWlnaHQiLCJfcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyIsImVuYWJsZTNkIiwiZWxldmF0aW9uQnlEZXNjcmlwdGlvbiIsImNvbG9yQnlEZXNjcmlwdGlvbiIsInBlcmNlbnRpbGUiLCJ3b3JsZFVuaXRTaXplIiwiY292ZXJhZ2UiLCJlbGV2YXRpb25TY2FsZSIsInNpemVBZ2dyZWdhdGlvbiIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJjb3ZlcmFnZUZpZWxkIiwiY292ZXJhZ2VSYW5nZSIsImVsZXZhdGlvblJhbmdlIiwiYXJncyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJvbkNoYW5nZSIsInN0cm9rZVdpZHRoUmFuZ2UiLCJtZXRhIiwiZmVhdHVyZVR5cGVzIiwicG9seWdvbiIsImZpbGxlZCIsImxpbmUiLCJzdHJva2VkIiwiaGVpZ2h0Iiwid2lyZWZyYW1lIiwicmFkaXVzRmllbGQiLCJkYXRhc2V0cyIsInVwZGF0ZUxheWVyQ29uZmlnIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsImRhdGFJZCIsImZpZWxkcyIsImZpZWxkUGFpcnMiLCJjb21tb25Db25maWdQcm9wIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJyZW5kZXJUZW1wbGF0ZSIsImxheWVySW5mb01vZGFsIiwib3Blbk1vZGFsIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImlkIiwidHllcCIsImNvbHVtbnMiLCJ2YWx1ZSIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJhcnJheU9mIiwiYW55IiwiZnVuYyIsIlN0eWxlZEhvd1RvQnV0dG9uIiwiSG93VG9CdXR0b24iLCJvbkNsaWNrIiwiTGF5ZXJDb2xvclNlbGVjdG9yIiwibGFiZWwiLCJzZWxlY3RlZENvbG9yIiwic2V0Q29sb3IiLCJyZ2JWYWx1ZSIsIkFyY0xheWVyQ29sb3JTZWxlY3RvciIsIm9uQ2hhbmdlQ29uZmlnIiwib25DaGFuZ2VWaXNDb25maWciLCJ0YXJnZXRDb2xvciIsIkNvbG9yUmFuZ2VDb25maWciLCJjb2xvclJhbmdlIiwiaXNSYW5nZSIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJjaGFubmVsIiwiZGVzY3JpcHRpb24iLCJjaGFubmVsU2NhbGVUeXBlIiwiZG9tYWluIiwiZmllbGQiLCJrZXkiLCJwcm9wZXJ0eSIsInJhbmdlIiwic2NhbGUiLCJkZWZhdWx0TWVhc3VyZSIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsInN1cHBvcnRlZEZpZWxkcyIsImZpbHRlciIsImluY2x1ZGVzIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwic2hvd1NjYWxlIiwiaXNBZ2dyZWdhdGVkIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwidmFsIiwiQWdnckNvbG9yU2NhbGVTZWxlY3RvciIsIkFycmF5IiwiaXNBcnJheSIsImNvbG9yU2NhbGUiLCJBZ2dyZWdhdGlvblR5cGVTZWxlY3RvciIsImFnZ3JlZ2F0aW9uIiwic2VsZWN0ZWRGaWVsZCIsImFnZ3JlZ2F0aW9uT3B0aW9ucyIsImdldEFnZ3JlZ2F0aW9uT3B0aW9ucyIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyS0FBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7QUFLQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7O0FBRUE7O0FBRUE7Ozs7QUFLQSxJQUFNQSwwQkFBMEJDLDJCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUI7QUFDL0NDLGFBQVc7QUFEb0MsQ0FBakIsQ0FBMUIsaUJBQU47O0FBT0EsSUFBTUMsZ0NBQWdDSiwyQkFBT0MsR0FBUCxDQUFXQyxLQUFYLENBQWlCO0FBQ3JEQyxhQUFXO0FBRDBDLENBQWpCLENBQWhDLGtCQUFOOztJQU1xQkUsaUI7Ozs7Ozs7Ozs7NENBWUtDLEssRUFBTztBQUM3QixhQUFPLEtBQUtDLDZCQUFMLENBQW1DRCxLQUFuQyxDQUFQO0FBQ0Q7OzsyQ0FFc0JBLEssRUFBTztBQUM1QixhQUFPLEtBQUtDLDZCQUFMLENBQW1DRCxLQUFuQyxDQUFQO0FBQ0Q7Ozt3REFPRTtBQUFBLFVBSkRFLEtBSUMsUUFKREEsS0FJQztBQUFBLFVBSERDLG9CQUdDLFFBSERBLG9CQUdDO0FBQUEsVUFGREMsdUJBRUMsUUFGREEsdUJBRUM7QUFBQSxVQUREQyxzQkFDQyxRQUREQSxzQkFDQzs7QUFDRCxhQUNFO0FBQUMscUNBQUQ7QUFBQTtBQUVFO0FBQUMsb0NBQUQ7QUFBQSxZQUFrQixPQUFPLE9BQXpCO0FBQ0dILGdCQUFNSSxNQUFOLENBQWFDLFVBQWIsR0FDQyw4QkFBQyxnQkFBRCxFQUFzQkosb0JBQXRCLENBREQsR0FHQyw4QkFBQyxrQkFBRCxFQUF3QkUsc0JBQXhCLENBSko7QUFNRSx3Q0FBQyxzQkFBRDtBQUNFLHFCQUFTSCxNQUFNTSxjQUFOLENBQXFCQztBQURoQyxhQUVNTCx1QkFGTixFQU5GO0FBVUUsd0NBQUMseUJBQUQsNkJBQ01NLGdDQUFrQkMsT0FEeEIsRUFFTVIsb0JBRk47QUFWRixTQUZGO0FBbUJFO0FBQUMsb0NBQUQ7QUFBQSxZQUFrQixPQUFPLFFBQXpCO0FBQ0csV0FBQ0QsTUFBTUksTUFBTixDQUFhTSxTQUFkLEdBQ0MsOEJBQUMseUJBQUQsNkJBQ01GLGdDQUFrQkcsTUFEeEIsRUFFTVYsb0JBRk47QUFHRSxtQkFBTyxLQUhUO0FBSUUsc0JBQVVXLFFBQVFaLE1BQU1JLE1BQU4sQ0FBYU0sU0FBckI7QUFKWixhQURELEdBUUMsOEJBQUMseUJBQUQsNkJBQ01GLGdDQUFrQkssV0FEeEIsRUFFTVosb0JBRk47QUFHRSxzQkFDRSxDQUFDRCxNQUFNSSxNQUFOLENBQWFNLFNBQWQsSUFBMkJWLE1BQU1JLE1BQU4sQ0FBYVUsU0FBYixDQUF1QkM7QUFKdEQsYUFUSjtBQWlCRSx3Q0FBQyxzQkFBRDtBQUNFLHFCQUFTZixNQUFNTSxjQUFOLENBQXFCVTtBQURoQyxhQUVNZCx1QkFGTixFQWpCRjtBQXFCR0YsZ0JBQU1JLE1BQU4sQ0FBYU0sU0FBYixHQUNDLDhCQUFDLHlCQUFELDZCQUNNRixnQ0FBa0JPLFdBRHhCLEVBRU1kLG9CQUZOO0FBR0Usc0JBQVUsQ0FBQ0QsTUFBTUksTUFBTixDQUFhTTtBQUgxQixhQURELEdBTUc7QUEzQk4sU0FuQkY7QUFrREdWLGNBQU1pQixJQUFOLEtBQWVDLDZCQUFZQyxLQUEzQixHQUNDO0FBQUMsb0NBQUQ7QUFBQSxxQ0FDTVgsZ0NBQWtCWSxPQUR4QixFQUVNbkIsb0JBRk47QUFJRSx3Q0FBQyx5QkFBRCw2QkFDTU8sZ0NBQWtCYSxTQUR4QixFQUVNcEIsb0JBRk47QUFHRSxtQkFBTyxLQUhUO0FBSUUsc0JBQVUsQ0FBQ0QsTUFBTUksTUFBTixDQUFhVSxTQUFiLENBQXVCTTtBQUpwQztBQUpGLFNBREQsR0FZRyxJQTlETjtBQWlFRSxzQ0FBQyx3QkFBRDtBQUNFLGdDQUFzQm5CLG9CQUR4QjtBQUVFLGtDQUF3QkUsc0JBRjFCO0FBR0UscUJBQVdILE1BQU1JLE1BQU4sQ0FBYWtCO0FBSDFCLFVBakVGO0FBdUVFLHNDQUFDLDBCQUFELDZCQUNNZCxnQ0FBa0IsY0FBbEIsQ0FETixFQUVNUCxvQkFGTjtBQXZFRixPQURGO0FBOEVEOzs7cURBT0U7QUFBQSxVQUpERCxLQUlDLFNBSkRBLEtBSUM7QUFBQSxVQUhEQyxvQkFHQyxTQUhEQSxvQkFHQztBQUFBLFVBRkRFLHNCQUVDLFNBRkRBLHNCQUVDO0FBQUEsVUFEREQsdUJBQ0MsU0FEREEsdUJBQ0M7O0FBQ0QsYUFDRTtBQUFDLHFDQUFEO0FBQUE7QUFFRTtBQUFDLG9DQUFEO0FBQUEsWUFBa0IsT0FBTyxPQUF6QjtBQUNFLHdDQUFDLGdCQUFELEVBQXNCRCxvQkFBdEIsQ0FERjtBQUVFLHdDQUFDLHNCQUFELEVBQTRCRSxzQkFBNUIsQ0FGRjtBQUdFLHdDQUFDLHNCQUFEO0FBQ0UscUJBQVNILE1BQU1NLGNBQU4sQ0FBcUJDO0FBRGhDLGFBRU1MLHVCQUZOLEVBSEY7QUFPR0YsZ0JBQU11QixpQkFBTixDQUF3QkMsZ0JBQXhCLENBQXlDQyxTQUF6QyxDQUFtRHpCLE1BQU1JLE1BQXpELElBQ0MsOEJBQUMsdUJBQUQsNkJBQ01KLE1BQU11QixpQkFBTixDQUF3QkMsZ0JBRDlCLEVBRU10Qix1QkFGTjtBQUdFLHFCQUFTRixNQUFNTSxjQUFOLENBQXFCQztBQUhoQyxhQURELEdBTUcsSUFiTjtBQWNFLHdDQUFDLHlCQUFELDZCQUNNUCxNQUFNdUIsaUJBQU4sQ0FBd0JkLE9BRDlCLEVBRU1SLG9CQUZOO0FBZEYsU0FGRjtBQXVCRTtBQUFDLG9DQUFEO0FBQUEsWUFBa0IsT0FBTyxRQUF6QjtBQUNFLHdDQUFDLHlCQUFELDZCQUNNRCxNQUFNdUIsaUJBQU4sQ0FBd0JHLGFBRDlCLEVBRU16QixvQkFGTixFQURGO0FBS0Usd0NBQUMseUJBQUQsNkJBQ01ELE1BQU11QixpQkFBTixDQUF3QlYsV0FEOUIsRUFFTVosb0JBRk47QUFMRjtBQXZCRixPQURGO0FBb0NEOzs7cURBT0U7QUFBQSxVQUpERCxLQUlDLFNBSkRBLEtBSUM7QUFBQSxVQUhEQyxvQkFHQyxTQUhEQSxvQkFHQztBQUFBLFVBRkRFLHNCQUVDLFNBRkRBLHNCQUVDO0FBQUEsVUFEREQsdUJBQ0MsU0FEREEsdUJBQ0M7O0FBQ0QsYUFDRTtBQUFDLHFDQUFEO0FBQUE7QUFFRTtBQUFDLG9DQUFEO0FBQUEsWUFBa0IsT0FBTyxPQUF6QjtBQUNFLHdDQUFDLGdCQUFELEVBQXNCRCxvQkFBdEIsQ0FERjtBQUVFLHdDQUFDLHlCQUFELDZCQUNNRCxNQUFNdUIsaUJBQU4sQ0FBd0JkLE9BRDlCLEVBRU1SLG9CQUZOO0FBRkYsU0FGRjtBQVVFO0FBQUMsb0NBQUQ7QUFBQSxZQUFrQixPQUFPLFFBQXpCO0FBQ0Usd0NBQUMseUJBQUQsNkJBQ01ELE1BQU11QixpQkFBTixDQUF3QlosTUFEOUIsRUFFTVYsb0JBRk47QUFHRSxtQkFBTztBQUhUO0FBREYsU0FWRjtBQWtCRTtBQUFDLG9DQUFEO0FBQUEsWUFBa0IsT0FBTyxRQUF6QjtBQUNFLHdDQUFDLHNCQUFEO0FBQ0UscUJBQVNELE1BQU1NLGNBQU4sQ0FBcUJxQjtBQURoQyxhQUVNekIsdUJBRk47QUFERjtBQWxCRixPQURGO0FBMkJEOzs7MkNBRXNCSixLLEVBQU87QUFDNUIsYUFBTyxLQUFLOEIsNkJBQUwsQ0FBbUM5QixLQUFuQyxDQUFQO0FBQ0Q7Ozs4Q0FFeUJBLEssRUFBTztBQUMvQixhQUFPLEtBQUs4Qiw2QkFBTCxDQUFtQzlCLEtBQW5DLENBQVA7QUFDRDs7O3lEQU9FO0FBQUEsVUFKREUsS0FJQyxTQUpEQSxLQUlDO0FBQUEsVUFIREMsb0JBR0MsU0FIREEsb0JBR0M7QUFBQSxVQUZERSxzQkFFQyxTQUZEQSxzQkFFQztBQUFBLFVBRERELHVCQUNDLFNBRERBLHVCQUNDO0FBQUEsVUFDTUUsTUFETixHQUNnQkosS0FEaEIsQ0FDTUksTUFETjtBQUFBLFVBR2F5QixRQUhiLEdBSUd6QixNQUpILENBR0NVLFNBSEQsQ0FHYWUsUUFIYjs7QUFLRCxVQUFNQyx5QkFDSiw4Q0FERjtBQUVBLFVBQU1DLHFCQUFxQiw2Q0FBM0I7O0FBRUEsYUFDRTtBQUFDLHFDQUFEO0FBQUE7QUFFRTtBQUFDLG9DQUFEO0FBQUEsWUFBa0IsT0FBTyxPQUF6QjtBQUNFLHdDQUFDLGdCQUFELEVBQXNCOUIsb0JBQXRCLENBREY7QUFFRSx3Q0FBQyxzQkFBRCxFQUE0QkUsc0JBQTVCLENBRkY7QUFHRSx3Q0FBQyxzQkFBRDtBQUNFLHFCQUFTSCxNQUFNTSxjQUFOLENBQXFCQztBQURoQyxhQUVNTCx1QkFGTixFQUhGO0FBT0dGLGdCQUFNdUIsaUJBQU4sQ0FBd0JDLGdCQUF4QixDQUF5Q0MsU0FBekMsQ0FBbUR6QixNQUFNSSxNQUF6RCxJQUNDLDhCQUFDLHVCQUFELDZCQUNNSixNQUFNdUIsaUJBQU4sQ0FBd0JDLGdCQUQ5QixFQUVNdEIsdUJBRk47QUFHRSwwQkFBYzZCLGtCQUhoQjtBQUlFLHFCQUFTL0IsTUFBTU0sY0FBTixDQUFxQkM7QUFKaEMsYUFERCxHQU9HLElBZE47QUFlR1AsZ0JBQU11QixpQkFBTixDQUF3QlMsVUFBeEIsSUFBc0NoQyxNQUFNdUIsaUJBQU4sQ0FBd0JTLFVBQXhCLENBQW1DUCxTQUFuQyxDQUE2Q3pCLE1BQU1JLE1BQW5ELENBQXRDLEdBQ0MsOEJBQUMseUJBQUQsNkJBQ01KLE1BQU11QixpQkFBTixDQUF3QlMsVUFEOUIsRUFFTS9CLG9CQUZOLEVBREQsR0FLRyxJQXBCTjtBQXFCRSx3Q0FBQyx5QkFBRCw2QkFDTUQsTUFBTXVCLGlCQUFOLENBQXdCZCxPQUQ5QixFQUVNUixvQkFGTjtBQXJCRixTQUZGO0FBOEJFO0FBQUMsb0NBQUQ7QUFBQSxZQUFrQixPQUFPLFFBQXpCO0FBQ0Usd0NBQUMseUJBQUQsNkJBQ01ELE1BQU11QixpQkFBTixDQUF3QlUsYUFEOUIsRUFFTWhDLG9CQUZOLEVBREY7QUFLRSx3Q0FBQyx5QkFBRCw2QkFDTUQsTUFBTXVCLGlCQUFOLENBQXdCVyxRQUQ5QixFQUVNakMsb0JBRk47QUFMRixTQTlCRjtBQTBDR0QsY0FBTXVCLGlCQUFOLENBQXdCTSxRQUF4QixHQUNDO0FBQUMsb0NBQUQ7QUFBQSxxQ0FDTTdCLE1BQU11QixpQkFBTixDQUF3Qk0sUUFEOUIsRUFFTTVCLG9CQUZOO0FBSUUsd0NBQUMseUJBQUQsNkJBQ01ELE1BQU11QixpQkFBTixDQUF3QlksY0FEOUIsRUFFTWxDLG9CQUZOLEVBSkY7QUFRRSx3Q0FBQyxzQkFBRCw2QkFDTUMsdUJBRE47QUFFRSxxQkFBU0YsTUFBTU0sY0FBTixDQUFxQlUsSUFGaEM7QUFHRSx5QkFBYWMsc0JBSGY7QUFJRSxzQkFBVSxDQUFDRDtBQUpiLGFBUkY7QUFjRzdCLGdCQUFNdUIsaUJBQU4sQ0FBd0JhLGVBQXhCLENBQXdDWCxTQUF4QyxDQUFrRHpCLE1BQU1JLE1BQXhELElBQ0MsOEJBQUMsdUJBQUQsNkJBQ01KLE1BQU11QixpQkFBTixDQUF3QmEsZUFEOUIsRUFFTWxDLHVCQUZOO0FBR0UscUJBQVNGLE1BQU1NLGNBQU4sQ0FBcUJVO0FBSGhDLGFBREQsR0FNRyxJQXBCTjtBQXFCR2hCLGdCQUFNdUIsaUJBQU4sQ0FBd0JjLG1CQUF4QixDQUE0Q1osU0FBNUMsQ0FDQ3pCLE1BQU1JLE1BRFAsSUFHQyw4QkFBQyx5QkFBRCw2QkFDTUosTUFBTXVCLGlCQUFOLENBQXdCYyxtQkFEOUIsRUFFTXBDLG9CQUZOLEVBSEQsR0FPRztBQTVCTixTQURELEdBOEJ1QixJQXhFMUI7QUEyRUUsc0NBQUMsMEJBQUQsNkJBQ01ELE1BQU11QixpQkFBTixDQUF3QixjQUF4QixDQUROLEVBRU10QixvQkFGTjtBQTNFRixPQURGO0FBa0ZEOztBQUVEOzs7O3VEQU1HO0FBQUEsVUFKREQsS0FJQyxTQUpEQSxLQUlDO0FBQUEsVUFIREMsb0JBR0MsU0FIREEsb0JBR0M7QUFBQSxVQUZERSxzQkFFQyxTQUZEQSxzQkFFQztBQUFBLFVBRERELHVCQUNDLFNBRERBLHVCQUNDOztBQUNELGFBQ0U7QUFBQyxxQ0FBRDtBQUFBO0FBRUU7QUFBQyxvQ0FBRDtBQUFBLFlBQWtCLE9BQU8sT0FBekI7QUFDR0YsZ0JBQU1JLE1BQU4sQ0FBYUMsVUFBYixHQUNDLDhCQUFDLGdCQUFELEVBQXNCSixvQkFBdEIsQ0FERCxHQUdDLDhCQUFDLGtCQUFELEVBQXdCRSxzQkFBeEIsQ0FKSjtBQU1FLHdDQUFDLHNCQUFEO0FBQ0UscUJBQVNILE1BQU1NLGNBQU4sQ0FBcUJDO0FBRGhDLGFBRU1MLHVCQUZOLEVBTkY7QUFVRSx3Q0FBQyx5QkFBRCw2QkFDTU0sZ0NBQWtCQyxPQUR4QixFQUVNUixvQkFGTjtBQVZGLFNBRkY7QUFtQkU7QUFBQyxvQ0FBRDtBQUFBLFlBQWtCLE9BQU8sVUFBekI7QUFDRyxXQUFDRCxNQUFNSSxNQUFOLENBQWFrQyxhQUFkLEdBQ0MsOEJBQUMseUJBQUQsNkJBQ010QyxNQUFNdUIsaUJBQU4sQ0FBd0JXLFFBRDlCLEVBRU1qQyxvQkFGTixFQURELEdBTUMsOEJBQUMseUJBQUQsNkJBQ01ELE1BQU11QixpQkFBTixDQUF3QmdCLGFBRDlCLEVBRU10QyxvQkFGTixFQVBKO0FBWUUsd0NBQUMsc0JBQUQ7QUFDRSxxQkFBU0QsTUFBTU0sY0FBTixDQUFxQjRCO0FBRGhDLGFBRU1oQyx1QkFGTjtBQVpGLFNBbkJGO0FBc0NFO0FBQUMsb0NBQUQ7QUFBQSxxQ0FDTU0sZ0NBQWtCcUIsUUFEeEIsRUFFTTVCLG9CQUZOO0FBSUUsd0NBQUMsc0JBQUQ7QUFDRSxxQkFBU0QsTUFBTU0sY0FBTixDQUFxQlU7QUFEaEMsYUFFTWQsdUJBRk4sRUFKRjtBQVFFLHdDQUFDLHlCQUFELDZCQUNNTSxnQ0FBa0JnQyxjQUR4QixFQUVNdkMsb0JBRk47QUFSRixTQXRDRjtBQW9ERSxzQ0FBQywwQkFBRCw2QkFDTU8sZ0NBQWtCLGNBQWxCLENBRE4sRUFFTVAsb0JBRk47QUFwREYsT0FERjtBQTJERDs7OzBDQUVxQndDLEksRUFBTTtBQUMxQixhQUFPLEtBQUtDLHNCQUFMLENBQTRCRCxJQUE1QixDQUFQO0FBQ0Q7OztrREFPRTtBQUFBLFVBSkR6QyxLQUlDLFNBSkRBLEtBSUM7QUFBQSxVQUhEQyxvQkFHQyxTQUhEQSxvQkFHQztBQUFBLFVBRkRFLHNCQUVDLFNBRkRBLHNCQUVDO0FBQUEsVUFEREQsdUJBQ0MsU0FEREEsdUJBQ0M7O0FBQ0QsYUFDRTtBQUFDLHFDQUFEO0FBQUE7QUFFRTtBQUFDLG9DQUFEO0FBQUEsWUFBa0IsT0FBTyxPQUF6QjtBQUNHRixnQkFBTUksTUFBTixDQUFhQyxVQUFiLEdBQ0MsOEJBQUMsZ0JBQUQsRUFBc0JKLG9CQUF0QixDQURELEdBR0MsOEJBQUMscUJBQUQ7QUFDRSxtQkFBT0QsS0FEVDtBQUVFLDRCQUFnQkcsdUJBQXVCd0MsUUFGekM7QUFHRSwrQkFBbUIxQyxxQkFBcUIwQztBQUgxQyxZQUpKO0FBVUUsd0NBQUMsc0JBQUQ7QUFDRSxxQkFBUzNDLE1BQU1NLGNBQU4sQ0FBcUJDO0FBRGhDLGFBRU1MLHVCQUZOLEVBVkY7QUFjRSx3Q0FBQyx5QkFBRCw2QkFDTU0sZ0NBQWtCQyxPQUR4QixFQUVNUixvQkFGTjtBQWRGLFNBRkY7QUF1QkU7QUFBQyxvQ0FBRDtBQUFBLFlBQWtCLE9BQU8sUUFBekI7QUFDR0QsZ0JBQU1JLE1BQU4sQ0FBYU0sU0FBYixHQUNDLDhCQUFDLHlCQUFELDZCQUNNRixnQ0FBa0JvQyxnQkFEeEIsRUFFTTNDLG9CQUZOO0FBR0Usc0JBQVUsQ0FBQ0QsTUFBTUksTUFBTixDQUFhTTtBQUgxQixhQURELEdBT0MsOEJBQUMseUJBQUQsNkJBQ01GLGdDQUFrQmEsU0FEeEIsRUFFTXBCLG9CQUZOLEVBUko7QUFhRSx3Q0FBQyxzQkFBRDtBQUNFLHFCQUFTRCxNQUFNTSxjQUFOLENBQXFCVTtBQURoQyxhQUVNZCx1QkFGTjtBQWJGLFNBdkJGO0FBMkNFLHNDQUFDLDBCQUFELDZCQUNNTSxnQ0FBa0IsY0FBbEIsQ0FETixFQUVNUCxvQkFGTjtBQTNDRixPQURGO0FBa0REOzs7cURBT0U7QUFBQSxVQUpERCxLQUlDLFNBSkRBLEtBSUM7QUFBQSxVQUhEQyxvQkFHQyxTQUhEQSxvQkFHQztBQUFBLFVBRkRFLHNCQUVDLFNBRkRBLHNCQUVDO0FBQUEsVUFEREQsdUJBQ0MsU0FEREEsdUJBQ0M7QUFBQSxrQ0FJR0YsS0FKSCxDQUVDNkMsSUFGRCxDQUVRQyxZQUZSO0FBQUEsVUFFUUEsWUFGUix5Q0FFdUIsRUFGdkI7QUFBQSxVQUdVaEMsU0FIVixHQUlHZCxLQUpILENBR0NJLE1BSEQsQ0FHVVUsU0FIVjs7O0FBTUQsYUFDRTtBQUFDLHFDQUFEO0FBQUE7QUFFRTtBQUFDLG9DQUFEO0FBQUEsWUFBa0IsT0FBTyxPQUF6QjtBQUNHZ0MsdUJBQWFDLE9BQWIsR0FDQyw4QkFBQyx5QkFBRCw2QkFDTTlDLG9CQUROLEVBRU1PLGdDQUFrQndDLE1BRnhCLEVBREQsR0FLRyxJQU5OO0FBUUdoRCxnQkFBTUksTUFBTixDQUFhQyxVQUFiLEdBQ0MsOEJBQUMsZ0JBQUQsRUFBc0JKLG9CQUF0QixDQURELEdBR0MsOEJBQUMsa0JBQUQsRUFBd0JFLHNCQUF4QixDQVhKO0FBY0Usd0NBQUMsc0JBQUQ7QUFDRSxxQkFBU0gsTUFBTU0sY0FBTixDQUFxQkM7QUFEaEMsYUFFTUwsdUJBRk4sRUFkRjtBQW1CRSx3Q0FBQyx5QkFBRCw2QkFDTU0sZ0NBQWtCQyxPQUR4QixFQUVNUixvQkFGTjtBQW5CRixTQUZGO0FBNEJHNkMscUJBQWFHLElBQWIsSUFBcUJILGFBQWFDLE9BQWxDLEdBQ0M7QUFBQyxvQ0FBRDtBQUFBO0FBQ0UsbUJBQU07QUFEUixhQUVNOUMsb0JBRk4sRUFHTzZDLGFBQWFDLE9BQWIsR0FBdUJ2QyxnQ0FBa0IwQyxPQUF6QyxHQUFtRCxFQUgxRDtBQUtHcEMsb0JBQVVvQyxPQUFWLEdBQ0M7QUFBQTtBQUFBO0FBQ0UsMENBQUMseUJBQUQsNkJBQ00xQyxnQ0FBa0JhLFNBRHhCLEVBRU1wQixvQkFGTixFQURGO0FBS0UsMENBQUMsc0JBQUQ7QUFDRSx1QkFBU0QsTUFBTU0sY0FBTixDQUFxQlU7QUFEaEMsZUFFTWQsdUJBRk4sRUFMRjtBQVNFLDBDQUFDLHlCQUFELDZCQUNNTSxnQ0FBa0JvQyxnQkFEeEIsRUFFTTNDLG9CQUZOO0FBR0Usd0JBQVUsQ0FBQ0QsTUFBTUksTUFBTixDQUFhTTtBQUgxQjtBQVRGLFdBREQsR0FlVTtBQXBCYixTQURELEdBdUJHLElBbkROO0FBc0RHb0MscUJBQWFDLE9BQWIsSUFBd0JqQyxVQUFVa0MsTUFBbEMsR0FDQztBQUFDLG9DQUFEO0FBQUEscUNBQ00vQyxvQkFETixFQUVNTyxnQ0FBa0JxQixRQUZ4QjtBQUlFLHdDQUFDLHlCQUFELDZCQUNNckIsZ0NBQWtCMkIsY0FEeEIsRUFFTWxDLG9CQUZOLEVBSkY7QUFRRSx3Q0FBQyxzQkFBRDtBQUNFLHFCQUFTRCxNQUFNTSxjQUFOLENBQXFCNkM7QUFEaEMsYUFFTWpELHVCQUZOLEVBUkY7QUFZRSx3Q0FBQyx5QkFBRCw2QkFDTUQsb0JBRE4sRUFFTU8sZ0NBQWtCNEMsU0FGeEI7QUFaRixTQURELEdBa0JHLElBeEVOO0FBMkVHTixxQkFBYTNCLEtBQWIsR0FDQztBQUFBO0FBQUE7QUFDRSx3Q0FBQyx5QkFBRCw2QkFDTVgsZ0NBQWtCRyxNQUR4QixFQUVNVixvQkFGTjtBQUdFLG1CQUFNLGNBSFI7QUFJRSxzQkFBVVcsUUFBUVosTUFBTUksTUFBTixDQUFhaUQsV0FBckI7QUFKWixhQURGO0FBT0Usd0NBQUMsc0JBQUQ7QUFDRSxxQkFBU3JELE1BQU1NLGNBQU4sQ0FBcUJLO0FBRGhDLGFBRU1ULHVCQUZOLEVBUEY7QUFXRSx3Q0FBQyx5QkFBRCw2QkFDTU0sZ0NBQWtCSyxXQUR4QixFQUVNWixvQkFGTjtBQUdFLHNCQUFVLENBQUNELE1BQU1JLE1BQU4sQ0FBYWlEO0FBSDFCO0FBWEYsU0FERCxHQWtCRyxJQTdGTjtBQWdHRSxzQ0FBQywwQkFBRCw2QkFDTTdDLGdDQUFrQixjQUFsQixDQUROLEVBRU1QLG9CQUZOO0FBaEdGLE9BREY7QUF1R0Q7Ozs2QkFFUTtBQUFBOztBQUFBLG1CQU9ILEtBQUtILEtBUEY7QUFBQSxVQUVMRSxLQUZLLFVBRUxBLEtBRks7QUFBQSxVQUdMc0QsUUFISyxVQUdMQSxRQUhLO0FBQUEsVUFJTEMsaUJBSkssVUFJTEEsaUJBSks7QUFBQSxVQUtMQyxnQkFMSyxVQUtMQSxnQkFMSztBQUFBLFVBTUxDLGVBTkssVUFNTEEsZUFOSzs7QUFBQSxrQkFRMkJ6RCxNQUFNSSxNQUFOLENBQWFzRCxNQUFiLEdBQzlCSixTQUFTdEQsTUFBTUksTUFBTixDQUFhc0QsTUFBdEIsQ0FEOEIsR0FFOUIsRUFWRztBQUFBLCtCQVFBQyxNQVJBO0FBQUEsVUFRQUEsTUFSQSxnQ0FRUyxFQVJUO0FBQUEsVUFRYUMsVUFSYixTQVFhQSxVQVJiOztBQUFBLFVBV0F4RCxNQVhBLEdBV1VKLEtBWFYsQ0FXQUksTUFYQTs7O0FBYVAsVUFBTXlELG1CQUFtQjtBQUN2QjdELG9CQUR1QjtBQUV2QjJEO0FBRnVCLE9BQXpCOztBQUtBLFVBQU0xRCxrREFDRDRELGdCQURDO0FBRUpsQixrQkFBVSxLQUFLN0MsS0FBTCxDQUFXZ0U7QUFGakIsUUFBTjs7QUFLQSxVQUFNM0Qsb0RBQ0QwRCxnQkFEQztBQUVKbE