UNPKG

@nebula.gl/layers

Version:

A suite of 3D-enabled data editing layers, suitable for deck.gl

621 lines (540 loc) 78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _layers = require("@deck.gl/layers"); var _editModes = require("@nebula.gl/edit-modes"); var _constants = require("../constants"); var _editableLayer = _interopRequireDefault(require("./editable-layer")); var _editablePathLayer = _interopRequireDefault(require("./editable-path-layer")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var DEFAULT_LINE_COLOR = [0x0, 0x0, 0x0, 0x99]; var DEFAULT_FILL_COLOR = [0x0, 0x0, 0x0, 0x90]; var DEFAULT_SELECTED_LINE_COLOR = [0x0, 0x0, 0x0, 0xff]; var DEFAULT_SELECTED_FILL_COLOR = [0x0, 0x0, 0x90, 0x90]; var DEFAULT_TENTATIVE_LINE_COLOR = [0x90, 0x90, 0x90, 0xff]; var DEFAULT_TENTATIVE_FILL_COLOR = [0x90, 0x90, 0x90, 0x90]; var DEFAULT_EDITING_EXISTING_POINT_COLOR = [0xc0, 0x0, 0x0, 0xff]; var DEFAULT_EDITING_INTERMEDIATE_POINT_COLOR = [0x0, 0x0, 0x0, 0x80]; var DEFAULT_EDITING_SNAP_POINT_COLOR = [0x7c, 0x00, 0xc0, 0xff]; var DEFAULT_EDITING_POINT_OUTLINE_COLOR = [0xff, 0xff, 0xff, 0xff]; var DEFAULT_EDITING_EXISTING_POINT_RADIUS = 5; var DEFAULT_EDITING_INTERMEDIATE_POINT_RADIUS = 3; var DEFAULT_EDITING_SNAP_POINT_RADIUS = 7; var DEFAULT_TOOLTIP_FONT_SIZE = 32 * _constants.PROJECTED_PIXEL_SIZE_MULTIPLIER; var DEFAULT_EDIT_MODE = _editModes.DrawPolygonMode; function guideAccessor(accessor) { if (!accessor || typeof accessor !== 'function') { return accessor; } return function (guideMaybeWrapped) { return accessor(unwrapGuide(guideMaybeWrapped)); }; } // The object handed to us from deck.gl is different depending on the version of deck.gl used, unwrap as necessary function unwrapGuide(guideMaybeWrapped) { if (guideMaybeWrapped.__source) { return guideMaybeWrapped.__source.object; } else if (guideMaybeWrapped.sourceFeature) { return guideMaybeWrapped.sourceFeature.feature; } // It is not wrapped, return as is return guideMaybeWrapped; } function getEditHandleColor(handle) { switch (handle.properties.editHandleType) { case 'existing': return DEFAULT_EDITING_EXISTING_POINT_COLOR; case 'snap-source': return DEFAULT_EDITING_SNAP_POINT_COLOR; case 'intermediate': default: return DEFAULT_EDITING_INTERMEDIATE_POINT_COLOR; } } function getEditHandleOutlineColor(handle) { return DEFAULT_EDITING_POINT_OUTLINE_COLOR; } function getEditHandleRadius(handle) { switch (handle.properties.editHandleType) { case 'existing': return DEFAULT_EDITING_EXISTING_POINT_RADIUS; case 'snap': return DEFAULT_EDITING_SNAP_POINT_RADIUS; case 'intermediate': default: return DEFAULT_EDITING_INTERMEDIATE_POINT_RADIUS; } } var defaultProps = { mode: DEFAULT_EDIT_MODE, // Edit and interaction events onEdit: function onEdit() {}, pickable: true, pickingRadius: 10, pickingDepth: 5, fp64: false, filled: true, stroked: true, lineWidthScale: _constants.PROJECTED_PIXEL_SIZE_MULTIPLIER, lineWidthMinPixels: 1, lineWidthMaxPixels: Number.MAX_SAFE_INTEGER, pickingLineWidthExtraPixels: 0, lineWidthUnits: 'pixels', lineJointRounded: false, lineCapRounded: false, lineMiterLimit: 4, pointRadiusScale: 1, pointRadiusMinPixels: 2, pointRadiusMaxPixels: Number.MAX_SAFE_INTEGER, getLineColor: function getLineColor(feature, isSelected, mode) { return isSelected ? DEFAULT_SELECTED_LINE_COLOR : DEFAULT_LINE_COLOR; }, getFillColor: function getFillColor(feature, isSelected, mode) { return isSelected ? DEFAULT_SELECTED_FILL_COLOR : DEFAULT_FILL_COLOR; }, getRadius: function getRadius(f) { return f && f.properties && f.properties.radius || f && f.properties && f.properties.size || 1; }, getLineWidth: function getLineWidth(f) { return f && f.properties && f.properties.lineWidth || 3; }, // Tentative feature rendering getTentativeLineColor: function getTentativeLineColor(f) { return DEFAULT_TENTATIVE_LINE_COLOR; }, getTentativeFillColor: function getTentativeFillColor(f) { return DEFAULT_TENTATIVE_FILL_COLOR; }, getTentativeLineWidth: function getTentativeLineWidth(f) { return f && f.properties && f.properties.lineWidth || 3; }, editHandleType: 'point', // point handles editHandlePointRadiusScale: 1, editHandlePointOutline: true, editHandlePointStrokeWidth: 2, editHandlePointRadiusUnits: 'pixels', editHandlePointRadiusMinPixels: 4, editHandlePointRadiusMaxPixels: 8, getEditHandlePointColor: getEditHandleColor, getEditHandlePointOutlineColor: getEditHandleOutlineColor, getEditHandlePointRadius: getEditHandleRadius, // icon handles editHandleIconAtlas: null, editHandleIconMapping: null, editHandleIconSizeScale: 1, editHandleIconSizeUnits: 'pixels', getEditHandleIcon: function getEditHandleIcon(handle) { return handle.properties.editHandleType; }, getEditHandleIconSize: 10, getEditHandleIconColor: getEditHandleColor, getEditHandleIconAngle: 0, // misc billboard: true }; // Mapping of mode name to mode class (for legacy purposes) var modeNameMapping = { view: _editModes.ViewMode, // Alter modes modify: _editModes.ModifyMode, translate: new _editModes.SnappableMode(new _editModes.TranslateMode()), transform: new _editModes.SnappableMode(new _editModes.TransformMode()), scale: _editModes.ScaleMode, rotate: _editModes.RotateMode, duplicate: _editModes.DuplicateMode, split: _editModes.SplitPolygonMode, extrude: _editModes.ExtrudeMode, elevation: _editModes.ElevationMode, // Draw modes drawPoint: _editModes.DrawPointMode, drawLineString: _editModes.DrawLineStringMode, drawPolygon: _editModes.DrawPolygonMode, drawRectangle: _editModes.DrawRectangleMode, drawSquare: _editModes.DrawSquareMode, drawRectangleFromCenter: _editModes.DrawRectangleFromCenterMode, drawSquareFromCenter: _editModes.DrawSquareFromCenterMode, drawCircleFromCenter: _editModes.DrawCircleFromCenterMode, drawCircleByBoundingBox: _editModes.DrawCircleByDiameterMode, drawEllipseByBoundingBox: _editModes.DrawEllipseByBoundingBoxMode, drawRectangleUsing3Points: _editModes.DrawRectangleUsingThreePointsMode, drawEllipseUsing3Points: _editModes.DrawEllipseUsingThreePointsMode, draw90DegreePolygon: _editModes.Draw90DegreePolygonMode, drawPolygonByDragging: _editModes.DrawPolygonByDraggingMode }; // type State = { // mode: GeoJsonEditMode, // tentativeFeature: ?Feature, // editHandles: any[], // selectedFeatures: Feature[] // }; var EditableGeoJsonLayer = /*#__PURE__*/function (_EditableLayer) { _inherits(EditableGeoJsonLayer, _EditableLayer); var _super = _createSuper(EditableGeoJsonLayer); function EditableGeoJsonLayer() { _classCallCheck(this, EditableGeoJsonLayer); return _super.apply(this, arguments); } _createClass(EditableGeoJsonLayer, [{ key: "renderLayers", // setState: ($Shape<State>) => void; value: function renderLayers() { var subLayerProps = this.getSubLayerProps({ id: 'geojson', // Proxy most GeoJsonLayer props as-is data: this.props.data, fp64: this.props.fp64, filled: this.props.filled, stroked: this.props.stroked, lineWidthScale: this.props.lineWidthScale, lineWidthMinPixels: this.props.lineWidthMinPixels, lineWidthMaxPixels: this.props.lineWidthMaxPixels, lineWidthUnits: this.props.lineWidthUnits, lineJointRounded: this.props.lineJointRounded, lineCapRounded: this.props.lineCapRounded, lineMiterLimit: this.props.lineMiterLimit, pointRadiusScale: this.props.pointRadiusScale, pointRadiusMinPixels: this.props.pointRadiusMinPixels, pointRadiusMaxPixels: this.props.pointRadiusMaxPixels, getLineColor: this.selectionAwareAccessor(this.props.getLineColor), getFillColor: this.selectionAwareAccessor(this.props.getFillColor), getPointRadius: this.selectionAwareAccessor(this.props.getRadius), getLineWidth: this.selectionAwareAccessor(this.props.getLineWidth), _subLayerProps: { linestrings: { billboard: this.props.billboard, updateTriggers: { // required to update dashed array attribute all: [this.props.selectedFeatureIndexes, this.props.mode] } }, 'polygons-stroke': { billboard: this.props.billboard, pickingLineWidthExtraPixels: this.props.pickingLineWidthExtraPixels, type: _editablePathLayer["default"], updateTriggers: { // required to update dashed array attribute all: [this.props.selectedFeatureIndexes, this.props.mode] } } }, updateTriggers: { getLineColor: [this.props.selectedFeatureIndexes, this.props.mode], getFillColor: [this.props.selectedFeatureIndexes, this.props.mode], getPointRadius: [this.props.selectedFeatureIndexes, this.props.mode], getLineWidth: [this.props.selectedFeatureIndexes, this.props.mode] } }); var layers = [new _layers.GeoJsonLayer(subLayerProps)]; layers = layers.concat(this.createGuidesLayers(), this.createTooltipsLayers()); return layers; } }, { key: "initializeState", value: function initializeState() { _get(_getPrototypeOf(EditableGeoJsonLayer.prototype), "initializeState", this).call(this); this.setState({ selectedFeatures: [], editHandles: [] }); } // TODO: is this the best way to properly update state from an outside event handler? }, { key: "shouldUpdateState", value: function shouldUpdateState(opts) { // console.log( // 'shouldUpdateState', // opts.changeFlags.propsOrDataChanged, // opts.changeFlags.stateChanged // ); return _get(_getPrototypeOf(EditableGeoJsonLayer.prototype), "shouldUpdateState", this).call(this, opts) || opts.changeFlags.stateChanged; } }, { key: "updateState", value: function updateState(_ref) { var props = _ref.props, oldProps = _ref.oldProps, changeFlags = _ref.changeFlags, context = _ref.context; _get(_getPrototypeOf(EditableGeoJsonLayer.prototype), "updateState", this).call(this, { oldProps: oldProps, props: props, changeFlags: changeFlags, context: context }); if (changeFlags.propsOrDataChanged) { var modePropChanged = Object.keys(oldProps).length === 0 || props.mode !== oldProps.mode; if (modePropChanged) { var _mode; if (typeof props.mode === 'function') { // They passed a constructor/class, so new it up var ModeConstructor = props.mode; _mode = new ModeConstructor(); } else if (typeof props.mode === 'string') { // Lookup the mode based on its name (for backwards compatibility) _mode = modeNameMapping[props.mode]; // eslint-disable-next-line no-console console.warn("Deprecated use of passing `mode` as a string. Pass the mode's class constructor instead."); } else { // Should be an instance of EditMode in this case _mode = props.mode; } if (!_mode) { console.warn("No mode configured for ".concat(String(props.mode))); // eslint-disable-line no-console,no-undef // Use default mode _mode = new DEFAULT_EDIT_MODE(); } if (_mode !== this.state.mode) { this.setState({ mode: _mode, cursor: null }); } } } var selectedFeatures = []; if (Array.isArray(props.selectedFeatureIndexes)) { // TODO: needs improved testing, i.e. checking for duplicates, NaNs, out of range numbers, ... selectedFeatures = props.selectedFeatureIndexes.map(function (elem) { return props.data.features[elem]; }); } this.setState({ selectedFeatures: selectedFeatures }); } }, { key: "getModeProps", value: function getModeProps(props) { var _this = this; return { modeConfig: props.modeConfig, data: props.data, selectedIndexes: props.selectedFeatureIndexes, lastPointerMoveEvent: this.state.lastPointerMoveEvent, cursor: this.state.cursor, onEdit: function onEdit(editAction) { // Force a re-render // This supports double-click where we need to ensure that there's a re-render between the two clicks // even though the data wasn't changed, just the internal tentative feature. _this.setNeedsUpdate(); props.onEdit(editAction); }, onUpdateCursor: function onUpdateCursor(cursor) { _this.setState({ cursor: cursor }); } }; } }, { key: "selectionAwareAccessor", value: function selectionAwareAccessor(accessor) { var _this2 = this; if (typeof accessor !== 'function') { return accessor; } return function (feature) { return accessor(feature, _this2.isFeatureSelected(feature), _this2.props.mode); }; } }, { key: "isFeatureSelected", value: function isFeatureSelected(feature) { if (!this.props.data || !this.props.selectedFeatureIndexes) { return false; } if (!this.props.selectedFeatureIndexes.length) { return false; } var featureIndex = this.props.data.features.indexOf(feature); return this.props.selectedFeatureIndexes.includes(featureIndex); } }, { key: "getPickingInfo", value: function getPickingInfo(_ref2) { var info = _ref2.info, sourceLayer = _ref2.sourceLayer; if (sourceLayer.id.endsWith('guides')) { // If user is picking an editing handle, add additional data to the info info.isGuide = true; } return info; } }, { key: "_updateAutoHighlight", value: function _updateAutoHighlight(info) { // Extra handling for guides if (info === null || info === void 0 ? void 0 : info.sourceLayer) { if (info.isGuide) { var _iterator = _createForOfIteratorHelper(info.sourceLayer.getSubLayers()), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var layer = _step.value; layer.updateAutoHighlight(info); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } else { info.sourceLayer.updateAutoHighlight(info); } } } }, { key: "createGuidesLayers", value: function createGuidesLayers() { var mode = this.getActiveMode(); var guides = mode.getGuides(this.getModeProps(this.props)); if (!guides || !guides.features.length) { return []; } var subLayerProps = { linestrings: { billboard: this.props.billboard, autoHighlight: false }, 'polygons-fill': { autoHighlight: false }, 'polygons-stroke': { billboard: this.props.billboard } }; if (this.props.editHandleType === 'icon') { subLayerProps['points-icon'] = { type: _layers.IconLayer, iconAtlas: this.props.editHandleIconAtlas, iconMapping: this.props.editHandleIconMapping, sizeUnits: this.props.editHandleIconSizeUnits, sizeScale: this.props.editHandleIconSizeScale, getIcon: guideAccessor(this.props.getEditHandleIcon), getSize: guideAccessor(this.props.getEditHandleIconSize), getColor: guideAccessor(this.props.getEditHandleIconColor), getAngle: guideAccessor(this.props.getEditHandleIconAngle) }; } else { subLayerProps['points-circle'] = { type: _layers.ScatterplotLayer, radiusScale: this.props.editHandlePointRadiusScale, stroked: this.props.editHandlePointOutline, getLineWidth: this.props.editHandlePointStrokeWidth, radiusUnits: this.props.editHandlePointRadiusUnits, radiusMinPixels: this.props.editHandlePointRadiusMinPixels, radiusMaxPixels: this.props.editHandlePointRadiusMaxPixels, getRadius: guideAccessor(this.props.getEditHandlePointRadius), getFillColor: guideAccessor(this.props.getEditHandlePointColor), getLineColor: guideAccessor(this.props.getEditHandlePointOutlineColor) }; } var layer = new _layers.GeoJsonLayer(this.getSubLayerProps({ id: "guides", data: guides, fp64: this.props.fp64, _subLayerProps: subLayerProps, lineWidthScale: this.props.lineWidthScale, lineWidthMinPixels: this.props.lineWidthMinPixels, lineWidthMaxPixels: this.props.lineWidthMaxPixels, lineWidthUnits: this.props.lineWidthUnits, lineJointRounded: this.props.lineJointRounded, lineCapRounded: this.props.lineCapRounded, lineMiterLimit: this.props.lineMiterLimit, getLineColor: guideAccessor(this.props.getTentativeLineColor), getLineWidth: guideAccessor(this.props.getTentativeLineWidth), getFillColor: guideAccessor(this.props.getTentativeFillColor), pointType: this.props.editHandleType === 'icon' ? 'icon' : 'circle', iconAtlas: this.props.editHandleIconAtlas })); return [layer]; } }, { key: "createTooltipsLayers", value: function createTooltipsLayers() { var mode = this.getActiveMode(); var tooltips = mode.getTooltips(this.getModeProps(this.props)); var layer = new _layers.TextLayer(_objectSpread({ getSize: DEFAULT_TOOLTIP_FONT_SIZE }, this.getSubLayerProps({ id: "tooltips", data: tooltips }))); return [layer]; } }, { key: "onLayerClick", value: function onLayerClick(event) { this.getActiveMode().handleClick(event, this.getModeProps(this.props)); } }, { key: "onLayerKeyUp", value: function onLayerKeyUp(event) { this.getActiveMode().handleKeyUp(event, this.getModeProps(this.props)); } }, { key: "onStartDragging", value: function onStartDragging(event) { this.getActiveMode().handleStartDragging(event, this.getModeProps(this.props)); } }, { key: "onDragging", value: function onDragging(event) { this.getActiveMode().handleDragging(event, this.getModeProps(this.props)); } }, { key: "onStopDragging", value: function onStopDragging(event) { this.getActiveMode().handleStopDragging(event, this.getModeProps(this.props)); } }, { key: "onPointerMove", value: function onPointerMove(event) { this.setState({ lastPointerMoveEvent: event }); this.getActiveMode().handlePointerMove(event, this.getModeProps(this.props)); } }, { key: "getCursor", value: function getCursor(_ref3) { var isDragging = _ref3.isDragging; if (this.state === null || this.state === undefined) { // Layer in 'Awaiting state' return null; } var cursor = this.state.cursor; if (!cursor) { // default cursor cursor = isDragging ? 'grabbing' : 'grab'; } return cursor; } }, { key: "getActiveMode", value: function getActiveMode() { return this.state.mode; } }]); return EditableGeoJsonLayer; }(_editableLayer["default"]); exports["default"] = EditableGeoJsonLayer; _defineProperty(EditableGeoJsonLayer, "layerName", 'EditableGeoJsonLayer'); _defineProperty(EditableGeoJsonLayer, "defaultProps", defaultProps); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvZWRpdGFibGUtZ2VvanNvbi1sYXllci50cyJdLCJuYW1lcyI6WyJERUZBVUxUX0xJTkVfQ09MT1IiLCJERUZBVUxUX0ZJTExfQ09MT1IiLCJERUZBVUxUX1NFTEVDVEVEX0xJTkVfQ09MT1IiLCJERUZBVUxUX1NFTEVDVEVEX0ZJTExfQ09MT1IiLCJERUZBVUxUX1RFTlRBVElWRV9MSU5FX0NPTE9SIiwiREVGQVVMVF9URU5UQVRJVkVfRklMTF9DT0xPUiIsIkRFRkFVTFRfRURJVElOR19FWElTVElOR19QT0lOVF9DT0xPUiIsIkRFRkFVTFRfRURJVElOR19JTlRFUk1FRElBVEVfUE9JTlRfQ09MT1IiLCJERUZBVUxUX0VESVRJTkdfU05BUF9QT0lOVF9DT0xPUiIsIkRFRkFVTFRfRURJVElOR19QT0lOVF9PVVRMSU5FX0NPTE9SIiwiREVGQVVMVF9FRElUSU5HX0VYSVNUSU5HX1BPSU5UX1JBRElVUyIsIkRFRkFVTFRfRURJVElOR19JTlRFUk1FRElBVEVfUE9JTlRfUkFESVVTIiwiREVGQVVMVF9FRElUSU5HX1NOQVBfUE9JTlRfUkFESVVTIiwiREVGQVVMVF9UT09MVElQX0ZPTlRfU0laRSIsIlBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIiLCJERUZBVUxUX0VESVRfTU9ERSIsIkRyYXdQb2x5Z29uTW9kZSIsImd1aWRlQWNjZXNzb3IiLCJhY2Nlc3NvciIsImd1aWRlTWF5YmVXcmFwcGVkIiwidW53cmFwR3VpZGUiLCJfX3NvdXJjZSIsIm9iamVjdCIsInNvdXJjZUZlYXR1cmUiLCJmZWF0dXJlIiwiZ2V0RWRpdEhhbmRsZUNvbG9yIiwiaGFuZGxlIiwicHJvcGVydGllcyIsImVkaXRIYW5kbGVUeXBlIiwiZ2V0RWRpdEhhbmRsZU91dGxpbmVDb2xvciIsImdldEVkaXRIYW5kbGVSYWRpdXMiLCJkZWZhdWx0UHJvcHMiLCJtb2RlIiwib25FZGl0IiwicGlja2FibGUiLCJwaWNraW5nUmFkaXVzIiwicGlja2luZ0RlcHRoIiwiZnA2NCIsImZpbGxlZCIsInN0cm9rZWQiLCJsaW5lV2lkdGhTY2FsZSIsImxpbmVXaWR0aE1pblBpeGVscyIsImxpbmVXaWR0aE1heFBpeGVscyIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJwaWNraW5nTGluZVdpZHRoRXh0cmFQaXhlbHMiLCJsaW5lV2lkdGhVbml0cyIsImxpbmVKb2ludFJvdW5kZWQiLCJsaW5lQ2FwUm91bmRlZCIsImxpbmVNaXRlckxpbWl0IiwicG9pbnRSYWRpdXNTY2FsZSIsInBvaW50UmFkaXVzTWluUGl4ZWxzIiwicG9pbnRSYWRpdXNNYXhQaXhlbHMiLCJnZXRMaW5lQ29sb3IiLCJpc1NlbGVjdGVkIiwiZ2V0RmlsbENvbG9yIiwiZ2V0UmFkaXVzIiwiZiIsInJhZGl1cyIsInNpemUiLCJnZXRMaW5lV2lkdGgiLCJsaW5lV2lkdGgiLCJnZXRUZW50YXRpdmVMaW5lQ29sb3IiLCJnZXRUZW50YXRpdmVGaWxsQ29sb3IiLCJnZXRUZW50YXRpdmVMaW5lV2lkdGgiLCJlZGl0SGFuZGxlUG9pbnRSYWRpdXNTY2FsZSIsImVkaXRIYW5kbGVQb2ludE91dGxpbmUiLCJlZGl0SGFuZGxlUG9pbnRTdHJva2VXaWR0aCIsImVkaXRIYW5kbGVQb2ludFJhZGl1c1VuaXRzIiwiZWRpdEhhbmRsZVBvaW50UmFkaXVzTWluUGl4ZWxzIiwiZWRpdEhhbmRsZVBvaW50UmFkaXVzTWF4UGl4ZWxzIiwiZ2V0RWRpdEhhbmRsZVBvaW50Q29sb3IiLCJnZXRFZGl0SGFuZGxlUG9pbnRPdXRsaW5lQ29sb3IiLCJnZXRFZGl0SGFuZGxlUG9pbnRSYWRpdXMiLCJlZGl0SGFuZGxlSWNvbkF0bGFzIiwiZWRpdEhhbmRsZUljb25NYXBwaW5nIiwiZWRpdEhhbmRsZUljb25TaXplU2NhbGUiLCJlZGl0SGFuZGxlSWNvblNpemVVbml0cyIsImdldEVkaXRIYW5kbGVJY29uIiwiZ2V0RWRpdEhhbmRsZUljb25TaXplIiwiZ2V0RWRpdEhhbmRsZUljb25Db2xvciIsImdldEVkaXRIYW5kbGVJY29uQW5nbGUiLCJiaWxsYm9hcmQiLCJtb2RlTmFtZU1hcHBpbmciLCJ2aWV3IiwiVmlld01vZGUiLCJtb2RpZnkiLCJNb2RpZnlNb2RlIiwidHJhbnNsYXRlIiwiU25hcHBhYmxlTW9kZSIsIlRyYW5zbGF0ZU1vZGUiLCJ0cmFuc2Zvcm0iLCJUcmFuc2Zvcm1Nb2RlIiwic2NhbGUiLCJTY2FsZU1vZGUiLCJyb3RhdGUiLCJSb3RhdGVNb2RlIiwiZHVwbGljYXRlIiwiRHVwbGljYXRlTW9kZSIsInNwbGl0IiwiU3BsaXRQb2x5Z29uTW9kZSIsImV4dHJ1ZGUiLCJFeHRydWRlTW9kZSIsImVsZXZhdGlvbiIsIkVsZXZhdGlvbk1vZGUiLCJkcmF3UG9pbnQiLCJEcmF3UG9pbnRNb2RlIiwiZHJhd0xpbmVTdHJpbmciLCJEcmF3TGluZVN0cmluZ01vZGUiLCJkcmF3UG9seWdvbiIsImRyYXdSZWN0YW5nbGUiLCJEcmF3UmVjdGFuZ2xlTW9kZSIsImRyYXdTcXVhcmUiLCJEcmF3U3F1YXJlTW9kZSIsImRyYXdSZWN0YW5nbGVGcm9tQ2VudGVyIiwiRHJhd1JlY3RhbmdsZUZyb21DZW50ZXJNb2RlIiwiZHJhd1NxdWFyZUZyb21DZW50ZXIiLCJEcmF3U3F1YXJlRnJvbUNlbnRlck1vZGUiLCJkcmF3Q2lyY2xlRnJvbUNlbnRlciIsIkRyYXdDaXJjbGVGcm9tQ2VudGVyTW9kZSIsImRyYXdDaXJjbGVCeUJvdW5kaW5nQm94IiwiRHJhd0NpcmNsZUJ5RGlhbWV0ZXJNb2RlIiwiZHJhd0VsbGlwc2VCeUJvdW5kaW5nQm94IiwiRHJhd0VsbGlwc2VCeUJvdW5kaW5nQm94TW9kZSIsImRyYXdSZWN0YW5nbGVVc2luZzNQb2ludHMiLCJEcmF3UmVjdGFuZ2xlVXNpbmdUaHJlZVBvaW50c01vZGUiLCJkcmF3RWxsaXBzZVVzaW5nM1BvaW50cyIsIkRyYXdFbGxpcHNlVXNpbmdUaHJlZVBvaW50c01vZGUiLCJkcmF3OTBEZWdyZWVQb2x5Z29uIiwiRHJhdzkwRGVncmVlUG9seWdvbk1vZGUiLCJkcmF3UG9seWdvbkJ5RHJhZ2dpbmciLCJEcmF3UG9seWdvbkJ5RHJhZ2dpbmdNb2RlIiwiRWRpdGFibGVHZW9Kc29uTGF5ZXIiLCJzdWJMYXllclByb3BzIiwiZ2V0U3ViTGF5ZXJQcm9wcyIsImlkIiwiZGF0YSIsInByb3BzIiwic2VsZWN0aW9uQXdhcmVBY2Nlc3NvciIsImdldFBvaW50UmFkaXVzIiwiX3N1YkxheWVyUHJvcHMiLCJsaW5lc3RyaW5ncyIsInVwZGF0ZVRyaWdnZXJzIiwiYWxsIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhlcyIsInR5cGUiLCJFZGl0YWJsZVBhdGhMYXllciIsImxheWVycyIsIkdlb0pzb25MYXllciIsImNvbmNhdCIsImNyZWF0ZUd1aWRlc0xheWVycyIsImNyZWF0ZVRvb2x0aXBzTGF5ZXJzIiwic2V0U3RhdGUiLCJzZWxlY3RlZEZlYXR1cmVzIiwiZWRpdEhhbmRsZXMiLCJvcHRzIiwiY2hhbmdlRmxhZ3MiLCJzdGF0ZUNoYW5nZWQiLCJvbGRQcm9wcyIsImNvbnRleHQiLCJwcm9wc09yRGF0YUNoYW5nZWQiLCJtb2RlUHJvcENoYW5nZWQiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiTW9kZUNvbnN0cnVjdG9yIiwiY29uc29sZSIsIndhcm4iLCJTdHJpbmciLCJzdGF0ZSIsImN1cnNvciIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImVsZW0iLCJmZWF0dXJlcyIsIm1vZGVDb25maWciLCJzZWxlY3RlZEluZGV4ZXMiLCJsYXN0UG9pbnRlck1vdmVFdmVudCIsImVkaXRBY3Rpb24iLCJzZXROZWVkc1VwZGF0ZSIsIm9uVXBkYXRlQ3Vyc29yIiwiaXNGZWF0dXJlU2VsZWN0ZWQiLCJmZWF0dXJlSW5kZXgiLCJpbmRleE9mIiwiaW5jbHVkZXMiLCJpbmZvIiwic291cmNlTGF5ZXIiLCJlbmRzV2l0aCIsImlzR3VpZGUiLCJnZXRTdWJMYXllcnMiLCJsYXllciIsInVwZGF0ZUF1dG9IaWdobGlnaHQiLCJnZXRBY3RpdmVNb2RlIiwiZ3VpZGVzIiwiZ2V0R3VpZGVzIiwiZ2V0TW9kZVByb3BzIiwiYXV0b0hpZ2hsaWdodCIsIkljb25MYXllciIsImljb25BdGxhcyIsImljb25NYXBwaW5nIiwic2l6ZVVuaXRzIiwic2l6ZVNjYWxlIiwiZ2V0SWNvbiIsImdldFNpemUiLCJnZXRDb2xvciIsImdldEFuZ2xlIiwiU2NhdHRlcnBsb3RMYXllciIsInJhZGl1c1NjYWxlIiwicmFkaXVzVW5pdHMiLCJyYWRpdXNNaW5QaXhlbHMiLCJyYWRpdXNNYXhQaXhlbHMiLCJwb2ludFR5cGUiLCJ0b29sdGlwcyIsImdldFRvb2x0aXBzIiwiVGV4dExheWVyIiwiZXZlbnQiLCJoYW5kbGVDbGljayIsImhhbmRsZUtleVVwIiwiaGFuZGxlU3RhcnREcmFnZ2luZyIsImhhbmRsZURyYWdnaW5nIiwiaGFuZGxlU3RvcERyYWdnaW5nIiwiaGFuZGxlUG9pbnRlck1vdmUiLCJpc0RyYWdnaW5nIiwidW5kZWZpbmVkIiwiRWRpdGFibGVMYXllciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBOztBQUVBOztBQW9DQTs7QUFFQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsa0JBQTZCLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsSUFBaEIsQ0FBdEM7QUFDQSxJQUFNQyxrQkFBNkIsR0FBRyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxFQUFnQixJQUFoQixDQUF0QztBQUNBLElBQU1DLDJCQUFzQyxHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLElBQWhCLENBQS9DO0FBQ0EsSUFBTUMsMkJBQXNDLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLElBQVgsRUFBaUIsSUFBakIsQ0FBL0M7QUFDQSxJQUFNQyw0QkFBdUMsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLEVBQWEsSUFBYixFQUFtQixJQUFuQixDQUFoRDtBQUNBLElBQU1DLDRCQUF1QyxHQUFHLENBQUMsSUFBRCxF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