UNPKG

kepler.gl

Version:

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

574 lines (569 loc) 102 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof3 = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.geoCoderPanelSelector = exports["default"] = exports.datasetAttributionSelector = exports.bottomWidgetSelector = exports.attributionSelector = exports.DEFAULT_KEPLER_GL_PROPS = void 0; exports.getVisibleDatasets = getVisibleDatasets; exports.isViewportDisjointed = exports.isSplitSelector = void 0; exports.makeGetActionCreators = makeGetActionCreators; exports.mapStateSelector = exports.mapFieldsSelector = void 0; exports.mapStateToProps = mapStateToProps; exports.sidePanelSelector = exports.plotContainerSelector = exports.notificationPanelSelector = exports.modalContainerSelector = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _console = _interopRequireDefault(require("global/console")); var _redux = require("redux"); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _reselect = require("reselect"); var _keplerglConnect = require("./connect/keplergl-connect"); var _reactIntl = require("react-intl"); var _localization = require("@kepler.gl/localization"); var _context = require("./context"); var _actions = require("@kepler.gl/actions"); var _commonUtils = require("@kepler.gl/common-utils"); var _styledComponents2 = require("./common/styled-components"); var _constants = require("@kepler.gl/constants"); var _sidePanel = _interopRequireDefault(require("./side-panel")); var _mapContainer2 = _interopRequireDefault(require("./map-container")); var _mapsLayout = _interopRequireDefault(require("./maps-layout")); var _bottomWidget = _interopRequireDefault(require("./bottom-widget")); var _modalContainer = _interopRequireDefault(require("./modal-container")); var _plotContainer = _interopRequireDefault(require("./plot-container")); var _notificationPanel = _interopRequireDefault(require("./notification-panel")); var _geocoderPanel = _interopRequireDefault(require("./geocoder-panel")); var _effectManager = _interopRequireDefault(require("./effects/effect-manager")); var _dndContext = _interopRequireDefault(require("./dnd-context")); var _useCloudListProvider = require("./hooks/use-cloud-list-provider"); var _utils = require("@kepler.gl/utils"); var _styles = require("@kepler.gl/styles"); var _templateObject; // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project 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); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(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; } function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } 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; } 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; } // Maybe we should think about exporting this or creating a variable // as part of the base.js theme var GlobalStyle = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: ", ";\n\n *,\n *:before,\n *:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n }\n\n ul {\n margin: 0;\n padding: 0;\n }\n\n li {\n margin: 0;\n }\n\n a {\n text-decoration: none;\n color: ", ";\n }\n\n :focus {\n outline: none;\n }\n\n .maplibregl-ctrl .maplibregl-ctrl-logo {\n display: none;\n }\n\n .mapboxgl-ctrl .mapboxgl-ctrl-logo {\n display: none;\n }\n"])), function (props) { return props.theme.fontFamily; }, function (props) { return props.theme.fontWeight; }, function (props) { return props.theme.fontSize; }, function (props) { return props.theme.lineHeight; }, function (props) { return props.theme.labelColor; }); var BottomWidgetOuter = _styledComponents["default"].div(function (_ref) { var absolute = _ref.absolute; return "\n ".concat(absolute ? 'position: absolute; bottom: 0; right: 0;' : '', "\n pointer-events: none; /* prevent padding from blocking input */\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }"); }); var isViewportDisjointed = exports.isViewportDisjointed = function isViewportDisjointed(props) { return props.mapState.isSplit && !props.mapState.isViewportSynced && props.mapState.splitMapViewports.length > 1; }; var mapStateSelector = exports.mapStateSelector = function mapStateSelector(props, index) { if (!Number.isFinite(index)) { // either no index arg or an invalid index was provided // it is expected to be either 0 or 1 when in split mode // only use the mapState return props.mapState; } return isViewportDisjointed(props) ? // mix together the viewport properties intended for this disjointed <MapContainer> with the other necessary mapState properties _objectSpread(_objectSpread({}, props.mapState), props.mapState.splitMapViewports[index]) : // otherwise only use the mapState props.mapState; }; var mapFieldsSelector = exports.mapFieldsSelector = function mapFieldsSelector(props) { var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; return { getMapboxRef: props.getMapboxRef, mapboxApiAccessToken: props.mapboxApiAccessToken, mapboxApiUrl: props.mapboxApiUrl ? props.mapboxApiUrl : DEFAULT_KEPLER_GL_PROPS.mapboxApiUrl, mapState: mapStateSelector(props, index), datasetAttributions: attributionSelector(props).sources, mapStyle: props.mapStyle, onDeckInitialized: props.onDeckInitialized, onViewStateChange: props.onViewStateChange, onMouseMove: props.onMouseMove, deckGlProps: props.deckGlProps, uiStateActions: props.uiStateActions, visStateActions: props.visStateActions, mapStateActions: props.mapStateActions, // visState visState: props.visState, // uiState activeSidePanel: props.uiState.activeSidePanel, mapControls: props.uiState.mapControls, readOnly: props.uiState.readOnly, locale: props.uiState.locale, isLoadingIndicatorVisible: Number(props.visState.loadingIndicatorValue) > 0, sidePanelWidth: props.sidePanelWidth ? props.sidePanelWidth : DEFAULT_KEPLER_GL_PROPS.width, // mapStyle topMapContainerProps: props.topMapContainerProps, bottomMapContainerProps: props.bottomMapContainerProps, // transformRequest for Mapbox basemaps transformRequest: props.transformRequest }; }; function getVisibleDatasets(datasets) { // We don't want Geocoder dataset to be present in SidePanel dataset list return (0, _utils.filterObjectByPredicate)(datasets, function (key) { return key !== _constants.GEOCODER_DATASET_NAME; }); } var sidePanelSelector = exports.sidePanelSelector = function sidePanelSelector(props, availableProviders, filteredDatasets) { return { appName: props.appName ? props.appName : DEFAULT_KEPLER_GL_PROPS.appName, version: props.version ? props.version : DEFAULT_KEPLER_GL_PROPS.version, appWebsite: props.appWebsite, mapStyle: props.mapStyle, onSaveMap: props.onSaveMap, uiState: props.uiState, mapStyleActions: props.mapStyleActions, visStateActions: props.visStateActions, uiStateActions: props.uiStateActions, mapStateActions: props.mapStateActions, datasets: filteredDatasets, filters: props.visState.filters, layers: props.visState.layers, layerOrder: props.visState.layerOrder, layerClasses: props.visState.layerClasses, interactionConfig: props.visState.interactionConfig, mapInfo: props.visState.mapInfo, layerBlending: props.visState.layerBlending, overlayBlending: props.visState.overlayBlending, width: props.sidePanelWidth ? props.sidePanelWidth : DEFAULT_KEPLER_GL_PROPS.width, availableProviders: availableProviders, mapSaved: props.providerState.mapSaved }; }; var plotContainerSelector = exports.plotContainerSelector = function plotContainerSelector(props) { return { width: props.width, height: props.height, exportImageSetting: props.uiState.exportImage, mapFields: mapFieldsSelector(props), addNotification: props.uiStateActions.addNotification, setExportImageSetting: props.uiStateActions.setExportImageSetting, setExportImageDataUri: props.uiStateActions.setExportImageDataUri, setExportImageError: props.uiStateActions.setExportImageError, splitMaps: props.visState.splitMaps }; }; var isSplitSelector = exports.isSplitSelector = function isSplitSelector(props) { return props.visState.splitMaps && props.visState.splitMaps.length > 1; }; var bottomWidgetSelector = exports.bottomWidgetSelector = function bottomWidgetSelector(props, theme) { return { filters: props.visState.filters, datasets: props.visState.datasets, uiState: props.uiState, layers: props.visState.layers, animationConfig: props.visState.animationConfig, visStateActions: props.visStateActions, toggleModal: props.uiStateActions.toggleModal, sidePanelWidth: props.uiState.readOnly ? 0 : props.sidePanelWidth + theme.sidePanel.margin.left }; }; var modalContainerSelector = exports.modalContainerSelector = function modalContainerSelector(props, rootNode) { return { appName: props.appName ? props.appName : DEFAULT_KEPLER_GL_PROPS.appName, mapStyle: props.mapStyle, visState: props.visState, mapState: props.mapState, uiState: props.uiState, providerState: props.providerState, mapboxApiAccessToken: props.mapboxApiAccessToken, mapboxApiUrl: props.mapboxApiUrl, visStateActions: props.visStateActions, uiStateActions: props.uiStateActions, mapStyleActions: props.mapStyleActions, providerActions: props.providerActions, rootNode: rootNode, // User defined cloud provider props cloudProviders: props.cloudProviders ? props.cloudProviders : DEFAULT_KEPLER_GL_PROPS.cloudProviders, onExportToCloudSuccess: props.onExportToCloudSuccess, onLoadCloudMapSuccess: props.onLoadCloudMapSuccess, onLoadCloudMapError: props.onLoadCloudMapError, onExportToCloudError: props.onExportToCloudError }; }; var geoCoderPanelSelector = exports.geoCoderPanelSelector = function geoCoderPanelSelector(props, dimensions) { return { isGeocoderEnabled: props.visState.interactionConfig.geocoder.enabled, mapboxApiAccessToken: props.mapboxApiAccessToken, mapState: props.mapState, uiState: props.uiState, layerOrder: props.visState.layerOrder, updateVisData: props.visStateActions.updateVisData, removeDataset: props.visStateActions.removeDataset, updateMap: props.mapStateActions.updateMap, appWidth: dimensions.width }; }; /** * Returns array of unique dataset attributions, each with title and url properties. */ var datasetAttributionSelector = exports.datasetAttributionSelector = (0, _reselect.createSelector)([function (state) { return state.visState.datasets; }], function (datasets) { var uniqueAttributions = []; Object.keys(datasets).forEach(function (key) { var _ds$metadata; var ds = datasets[key]; var attributions = ds === null || ds === void 0 || (_ds$metadata = ds.metadata) === null || _ds$metadata === void 0 ? void 0 : _ds$metadata.attributions; if (Array.isArray(attributions)) { attributions.forEach(function (attribution) { if (typeof attribution === 'string') { // attribution can be a raw string or a string with link tags var links = attribution.match(/<a[^]+?a>/g); if (links) { try { links === null || links === void 0 || links.forEach(function (link) { var _link$match, _link$match2; var href = (_link$match = link.match(/href="([^"]*)/)) === null || _link$match === void 0 ? void 0 : _link$match[1]; var title = (_link$match2 = link.match(/title="([^"]*)/)) === null || _link$match2 === void 0 ? void 0 : _link$match2[1]; if (href && title) { uniqueAttributions.push({ title: "".concat(link.indexOf('&copy;') >= 0 ? '© ' : '').concat(title), url: href }); } }); } catch (error) { // just ignore for now } } else { uniqueAttributions.push({ title: attribution, url: null }); } } }); } }); return uniqueAttributions; }); /** * Deduplicated dataset and layer text attributions and logos. * Returns text attributions and logos to display. */ var attributionSelector = exports.attributionSelector = (0, _reselect.createSelector)([datasetAttributionSelector], function (datasetAttributions) { // TODO collect attributions from layers, and merge with dataset attributions here var uniqueTextAttributions = datasetAttributions; var logos = []; return { sources: uniqueTextAttributions, logos: logos }; }); var notificationPanelSelector = exports.notificationPanelSelector = function notificationPanelSelector(props) { return { removeNotification: props.uiStateActions.removeNotification, notifications: props.uiState.notifications }; }; var DEFAULT_KEPLER_GL_PROPS = exports.DEFAULT_KEPLER_GL_PROPS = { mapStyles: [], mapStylesReplaceDefault: false, mapboxApiUrl: _constants.DEFAULT_MAPBOX_API_URL, width: 800, height: 800, appName: _constants.KEPLER_GL_NAME, version: _constants.KEPLER_GL_VERSION, sidePanelWidth: _constants.DIMENSIONS.sidePanel.width, theme: {}, cloudProviders: [], readOnly: false, featureFlags: {} }; KeplerGlFactory.deps = [_bottomWidget["default"], _geocoderPanel["default"], _mapContainer2["default"], _mapsLayout["default"], _modalContainer["default"], _sidePanel["default"], _plotContainer["default"], _notificationPanel["default"], _dndContext["default"], _effectManager["default"]]; function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout, ModalContainer, SidePanel, PlotContainer, NotificationPanel, DndContext) { /** @typedef {import('./kepler-gl').UnconnectedKeplerGlProps} KeplerGlProps */ /** @augments React.Component<KeplerGlProps> */ var KeplerGL = /*#__PURE__*/function (_Component) { function KeplerGL() { var _this; (0, _classCallCheck2["default"])(this, KeplerGL); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, KeplerGL, [].concat(args)); (0, _defineProperty2["default"])(_this, "state", { dimensions: null }); (0, _defineProperty2["default"])(_this, "_handleResize", function (dimensions) { _this.setState({ dimensions: dimensions }); }); (0, _defineProperty2["default"])(_this, "root", /*#__PURE__*/(0, _react.createRef)()); (0, _defineProperty2["default"])(_this, "bottomWidgetRef", /*#__PURE__*/(0, _react.createRef)()); /* selectors */ (0, _defineProperty2["default"])(_this, "themeSelector", function (props) { return props.theme; }); (0, _defineProperty2["default"])(_this, "availableThemeSelector", (0, _reselect.createSelector)(_this.themeSelector, function (theme) { return (0, _typeof2["default"])(theme) === 'object' ? _objectSpread(_objectSpread({}, _styles.theme), theme) : theme === _constants.THEME.light ? _styles.themeLT : theme === _constants.THEME.base ? _styles.themeBS : theme; })); (0, _defineProperty2["default"])(_this, "datasetsSelector", function (props) { return props.visState.datasets; }); (0, _defineProperty2["default"])(_this, "filteredDatasetsSelector", (0, _reselect.createSelector)(_this.datasetsSelector, getVisibleDatasets)); (0, _defineProperty2["default"])(_this, "availableProviders", (0, _reselect.createSelector)(function (props) { return props.cloudProviders; }, function (providers) { return Array.isArray(providers) && providers.length ? { hasStorage: providers.some(function (p) { return p.hasPrivateStorage(); }), hasShare: providers.some(function (p) { return p.hasSharingUrl(); }) } : {}; })); (0, _defineProperty2["default"])(_this, "localeMessagesSelector", (0, _reselect.createSelector)(function (props) { return props.localeMessages; }, function (customMessages) { return customMessages ? (0, _utils.mergeMessages)(_localization.messages, customMessages) : _localization.messages; })); (0, _defineProperty2["default"])(_this, "_loadMapStyle", function () { var defaultStyles = Object.values(_this.props.mapStyle.mapStyles); // add id to custom map styles if not given var customStyles = (_this.props.mapStyles || []).map(function (ms) { return _objectSpread(_objectSpread({}, ms), {}, { id: ms.id || (0, _commonUtils.generateHashId)() }); }); var allStyles = [].concat((0, _toConsumableArray2["default"])(customStyles), defaultStyles).reduce(function (accu, style) { accu[style.id] = style; return accu; }, {}); _this.props.mapStyleActions.loadMapStyles(allStyles); }); (0, _defineProperty2["default"])(_this, "_deleteMapLabels", function (containerId, layerId) { _this.props.visStateActions.toggleLayerForMap(containerId, layerId); }); return _this; } (0, _inherits2["default"])(KeplerGL, _Component); return (0, _createClass2["default"])(KeplerGL, [{ key: "componentDidMount", value: function componentDidMount() { var _getApplicationConfig; if (((_getApplicationConfig = (0, _utils.getApplicationConfig)().baseMapLibraryConfig) === null || _getApplicationConfig === void 0 || (_getApplicationConfig = _getApplicationConfig['mapbox']) === null || _getApplicationConfig === void 0 ? void 0 : _getApplicationConfig.mapLibName) === 'Mapbox') { this._validateMapboxToken(); } this._loadMapStyle(); if (typeof this.props.onKeplerGlInitialized === 'function') { this.props.onKeplerGlInitialized(); } if (this.root.current instanceof HTMLElement) { (0, _utils.observeDimensions)(this.root.current, this._handleResize); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { if (this.root.current instanceof HTMLElement) { (0, _utils.unobserveDimensions)(this.root.current); } } }, { key: "_validateMapboxToken", value: /* private methods */ function _validateMapboxToken() { var mapboxApiAccessToken = this.props.mapboxApiAccessToken; if (!(0, _utils.validateToken)(mapboxApiAccessToken)) { _console["default"].warn(_constants.MISSING_MAPBOX_TOKEN); } } }, { key: "render", value: // eslint-disable-next-line complexity function render() { var _this2 = this; var _this$props = this.props, _this$props$id = _this$props.id, id = _this$props$id === void 0 ? 'map' : _this$props$id, _this$props$width = _this$props.width, width = _this$props$width === void 0 ? DEFAULT_KEPLER_GL_PROPS.width : _this$props$width, _this$props$height = _this$props.height, height = _this$props$height === void 0 ? DEFAULT_KEPLER_GL_PROPS.height : _this$props$height, uiState = _this$props.uiState, visState = _this$props.visState, readOnly = _this$props.readOnly, featureFlags = _this$props.featureFlags, _this$props$cloudProv = _this$props.cloudProviders, cloudProviders = _this$props$cloudProv === void 0 ? [] : _this$props$cloudProv; var dimensions = this.state.dimensions || { width: width, height: height }; var splitMaps = visState.splitMaps, interactionConfig = visState.interactionConfig; var isSplit = isSplitSelector(this.props); var theme = this.availableThemeSelector(this.props); var localeMessages = this.localeMessagesSelector(this.props); var isExportingImage = uiState.exportImage.exporting; var availableProviders = this.availableProviders(this.props); var filteredDatasets = this.filteredDatasetsSelector(this.props); var sideFields = sidePanelSelector(this.props, availableProviders, filteredDatasets); var plotContainerFields = plotContainerSelector(this.props); var bottomWidgetFields = bottomWidgetSelector(this.props, theme); var modalContainerFields = modalContainerSelector(this.props, this.root.current); var geoCoderPanelFields = geoCoderPanelSelector(this.props, dimensions); var notificationPanelFields = notificationPanelSelector(this.props); var mapContainers = !isSplit ? [/*#__PURE__*/_react["default"].createElement(MapContainer, (0, _extends2["default"])({ primary: true, key: 0, index: 0 }, mapFieldsSelector(this.props), { containerId: 0, deleteMapLabels: this._deleteMapLabels }))] : splitMaps.map(function (settings, index) { return /*#__PURE__*/_react["default"].createElement(MapContainer, (0, _extends2["default"])({ key: index, index: index, primary: index === 1 }, mapFieldsSelector(_this2.props, index), { containerId: index, deleteMapLabels: _this2._deleteMapLabels })); }); return /*#__PURE__*/_react["default"].createElement(_context.RootContext.Provider, { value: this.root }, /*#__PURE__*/_react["default"].createElement(_context.FeatureFlagsContextProvider, { featureFlags: featureFlags }, /*#__PURE__*/_react["default"].createElement(_reactIntl.IntlProvider, { locale: uiState.locale, messages: localeMessages[uiState.locale] }, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyleSheetManager, { shouldForwardProp: _styledComponents2.shouldForwardProp }, /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, { theme: theme }, /*#__PURE__*/_react["default"].createElement(_useCloudListProvider.CloudListProvider, { providers: cloudProviders }, /*#__PURE__*/_react["default"].createElement(GlobalStyle, { className: "kepler-gl", id: "kepler-gl__".concat(id), style: { display: 'flex', flexDirection: 'column', position: 'relative', width: "".concat(width, "px"), height: "".concat(height, "px") }, ref: this.root }, /*#__PURE__*/_react["default"].createElement(NotificationPanel, notificationPanelFields), /*#__PURE__*/_react["default"].createElement(DndContext, { visState: visState }, !uiState.readOnly && !readOnly && /*#__PURE__*/_react["default"].createElement(SidePanel, sideFields), /*#__PURE__*/_react["default"].createElement(MapsLayout, { className: "maps", mapState: this.props.mapState }, mapContainers)), isExportingImage && /*#__PURE__*/_react["default"].createElement(PlotContainer, plotContainerFields), !isViewportDisjointed(this.props) && interactionConfig.geocoder.enabled && /*#__PURE__*/_react["default"].createElement(GeoCoderPanel, (0, _extends2["default"])({}, geoCoderPanelFields, { index: 0, unsyncedViewports: false })), isViewportDisjointed(this.props) && interactionConfig.geocoder.enabled && mapContainers.map(function (_mapContainer, index) { return /*#__PURE__*/_react["default"].createElement(GeoCoderPanel, (0, _extends2["default"])({ key: index }, geoCoderPanelFields, { index: index, unsyncedViewports: true })); }), /*#__PURE__*/_react["default"].createElement(BottomWidgetOuter, { absolute: !(0, _utils.hasPortableWidth)(_styles.breakPointValues) }, /*#__PURE__*/_react["default"].createElement(BottomWidget, (0, _extends2["default"])({ rootRef: this.bottomWidgetRef }, bottomWidgetFields, { containerW: dimensions.width, theme: theme }))), /*#__PURE__*/_react["default"].createElement(ModalContainer, (0, _extends2["default"])({}, modalContainerFields, { containerW: dimensions.width, containerH: dimensions.height }))))))))); } }]); }(_react.Component); (0, _defineProperty2["default"])(KeplerGL, "defaultProps", DEFAULT_KEPLER_GL_PROPS); (0, _defineProperty2["default"])(KeplerGL, "contextType", _context.RootContext); return (0, _keplerglConnect.connect)(mapStateToProps, makeMapDispatchToProps)((0, _styledComponents.withTheme)(KeplerGL)); } function mapStateToProps(state, props) { return _objectSpread(_objectSpread({}, props), {}, { visState: state.visState, mapStyle: state.mapStyle, mapState: state.mapState, uiState: state.uiState, providerState: state.providerState }); } var defaultUserActions = {}; var getDispatch = function getDispatch(dispatch) { return dispatch; }; var getUserActions = function getUserActions(dispatch, props) { return props.actions || defaultUserActions; }; /** @type {() => import('reselect').OutputParametricSelector<any, any, any, any>} */ function makeGetActionCreators() { return (0, _reselect.createSelector)([getDispatch, getUserActions], function (dispatch, userActions) { var _map = [_actions.VisStateActions, _actions.MapStateActions, _actions.MapStyleActions, _actions.UIStateActions, _actions.ProviderActions].map(function (actions) { return (0, _redux.bindActionCreators)(mergeActions(actions, userActions), dispatch); }), _map2 = (0, _slicedToArray2["default"])(_map, 5), visStateActions = _map2[0], mapStateActions = _map2[1], mapStyleActions = _map2[2], uiStateActions = _map2[3], providerActions = _map2[4]; return { visStateActions: visStateActions, mapStateActions: mapStateActions, mapStyleActions: mapStyleActions, uiStateActions: uiStateActions, providerActions: providerActions, dispatch: dispatch }; }); } function makeMapDispatchToProps() { var getActionCreators = makeGetActionCreators(); var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { var groupedActionCreators = getActionCreators(dispatch, ownProps); return _objectSpread(_objectSpread({}, groupedActionCreators), {}, { dispatch: dispatch }); }; return mapDispatchToProps; } /** * Override default kepler.gl actions with user defined actions using the same key */ function mergeActions(actions, userActions) { var overrides = {}; for (var key in userActions) { if (Object.prototype.hasOwnProperty.call(userActions, key) && Object.prototype.hasOwnProperty.call(actions, key)) { overrides[key] = userActions[key]; } } return _objectSpread(_objectSpread({}, actions), overrides); } var _default = exports["default"] = KeplerGlFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVkdXgiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9rZXBsZXJnbENvbm5lY3QiLCJfcmVhY3RJbnRsIiwiX2xvY2FsaXphdGlvbiIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfY29tbW9uVXRpbHMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29uc3RhbnRzIiwiX3NpZGVQYW5lbCIsIl9tYXBDb250YWluZXIyIiwiX21hcHNMYXlvdXQiLCJfYm90dG9tV2lkZ2V0IiwiX21vZGFsQ29udGFpbmVyIiwiX3Bsb3RDb250YWluZXIiLCJfbm90aWZpY2F0aW9uUGFuZWwiLCJfZ2VvY29kZXJQYW5lbCIsIl9lZmZlY3RNYW5hZ2VyIiwiX2RuZENvbnRleHQiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiR2xvYmFsU3R5bGUiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJmb250RmFtaWx5IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwibGluZUhlaWdodCIsImxhYmVsQ29sb3IiLCJCb3R0b21XaWRnZXRPdXRlciIsIl9yZWYiLCJhYnNvbHV0ZSIsImNvbmNhdCIsImlzVmlld3BvcnREaXNqb2ludGVkIiwiZXhwb3J0cyIsIm1hcFN0YXRlIiwiaXNTcGxpdCIsImlzVmlld3BvcnRTeW5jZWQiLCJzcGxpdE1hcFZpZXdwb3J0cyIsIm1hcFN0YXRlU2VsZWN0b3IiLCJpbmRleCIsIk51bWJlciIsImlzRmluaXRlIiwibWFwRmllbGRzU2VsZWN0b3IiLCJ1bmRlZmluZWQiLCJnZXRNYXBib3hSZWYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsIkRFRkFVTFRfS0VQTEVSX0dMX1BST1BTIiwiZGF0YXNldEF0dHJpYnV0aW9ucyIsImF0dHJpYnV0aW9uU2VsZWN0b3IiLCJzb3VyY2VzIiwibWFwU3R5bGUiLCJvbkRlY2tJbml0aWFsaXplZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwib25Nb3VzZU1vdmUiLCJkZWNrR2xQcm9wcyIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJ1aVN0YXRlIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsImxvY2FsZSIsImlzTG9hZGluZ0luZGljYXRvclZpc2libGUiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJzaWRlUGFuZWxXaWR0aCIsIndpZHRoIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJnZXRWaXNpYmxlRGF0YXNldHMiLCJkYXRhc2V0cyIsImZpbHRlck9iamVjdEJ5UHJlZGljYXRlIiwia2V5IiwiR0VPQ09ERVJfREFUQVNFVF9OQU1FIiwic2lkZVBhbmVsU2VsZWN0b3IiLCJhdmFpbGFibGVQcm92aWRlcnMiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwTmFtZSIsInZlcnNpb24iLCJhcHBXZWJzaXRlIiwib25TYXZlTWFwIiwibWFwU3R5bGVBY3Rpb25zIiwiZmlsdGVycyIsImxheWVycyIsImxheWVyT3JkZXIiLCJsYXllckNsYXNzZXMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsIm1hcEluZm8iLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwibWFwU2F2ZWQiLCJwcm92aWRlclN0YXRlIiwicGxvdENvbnRhaW5lclNlbGVjdG9yIiwiaGVpZ2h0IiwiZXhwb3J0SW1hZ2VTZXR0aW5nIiwiZXhwb3J0SW1hZ2UiLCJtYXBGaWVsZHMiLCJhZGROb3RpZmljYXRpb24iLCJzZXRFeHBvcnRJbWFnZVNldHRpbmciLCJzZXRFeHBvcnRJbWFnZURhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yIiwic3BsaXRNYXBzIiwiaXNTcGxpdFNlbGVjdG9yIiwiYm90dG9tV2lkZ2V0U2VsZWN0b3IiLCJhbmltYXRpb25Db25maWciLCJ0b2dnbGVNb2RhbCIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCJtb2RhbENvbnRhaW5lclNlbGVjdG9yIiwicm9vdE5vZGUiLCJwcm92aWRlckFjdGlvbnMiLCJjbG91ZFByb3ZpZGVycyIsIm9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcEVycm9yIiwib25FeHBvcnRUb0Nsb3VkRXJyb3IiLCJnZW9Db2RlclBhbmVsU2VsZWN0b3IiLCJkaW1lbnNpb25zIiwiaXNHZW9jb2RlckVuYWJsZWQiLCJnZW9jb2RlciIsImVuYWJsZWQiLCJ1cGRhdGVWaXNEYXRhIiwicmVtb3ZlRGF0YXNldCIsInVwZGF0ZU1hcCIsImFwcFdpZHRoIiwiZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3IiLCJjcmVhdGVTZWxlY3RvciIsInN0YXRlIiwidW5pcXVlQXR0cmlidXRpb25zIiwiX2RzJG1ldGFkYXRhIiwiZHMiLCJhdHRyaWJ1dGlvbnMiLCJtZXRhZGF0YSIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0aW9uIiwibGlua3MiLCJtYXRjaCIsImxpbmsiLCJfbGluayRtYXRjaCIsIl9saW5rJG1hdGNoMiIsImhyZWYiLCJ0aXRsZSIsImluZGV4T2YiLCJ1cmwiLCJlcnJvciIsInVuaXF1ZVRleHRBdHRyaWJ1dGlvbnMiLCJsb2dvcyIsIm5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IiLCJyZW1vdmVOb3RpZmljYXRpb24iLCJub3RpZmljYXRpb25zIiwibWFwU3R5bGVzIiwibWFwU3R5bGVzUmVwbGFjZURlZmF1bHQiLCJERUZBVUxUX01BUEJPWF9BUElfVVJMIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIkRJTUVOU0lPTlMiLCJmZWF0dXJlRmxhZ3MiLCJLZXBsZXJHbEZhY3RvcnkiLCJkZXBzIiwiQm90dG9tV2lkZ2V0RmFjdG9yeSIsIkdlb0NvZGVyUGFuZWxGYWN0b3J5IiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsIk1hcHNMYXlvdXRGYWN0b3J5IiwiTW9kYWxDb250YWluZXJGYWN0b3J5IiwiU2lkZVBhbmVsRmFjdG9yeSIsIlBsb3RDb250YWluZXJGYWN0b3J5IiwiTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5IiwiRG5kQ29udGV4dEZhY3RvcnkiLCJFZmZlY3RNYW5hZ2VyRmFjdG9yeSIsIkJvdHRvbVdpZGdldCIsIkdlb0NvZGVyUGFuZWwiLCJNYXBDb250YWluZXIiLCJNYXBzTGF5b3V0IiwiTW9kYWxDb250YWluZXIiLCJTaWRlUGFuZWwiLCJQbG90Q29udGFpbmVyIiwiTm90aWZpY2F0aW9uUGFuZWwiLCJEbmRDb250ZXh0IiwiS2VwbGVyR0wiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJfa2V5Iiwic2V0U3RhdGUiLCJjcmVhdGVSZWYiLCJ0aGVtZVNlbGVjdG9yIiwiX3R5cGVvZjIiLCJiYXNpY1RoZW1lIiwiVEhFTUUiLCJsaWdodCIsInRoZW1lTFQiLCJiYXNlIiwidGhlbWVCUyIsImRhdGFzZXRzU2VsZWN0b3IiLCJwcm92aWRlcnMiLCJoYXNTdG9yYWdlIiwic29tZSIsInAiLCJoYXNQcml2YXRlU3RvcmFnZSIsImhhc1NoYXJlIiwiaGFzU2hhcmluZ1VybCIsImxvY2FsZU1lc3NhZ2VzIiwiY3VzdG9tTWVzc2FnZXMiLCJtZXJnZU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJkZWZhdWx0U3R5bGVzIiwidmFsdWVzIiwiY3VzdG9tU3R5bGVzIiwibWFwIiwibXMiLCJpZCIsImdlbmVyYXRlSGFzaElkIiwiYWxsU3R5bGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlZHVjZSIsImFjY3UiLCJzdHlsZSIsImxvYWRNYXBTdHlsZXMiLCJjb250YWluZXJJZCIsImxheWVySWQiLCJ0b2dnbGVMYXllckZvck1hcCIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwidmFsdWUiLCJjb21wb25lbnREaWRNb3VudCIsIl9nZXRBcHBsaWNhdGlvbkNvbmZpZyIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJtYXBMaWJOYW1lIiwiX3ZhbGlkYXRlTWFwYm94VG9rZW4iLCJfbG9hZE1hcFN0eWxlIiwib25LZXBsZXJHbEluaXRpYWxpemVkIiwicm9vdCIsImN1cnJlbnQiLCJIVE1MRWxlbWVudCIsIm9ic2VydmVEaW1lbnNpb25zIiwiX2hhbmRsZVJlc2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsInZhbGlkYXRlVG9rZW4iLCJDb25zb2xlIiwid2FybiIsIk1JU1NJTkdfTUFQQk9YX1RPS0VOIiwicmVuZGVyIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRpZCIsIl90aGlzJHByb3BzJHdpZHRoIiwiX3RoaXMkcHJvcHMkaGVpZ2h0IiwiX3RoaXMkcHJvcHMkY2xvdWRQcm92IiwiYXZhaWxhYmxlVGhlbWVTZWxlY3RvciIsImxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IiLCJpc0V4cG9ydGluZ0ltYWdlIiwiZXhwb3J0aW5nIiwiZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yIiwic2lkZUZpZWxkcyIsInBsb3RDb250YWluZXJGaWVsZHMiLCJib3R0b21XaWRnZXRGaWVsZHMiLCJtb2RhbENvbnRhaW5lckZpZWxkcyIsImdlb0NvZGVyUGFuZWxGaWVsZHMiLCJub3RpZmljYXRpb25QYW5lbEZpZWxkcyIsIm1hcENvbnRhaW5lcnMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwicHJpbWFyeSIsImRlbGV0ZU1hcExhYmVscyIsIl9kZWxldGVNYXBMYWJlbHMiLCJzZXR0aW5ncyIsIlJvb3RDb250ZXh0IiwiUHJvdmlkZXIiLCJGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIiLCJJbnRsUHJvdmlkZXIiLCJTdHlsZVNoZWV0TWFuYWdlciIsInNob3VsZEZvcndhcmRQcm9wIiwiVGhlbWVQcm92aWRlciIsIkNsb3VkTGlzdFByb3ZpZGVyIiwiY2xhc3NOYW1lIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJwb3NpdGlvbiIsInJlZiIsInVuc3luY2VkVmlld3BvcnRzIiwiX21hcENvbnRhaW5lciIsImhhc1BvcnRhYmxlV2lkdGgiLCJicmVha1BvaW50VmFsdWVzIiwicm9vdFJlZiIsImJvdHRvbVdpZGdldFJlZiIsImNvbnRhaW5lclciLCJjb250YWluZXJIIiwiQ29tcG9uZW50Iiwia2VwbGVyR2xDb25uZWN0IiwibWFwU3RhdGVUb1Byb3BzIiwibWFrZU1hcERpc3BhdGNoVG9Qcm9wcyIsIndpdGhUaGVtZSIsImRlZmF1bHRVc2VyQWN0aW9ucyIsImdldERpc3BhdGNoIiwiZGlzcGF0Y2giLCJnZXRVc2VyQWN0aW9ucyIsImFjdGlvbnMiLCJtYWtlR2V0QWN0aW9uQ3JlYXRvcnMiLCJ1c2VyQWN0aW9ucyIsIl9tYXAiLCJWaXNTdGF0ZUFjdGlvbnMiLCJNYXBTdGF0ZUFjdGlvbnMiLCJNYXBTdHlsZUFjdGlvbnMiLCJVSVN0YXRlQWN0aW9ucyIsIlByb3ZpZGVyQWN0aW9ucyIsImJpbmRBY3Rpb25DcmVhdG9ycyIsIm1lcmdlQWN0aW9ucyIsIl9tYXAyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZ2V0QWN0aW9uQ3JlYXRvcnMiLCJtYXBEaXNwYXRjaFRvUHJvcHMiLCJvd25Qcm9wcyIsImdyb3VwZWRBY3Rpb25DcmVhdG9ycyIsIm92ZXJyaWRlcyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2tlcGxlci1nbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWYsIERpc3BhdGNofSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge2JpbmRBY3Rpb25DcmVhdG9yc30gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZSwgU3R5bGVTaGVldE1hbmFnZXIsIFRoZW1lUHJvdmlkZXJ9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7Y29ubmVjdCBhcyBrZXBsZXJHbENvbm5lY3R9IGZyb20gJy4vY29ubmVjdC9rZXBsZXJnbC1jb25uZWN0JztcbmltcG9ydCB7SW50bFByb3ZpZGVyfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCB7bWVzc2FnZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7Um9vdENvbnRleHQsIEZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlciwgRmVhdHVyZUZsYWdzfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRpb25XaXRoU3R5bGUsXG4gIERhdGFzZXRBdHRyaWJ1dGlvbixcbiAgT25FcnJvckNhbGxCYWNrLFxuICBPblN1Y2Nlc3NDYWxsQmFjayxcbiAgVmlld3BvcnRcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7XG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgTWFwU3R5bGVBY3Rpb25zLFxuICBQcm92aWRlckFjdGlvbnMsXG4gIFVJU3RhdGVBY3Rpb25zLFxuICBWaXNTdGF0ZUFjdGlvbnNcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuXG5pbXBvcnQge3Nob3VsZEZvcndhcmRQcm9wfSBmcm9tICcuL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbnR5cGUgS2VwbGVyR2xBY3Rpb25zID0ge1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgbWFwU3R5bGVBY3Rpb25zOiB0eXBlb2YgTWFwU3R5bGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuICBwcm92aWRlckFjdGlvbnM6IHR5cGVvZiBQcm92aWRlckFjdGlvbnM7XG59O1xuXG5pbXBvcnQge1xuICBESU1FTlNJT05TLFxuICBLRVBMRVJfR0xfTkFNRSxcbiAgS0VQTEVSX0dMX1ZFUlNJT04sXG4gIFRIRU1FLFxuICBERUZBVUxUX01BUEJPWF9BUElfVVJMLFxuICBHRU9DT0RFUl9EQVRBU0VUX05BTUUsXG4gIE1JU1NJTkdfTUFQQk9YX1RPS0VOXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IFNpZGVQYW5lbEZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsJztcbmltcG9ydCBNYXBDb250YWluZXJGYWN0b3J5IGZyb20gJy4vbWFwLWNvbnRhaW5lcic7XG5pbXBvcnQgTWFwc0xheW91dEZhY3RvcnkgZnJvbSAnLi9tYXBzLWxheW91dCc7XG5pbXBvcnQgQm90dG9tV2lkZ2V0RmFjdG9yeSBmcm9tICcuL2JvdHRvbS13aWRnZXQnO1xuaW1wb3J0IE1vZGFsQ29udGFpbmVyRmFjdG9yeSBmcm9tICcuL21vZGFsLWNvbnRhaW5lcic7XG5pbXBvcnQgUGxvdENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9wbG90LWNvbnRhaW5lcic7XG5pbXBvcnQgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5IGZyb20gJy4vbm90aWZpY2F0aW9uLXBhbmVsJztcbmltcG9ydCBHZW9Db2RlclBhbmVsRmFjdG9yeSBmcm9tICcuL2dlb2NvZGVyLXBhbmVsJztcbmltcG9ydCBFZmZlY3RNYW5hZ2VyRmFjdG9yeSBmcm9tICcuL2VmZmVjdHMvZWZmZWN0LW1hbmFnZXInO1xuaW1wb3J0IERuZENvbnRleHRGYWN0b3J5IGZyb20gJy4vZG5kLWNvbnRleHQnO1xuaW1wb3J0IHtDbG91ZExpc3RQcm92aWRlcn0gZnJvbSAnLi9ob29rcy91c2UtY2xvdWQtbGlzdC1wcm92aWRlcic7XG5cbmltcG9ydCB7XG4gIGZpbHRlck9iamVjdEJ5UHJlZGljYXRlLFxuICB2YWxpZGF0ZVRva2VuLFxuICBtZXJnZU1lc3NhZ2VzLFxuICBvYnNlcnZlRGltZW5zaW9ucyxcbiAgdW5vYnNlcnZlRGltZW5zaW9ucyxcbiAgaGFzUG9ydGFibGVXaWR0aCxcbiAgZ2V0QXBwbGljYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7dGhlbWUgYXMgYmFzaWNUaGVtZSwgdGhlbWVMVCwgdGhlbWVCUywgYnJlYWtQb2ludFZhbHVlc30gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtLZXBsZXJHbFN0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7UHJvdmlkZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvY2xvdWQtcHJvdmlkZXJzJztcblxuLy8gTWF5YmUgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGV4cG9ydGluZyB0aGlzIG9yIGNyZWF0aW5nIGEgdmFyaWFibGVcbi8vIGFzIHBhcnQgb2YgdGhlIGJhc2UuanMgdGhlbWVcbmNvbnN0IEdsb2JhbFN0eWxlID0gc3R5bGVkLmRpdmBcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udEZhbWlseX07XG4gIGZvbnQtd2VpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRXZWlnaHR9O1xuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udFNpemV9O1xuICBsaW5lLWhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5saW5lSGVpZ2h0fTtcblxuICAqLFxuICAqOmJlZm9yZSxcbiAgKjphZnRlciB7XG4gICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgdWwge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgbGkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yfTtcbiAgfVxuXG4gIDpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5tYXBsaWJyZWdsLWN0cmwgLm1hcGxpYnJlZ2wtY3RybC1sb2dvIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLm1hcGJveGdsLWN0cmwgLm1hcGJveGdsLWN0cmwtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuYDtcblxudHlwZSBCb3R0b21XaWRnZXRPdXRlclByb3BzID0ge1xuICBhYnNvbHV0ZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBCb3R0b21XaWRnZXRPdXRlciA9IHN0eWxlZC5kaXY8Qm90dG9tV2lkZ2V0T3V0ZXJQcm9wcz4oXG4gICh7YWJzb2x1dGV9KSA9PiBgXG4gICR7YWJzb2x1dGUgPyAncG9zaXRpb246IGFic29sdXRlOyBib3R0b206IDA7IHJpZ2h0OiAwOycgOiAnJ31cbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIHByZXZlbnQgcGFkZGluZyBmcm9tIGJsb2NraW5nIGlucHV0ICovXG4gICYgPiAqIHtcbiAgICAvKiBhbGwgY2hpbGRyZW4gc2hvdWxkIGFsbG93IGlucHV0ICovXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgfWBcbik7XG5cbmV4cG9ydCBjb25zdCBpc1ZpZXdwb3J0RGlzam9pbnRlZCA9IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICBwcm9wcy5tYXBTdGF0ZS5pc1NwbGl0ICYmXG4gICAgIXByb3BzLm1hcFN0YXRlLmlzVmlld3BvcnRTeW5jZWQgJiZcbiAgICBwcm9wcy5tYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5sZW5ndGggPiAxXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwU3RhdGVTZWxlY3RvciA9IChwcm9wczogYW55LCBpbmRleDogbnVtYmVyKTogYW55ID0+IHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5kZXgpKSB7XG4gICAgLy8gZWl0aGVyIG5vIGluZGV4IGFyZyBvciBhbiBpbnZhbGlkIGluZGV4IHdhcyBwcm92aWRlZFxuICAgIC8vIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGVpdGhlciAwIG9yIDEgd2hlbiBpbiBzcGxpdCBtb2RlXG4gICAgLy8gb25seSB1c2UgdGhlIG1hcFN0YXRlXG4gICAgcmV0dXJuIHByb3BzLm1hcFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIGlzVmlld3BvcnREaXNqb2ludGVkKHByb3BzKVxuICAgID8gLy8gbWl4IHRvZ2V0aGVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGludGVuZGVkIGZvciB0aGlzIGRpc2pvaW50ZWQgPE1hcENvbnRhaW5lcj4gd2l0aCB0aGUgb3RoZXIgbmVjZXNzYXJ5IG1hcFN0YXRlIHByb3BlcnRpZXNcbiAgICAgIHsuLi5wcm9wcy5tYXBTdGF0ZSwgLi4ucHJvcHMubWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHNbaW5kZXhdfVxuICAgIDogLy8gb3RoZXJ3aXNlIG9ubHkgdXNlIHRoZSBtYXBTdGF0ZVxuICAgICAgcHJvcHMubWFwU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwRmllbGRzU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIGluZGV4ID0gMCkgPT4gKHtcbiAgZ2V0TWFwYm94UmVmOiBwcm9wcy5nZXRNYXBib3hSZWYsXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwYm94QXBpVXJsOiBwcm9wcy5tYXBib3hBcGlVcmwgPyBwcm9wcy5tYXBib3hBcGlVcmwgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5tYXBib3hBcGlVcmwsXG4gIG1hcFN0YXRlOiBtYXBTdGF0ZVNlbGVjdG9yKHByb3BzLCBpbmRleCksXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnM6IGF0dHJpYnV0aW9uU2VsZWN0b3IocHJvcHMpLnNvdXJjZXMsXG4gIG1hcFN0eWxlOiBwcm9wcy5tYXBTdHlsZSxcbiAgb25EZWNrSW5pdGlhbGl6ZWQ6IHByb3BzLm9uRGVja0luaXRpYWxpemVkLFxuICBvblZpZXdTdGF0ZUNoYW5nZTogcHJvcHMub25WaWV3U3RhdGVDaGFuZ2UsXG4gIG9uTW91c2VNb3ZlOiBwcm9wcy5vbk1vdXNlTW92ZSxcbiAgZGVja0dsUHJvcHM6IHByb3BzLmRlY2tHbFByb3BzLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICBtYXBTdGF0ZUFjdGlvbnM6IHByb3BzLm1hcFN0YXRlQWN0aW9ucyxcblxuICAvLyB2aXNTdGF0ZVxuICB2aXNTdGF0ZTogcHJvcHMudmlzU3RhdGUsXG5cbiAgLy8gdWlTdGF0ZVxuICBhY3RpdmVTaWRlUGFuZWw6IHByb3BzLnVpU3RhdGUuYWN0aXZlU2lkZVBhbmVsLFxuICBtYXBDb250cm9sczogcHJvcHMudWlTdGF0ZS5tYXBDb250cm9scyxcbiAgcmVhZE9ubHk6IHByb3BzLnVpU3RhdGUucmVhZE9ubHksXG4gIGxvY2FsZTogcHJvcHMudWlTdGF0ZS5sb2NhbGUsXG4gIGlzTG9hZGluZ0luZGljYXRvclZpc2libGU6IE51bWJlcihwcm9wcy52aXNTdGF0ZS5sb2FkaW5nSW5kaWNhdG9yVmFsdWUpID4gMCxcbiAgc2lkZVBhbmVsV2lkdGg6IHByb3BzLnNpZGVQYW5lbFdpZHRoID8gcHJvcHMuc2lkZVBhbmVsV2lkdGggOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy53aWR0aCxcblxuICAvLyBtYXBTdHlsZVxuICB0b3BNYXBDb250YWluZXJQcm9wczogcHJvcHMudG9wTWFwQ29udGFpbmVyUHJvcHMsXG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBwcm9wcy5ib3R0b21NYXBDb250YWluZXJQcm9wcyxcblxuICAvLyB0cmFuc2Zvcm1SZXF1ZXN0IGZvciBNYXBib3ggYmFzZW1hcHNcbiAgdHJhbnNmb3JtUmVxdWVzdDogcHJvcHMudHJhbnNmb3JtUmVxdWVzdFxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmxlRGF0YXNldHMoZGF0YXNldHMpIHtcbiAgLy8gV2UgZG9uJ3Qgd2FudCBHZW9jb2RlciBkYXRhc2V0IHRvIGJlIHByZXNlbnQgaW4gU2lkZVBhbmVsIGRhdGFzZXQgbGlzdFxuICByZXR1cm4gZmlsdGVyT2JqZWN0QnlQcmVkaWNhdGUoZGF0YXNldHMsIGtleSA9PiBrZXkgIT09IEdFT0NPREVSX0RBVEFTRVRfTkFNRSk7XG59XG5cbmV4cG9ydCBjb25zdCBzaWRlUGFuZWxTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgYXZhaWxhYmxlUHJvdmlkZXJzLCBmaWx0ZXJlZERhdGFzZXRzKSA9PiAoe1xuICBhcHBOYW1lOiBwcm9wcy5hcHBOYW1lID8gcHJvcHMuYXBwTmFtZSA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmFwcE5hbWUsXG4gIHZlcnNpb246IHByb3BzLnZlcnNpb24gPyBwcm9wcy52ZXJzaW9uIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMudmVyc2lvbixcbiAgYXBwV2Vic2l0ZTogcHJvcHMuYXBwV2Vic2l0ZSxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICBvblNhdmVNYXA6IHByb3BzLm9uU2F2ZU1hcCxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbWFwU3R5bGVBY3Rpb25zOiBwcm9wcy5tYXBTdHlsZUFjdGlvbnMsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0YXRlQWN0aW9uczogcHJvcHMubWFwU3RhdGVBY3Rpb25zLFxuXG4gIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICBmaWx0ZXJzOiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzLFxuICBsYXllcnM6IHByb3BzLnZpc1N0YXRlLmxheWVycyxcbiAgbGF5ZXJPcmRlcjogcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcixcbiAgbGF5ZXJDbGFzc2VzOiBwcm9wcy52aXNTdGF0ZS5sYXllckNsYXNzZXMsXG4gIGludGVyYWN0aW9uQ29uZmlnOiBwcm9wcy52aXNTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgbWFwSW5mbzogcHJvcHMudmlzU3RhdGUubWFwSW5mbyxcbiAgbGF5ZXJCbGVuZGluZzogcHJvcHMudmlzU3RhdGUubGF5ZXJCbGVuZGluZyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBwcm9wcy52aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmcsXG5cbiAgd2lkdGg6IHByb3BzLnNpZGVQYW5lbFdpZHRoID8gcHJvcHMuc2lkZVBhbmVsV2lkdGggOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy53aWR0aCxcbiAgYXZhaWxhYmxlUHJvdmlkZXJzLFxuICBtYXBTYXZlZDogcHJvcHMucHJvdmlkZXJTdGF0ZS5tYXBTYXZlZFxufSk7XG5cbmV4cG9ydCBjb25zdCBwbG90Q29udGFpbmVyU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+ICh7XG4gIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQsXG4gIGV4cG9ydEltYWdlU2V0dGluZzogcHJvcHMudWlTdGF0ZS5leHBvcnRJbWFnZSxcbiAgbWFwRmllbGRzOiBtYXBGaWVsZHNTZWxlY3Rvcihwcm9wcyksXG4gIGFkZE5vdGlmaWNhdGlvbjogcHJvcHMudWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uLFxuICBzZXRFeHBvcnRJbWFnZVNldHRpbmc6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlU2V0dGluZyxcbiAgc2V0RXhwb3J0SW1hZ2VEYXRhVXJpOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZURhdGFVcmksXG4gIHNldEV4cG9ydEltYWdlRXJyb3I6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlRXJyb3IsXG4gIHNwbGl0TWFwczogcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzXG59KTtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT5cbiAgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzICYmIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAxO1xuXG5leHBvcnQgY29uc3QgYm90dG9tV2lkZ2V0U2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIHRoZW1lKSA9PiAoe1xuICBmaWx0ZXJzOiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzLFxuICBkYXRhc2V0czogcHJvcHMudmlzU3RhdGUuZGF0YXNldHMsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIGxheWVyczogcHJvcHMudmlzU3RhdGUubGF5ZXJzLFxuICBhbmltYXRpb25Db25maWc6IHByb3BzLnZpc1N0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIHRvZ2dsZU1vZGFsOiBwcm9wcy51aVN0YXRlQWN0aW9ucy50b2dnbGVNb2RhbCxcbiAgc2lkZVBhbmVsV2lkdGg6IHByb3BzLnVpU3RhdGUucmVhZE9ubHkgPyAwIDogcHJvcHMuc2lkZVBhbmVsV2lkdGggKyB0aGVtZS5zaWRlUGFuZWwubWFyZ2luLmxlZnRcbn0pO1xuXG5leHBvcnQgY29uc3QgbW9kYWxDb250YWluZXJTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgcm9vdE5vZGUpID0+ICh7XG4gIGFwcE5hbWU6IHByb3BzLmFwcE5hbWUgPyBwcm9wcy5hcHBOYW1lIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuYXBwTmFtZSxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICB2aXNTdGF0ZTogcHJvcHMudmlzU3RhdGUsXG4gIG1hcFN0YXRlOiBwcm9wcy5tYXBTdGF0ZSxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgcHJvdmlkZXJTdGF0ZTogcHJvcHMucHJvdmlkZXJTdGF0ZSxcblxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogcHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcGJveEFwaVVybDogcHJvcHMubWFwYm94QXBpVXJsLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdWlTdGF0ZUFjdGlvbnM6IHByb3BzLnVpU3RhdGVBY3Rpb25zLFxuICBtYXBTdHlsZUFjdGlvbnM6IHByb3BzLm1hcFN0eWxlQWN0aW9ucyxcbiAgcHJvdmlkZXJBY3Rpb25zOiBwcm9wcy5wcm92aWRlckFjdGlvbnMsXG5cbiAgcm9vdE5vZGUsXG4gIC8vIFVzZXIgZGVmaW5lZCBjbG91ZCBwcm92aWRlciBwcm9wc1xuICBjbG91ZFByb3ZpZGVyczogcHJvcHMuY2xvdWRQcm92aWRlcnNcbiAgICA/IHByb3BzLmNsb3VkUHJvdmlkZXJzXG4gICAgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5jbG91ZFByb3ZpZGVycyx