{"version":3,"file":"mapbox-gl-draw-unminified.js","sources":["../src/lib/mode_handler.js","../node_modules/wgs84/index.js","../node_modules/@mapbox/geojson-area/index.js","../src/constants.js","../src/lib/sort_features.js","../src/lib/map_event_to_bounding_box.js","../src/lib/string_set.js","../src/lib/features_at.js","../src/lib/get_features_and_set_cursor.js","../src/lib/euclidean_distance.js","../src/lib/is_click.js","../src/lib/is_tap.js","../node_modules/nanoid/non-secure/index.js","../src/lib/id.js","../src/feature_types/feature.js","../src/feature_types/point.js","../src/feature_types/line_string.js","../src/feature_types/polygon.js","../src/feature_types/multi_feature.js","../src/modes/mode_interface_accessors.js","../src/modes/mode_interface.js","../src/modes/object_to_mode.js","../src/events.js","../src/lib/to_dense_array.js","../src/render.js","../src/store.js","../src/ui.js","../src/setup.js","../src/lib/theme.js","../src/lib/common_selectors.js","../node_modules/@mapbox/point-geometry/index.js","../src/lib/mouse_event_point.js","../src/lib/create_vertex.js","../src/lib/create_midpoint.js","../src/lib/create_supplementary_points.js","../src/lib/double_click_zoom.js","../src/lib/constrain_feature_movement.js","../src/lib/move_features.js","../src/modes/simple_select.js","../src/modes/direct_select.js","../src/modes/draw_point.js","../src/lib/is_event_at_coordinates.js","../src/modes/draw_polygon.js","../src/modes/draw_line_string.js","../src/modes/index.js","../src/options.js","../node_modules/fast-deep-equal/index.js","../node_modules/@mapbox/geojson-normalize/index.js","../src/lib/string_sets_are_equal.js","../src/api.js","../index.js"],"sourcesContent":["\nconst ModeHandler = function(mode, DrawContext) {\n\n const handlers = {\n drag: [],\n click: [],\n mousemove: [],\n mousedown: [],\n mouseup: [],\n mouseout: [],\n keydown: [],\n keyup: [],\n touchstart: [],\n touchmove: [],\n touchend: [],\n tap: []\n };\n\n const ctx = {\n on(event, selector, fn) {\n if (handlers[event] === undefined) {\n throw new Error(`Invalid event type: ${event}`);\n }\n handlers[event].push({\n selector,\n fn\n });\n },\n render(id) {\n DrawContext.store.featureChanged(id);\n }\n };\n\n const delegate = function (eventName, event) {\n const handles = handlers[eventName];\n let iHandle = handles.length;\n while (iHandle--) {\n const handle = handles[iHandle];\n if (handle.selector(event)) {\n const skipRender = handle.fn.call(ctx, event);\n if (!skipRender) {\n DrawContext.store.render();\n }\n DrawContext.ui.updateMapClasses();\n\n // ensure an event is only handled once\n // we do this to let modes have multiple overlapping selectors\n // and relay on order of oppertations to filter\n break;\n }\n }\n };\n\n mode.start.call(ctx);\n\n return {\n render: mode.render,\n stop() {\n if (mode.stop) mode.stop();\n },\n trash() {\n if (mode.trash) {\n mode.trash();\n DrawContext.store.render();\n }\n },\n combineFeatures() {\n if (mode.combineFeatures) {\n mode.combineFeatures();\n }\n },\n uncombineFeatures() {\n if (mode.uncombineFeatures) {\n mode.uncombineFeatures();\n }\n },\n drag(event) {\n delegate('drag', event);\n },\n click(event) {\n delegate('click', event);\n },\n mousemove(event) {\n delegate('mousemove', event);\n },\n mousedown(event) {\n delegate('mousedown', event);\n },\n mouseup(event) {\n delegate('mouseup', event);\n },\n mouseout(event) {\n delegate('mouseout', event);\n },\n keydown(event) {\n delegate('keydown', event);\n },\n keyup(event) {\n delegate('keyup', event);\n },\n touchstart(event) {\n delegate('touchstart', event);\n },\n touchmove(event) {\n delegate('touchmove', event);\n },\n touchend(event) {\n delegate('touchend', event);\n },\n tap(event) {\n delegate('tap', event);\n }\n };\n};\n\nexport default ModeHandler;\n","module.exports.RADIUS = 6378137;\nmodule.exports.FLATTENING = 1/298.257223563;\nmodule.exports.POLAR_RADIUS = 6356752.3142;\n","var wgs84 = require('wgs84');\n\nmodule.exports.geometry = geometry;\nmodule.exports.ring = ringArea;\n\nfunction geometry(_) {\n var area = 0, i;\n switch (_.type) {\n case 'Polygon':\n return polygonArea(_.coordinates);\n case 'MultiPolygon':\n for (i = 0; i < _.coordinates.length; i++) {\n area += polygonArea(_.coordinates[i]);\n }\n return area;\n case 'Point':\n case 'MultiPoint':\n case 'LineString':\n case 'MultiLineString':\n return 0;\n case 'GeometryCollection':\n for (i = 0; i < _.geometries.length; i++) {\n area += geometry(_.geometries[i]);\n }\n return area;\n }\n}\n\nfunction polygonArea(coords) {\n var area = 0;\n if (coords && coords.length > 0) {\n area += Math.abs(ringArea(coords[0]));\n for (var i = 1; i < coords.length; i++) {\n area -= Math.abs(ringArea(coords[i]));\n }\n }\n return area;\n}\n\n/**\n * Calculate the approximate area of the polygon were it projected onto\n * the earth. Note that this area will be positive if ring is oriented\n * clockwise, otherwise it will be negative.\n *\n * Reference:\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409\n *\n * Returns:\n * {float} The approximate signed geodesic area of the polygon in square\n * meters.\n */\n\nfunction ringArea(coords) {\n var p1, p2, p3, lowerIndex, middleIndex, upperIndex, i,\n area = 0,\n coordsLength = coords.length;\n\n if (coordsLength > 2) {\n for (i = 0; i < coordsLength; i++) {\n if (i === coordsLength - 2) {// i = N-2\n lowerIndex = coordsLength - 2;\n middleIndex = coordsLength -1;\n upperIndex = 0;\n } else if (i === coordsLength - 1) {// i = N-1\n lowerIndex = coordsLength - 1;\n middleIndex = 0;\n upperIndex = 1;\n } else { // i = 0 to N-3\n lowerIndex = i;\n middleIndex = i+1;\n upperIndex = i+2;\n }\n p1 = coords[lowerIndex];\n p2 = coords[middleIndex];\n p3 = coords[upperIndex];\n area += ( rad(p3[0]) - rad(p1[0]) ) * Math.sin( rad(p2[1]));\n }\n\n area = area * wgs84.RADIUS * wgs84.RADIUS / 2;\n }\n\n return area;\n}\n\nfunction rad(_) {\n return _ * Math.PI / 180;\n}","export const classes = {\n CANVAS: 'mapboxgl-canvas',\n CONTROL_BASE: 'mapboxgl-ctrl',\n CONTROL_PREFIX: 'mapboxgl-ctrl-',\n CONTROL_BUTTON: 'mapbox-gl-draw_ctrl-draw-btn',\n CONTROL_BUTTON_LINE: 'mapbox-gl-draw_line',\n CONTROL_BUTTON_POLYGON: 'mapbox-gl-draw_polygon',\n CONTROL_BUTTON_POINT: 'mapbox-gl-draw_point',\n CONTROL_BUTTON_TRASH: 'mapbox-gl-draw_trash',\n CONTROL_BUTTON_COMBINE_FEATURES: 'mapbox-gl-draw_combine',\n CONTROL_BUTTON_UNCOMBINE_FEATURES: 'mapbox-gl-draw_uncombine',\n CONTROL_GROUP: 'mapboxgl-ctrl-group',\n ATTRIBUTION: 'mapboxgl-ctrl-attrib',\n ACTIVE_BUTTON: 'active',\n BOX_SELECT: 'mapbox-gl-draw_boxselect'\n};\n\nexport const sources = {\n HOT: 'mapbox-gl-draw-hot',\n COLD: 'mapbox-gl-draw-cold'\n};\n\nexport const cursors = {\n ADD: 'add',\n MOVE: 'move',\n DRAG: 'drag',\n POINTER: 'pointer',\n NONE: 'none'\n};\n\nexport const types = {\n POLYGON: 'polygon',\n LINE: 'line_string',\n POINT: 'point'\n};\n\nexport const geojsonTypes = {\n FEATURE: 'Feature',\n POLYGON: 'Polygon',\n LINE_STRING: 'LineString',\n POINT: 'Point',\n FEATURE_COLLECTION: 'FeatureCollection',\n MULTI_PREFIX: 'Multi',\n MULTI_POINT: 'MultiPoint',\n MULTI_LINE_STRING: 'MultiLineString',\n MULTI_POLYGON: 'MultiPolygon'\n};\n\nexport const modes = {\n DRAW_LINE_STRING: 'draw_line_string',\n DRAW_POLYGON: 'draw_polygon',\n DRAW_POINT: 'draw_point',\n SIMPLE_SELECT: 'simple_select',\n DIRECT_SELECT: 'direct_select'\n};\n\nexport const events = {\n CREATE: 'draw.create',\n DELETE: 'draw.delete',\n UPDATE: 'draw.update',\n SELECTION_CHANGE: 'draw.selectionchange',\n MODE_CHANGE: 'draw.modechange',\n ACTIONABLE: 'draw.actionable',\n RENDER: 'draw.render',\n COMBINE_FEATURES: 'draw.combine',\n UNCOMBINE_FEATURES: 'draw.uncombine'\n};\n\nexport const updateActions = {\n MOVE: 'move',\n CHANGE_PROPERTIES: 'change_properties',\n CHANGE_COORDINATES: 'change_coordinates'\n};\n\nexport const meta = {\n FEATURE: 'feature',\n MIDPOINT: 'midpoint',\n VERTEX: 'vertex'\n};\n\nexport const activeStates = {\n ACTIVE: 'true',\n INACTIVE: 'false'\n};\n\nexport const interactions = [\n 'scrollZoom',\n 'boxZoom',\n 'dragRotate',\n 'dragPan',\n 'keyboard',\n 'doubleClickZoom',\n 'touchZoomRotate'\n];\n\nexport const LAT_MIN = -90;\nexport const LAT_RENDERED_MIN = -85;\nexport const LAT_MAX = 90;\nexport const LAT_RENDERED_MAX = 85;\nexport const LNG_MIN = -270;\nexport const LNG_MAX = 270;\n","import area from '@mapbox/geojson-area';\nimport * as Constants from '../constants.js';\n\nconst FEATURE_SORT_RANKS = {\n Point: 0,\n LineString: 1,\n MultiLineString: 1,\n Polygon: 2\n};\n\nfunction comparator(a, b) {\n const score = FEATURE_SORT_RANKS[a.geometry.type] - FEATURE_SORT_RANKS[b.geometry.type];\n\n if (score === 0 && a.geometry.type === Constants.geojsonTypes.POLYGON) {\n return a.area - b.area;\n }\n\n return score;\n}\n\n// Sort in the order above, then sort polygons by area ascending.\nfunction sortFeatures(features) {\n return features.map((feature) => {\n if (feature.geometry.type === Constants.geojsonTypes.POLYGON) {\n feature.area = area.geometry({\n type: Constants.geojsonTypes.FEATURE,\n property: {},\n geometry: feature.geometry\n });\n }\n return feature;\n }).sort(comparator).map((feature) => {\n delete feature.area;\n return feature;\n });\n}\n\nexport default sortFeatures;\n","/**\n * Returns a bounding box representing the event's location.\n *\n * @param {Event} mapEvent - Mapbox GL JS map event, with a point properties.\n * @return {Array>} Bounding box.\n */\nfunction mapEventToBoundingBox(mapEvent, buffer = 0) {\n return [\n [mapEvent.point.x - buffer, mapEvent.point.y - buffer],\n [mapEvent.point.x + buffer, mapEvent.point.y + buffer]\n ];\n}\n\nexport default mapEventToBoundingBox;\n","function StringSet(items) {\n this._items = {};\n this._nums = {};\n this._length = items ? items.length : 0;\n if (!items) return;\n for (let i = 0, l = items.length; i < l; i++) {\n this.add(items[i]);\n if (items[i] === undefined) continue;\n if (typeof items[i] === 'string') this._items[items[i]] = i;\n else this._nums[items[i]] = i;\n\n }\n}\n\nStringSet.prototype.add = function(x) {\n if (this.has(x)) return this;\n this._length++;\n if (typeof x === 'string') this._items[x] = this._length;\n else this._nums[x] = this._length;\n return this;\n};\n\nStringSet.prototype.delete = function(x) {\n if (this.has(x) === false) return this;\n this._length--;\n delete this._items[x];\n delete this._nums[x];\n return this;\n};\n\nStringSet.prototype.has = function(x) {\n if (typeof x !== 'string' && typeof x !== 'number') return false;\n return this._items[x] !== undefined || this._nums[x] !== undefined;\n};\n\nStringSet.prototype.values = function() {\n const values = [];\n Object.keys(this._items).forEach((k) => {\n values.push({ k, v: this._items[k] });\n });\n Object.keys(this._nums).forEach((k) => {\n values.push({ k: JSON.parse(k), v: this._nums[k] });\n });\n\n return values.sort((a, b) => a.v - b.v).map(a => a.k);\n};\n\nStringSet.prototype.clear = function() {\n this._length = 0;\n this._items = {};\n this._nums = {};\n return this;\n};\n\nexport default StringSet;\n","import sortFeatures from './sort_features.js';\nimport mapEventToBoundingBox from './map_event_to_bounding_box.js';\nimport * as Constants from '../constants.js';\nimport StringSet from './string_set.js';\n\nconst META_TYPES = [\n Constants.meta.FEATURE,\n Constants.meta.MIDPOINT,\n Constants.meta.VERTEX\n];\n\n// Requires either event or bbox\nexport default {\n click: featuresAtClick,\n touch: featuresAtTouch\n};\n\nfunction featuresAtClick(event, bbox, ctx) {\n return featuresAt(event, bbox, ctx, ctx.options.clickBuffer);\n}\n\nfunction featuresAtTouch(event, bbox, ctx) {\n return featuresAt(event, bbox, ctx, ctx.options.touchBuffer);\n}\n\nfunction featuresAt(event, bbox, ctx, buffer) {\n if (ctx.map === null) return [];\n\n const box = (event) ? mapEventToBoundingBox(event, buffer) : bbox;\n\n const queryParams = {};\n\n if (ctx.options.styles) queryParams.layers = ctx.options.styles.map(s => s.id).filter(id => ctx.map.getLayer(id) != null);\n\n const features = ctx.map.queryRenderedFeatures(box, queryParams)\n .filter(feature => META_TYPES.indexOf(feature.properties.meta) !== -1);\n\n const featureIds = new StringSet();\n const uniqueFeatures = [];\n features.forEach((feature) => {\n const featureId = feature.properties.id;\n if (featureIds.has(featureId)) return;\n featureIds.add(featureId);\n uniqueFeatures.push(feature);\n });\n\n return sortFeatures(uniqueFeatures);\n}\n","import featuresAt from './features_at.js';\nimport * as Constants from '../constants.js';\n\nexport default function getFeatureAtAndSetCursors(event, ctx) {\n const features = featuresAt.click(event, null, ctx);\n const classes = { mouse: Constants.cursors.NONE };\n\n if (features[0]) {\n classes.mouse = (features[0].properties.active === Constants.activeStates.ACTIVE) ?\n Constants.cursors.MOVE : Constants.cursors.POINTER;\n classes.feature = features[0].properties.meta;\n }\n\n if (ctx.events.currentModeName().indexOf('draw') !== -1) {\n classes.mouse = Constants.cursors.ADD;\n }\n\n ctx.ui.queueMapClasses(classes);\n ctx.ui.updateMapClasses();\n\n return features[0];\n}\n","export default function(a, b) {\n const x = a.x - b.x;\n const y = a.y - b.y;\n return Math.sqrt((x * x) + (y * y));\n}\n","import euclideanDistance from './euclidean_distance.js';\n\nconst FINE_TOLERANCE = 4;\nconst GROSS_TOLERANCE = 12;\nconst INTERVAL = 500;\n\nexport default function isClick(start, end, options = {}) {\n const fineTolerance = (options.fineTolerance != null) ? options.fineTolerance : FINE_TOLERANCE;\n const grossTolerance = (options.grossTolerance != null) ? options.grossTolerance : GROSS_TOLERANCE;\n const interval = (options.interval != null) ? options.interval : INTERVAL;\n\n start.point = start.point || end.point;\n start.time = start.time || end.time;\n const moveDistance = euclideanDistance(start.point, end.point);\n\n return moveDistance < fineTolerance ||\n (moveDistance < grossTolerance && (end.time - start.time) < interval);\n}\n","import euclideanDistance from './euclidean_distance.js';\n\nexport const TAP_TOLERANCE = 25;\nexport const TAP_INTERVAL = 250;\n\nexport default function isTap(start, end, options = {}) {\n const tolerance = (options.tolerance != null) ? options.tolerance : TAP_TOLERANCE;\n const interval = (options.interval != null) ? options.interval : TAP_INTERVAL;\n\n start.point = start.point || end.point;\n start.time = start.time || end.time;\n const moveDistance = euclideanDistance(start.point, end.point);\n\n return moveDistance < tolerance && (end.time - start.time) < interval;\n}\n","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport let customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n let i = size | 0\n while (i--) {\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\nexport let nanoid = (size = 21) => {\n let id = ''\n let i = size | 0\n while (i--) {\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\n","import {customAlphabet} from 'nanoid/non-secure';\n\nconst nanoid = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 32);\n\nexport function generateID() {\n return nanoid();\n}\n","import {generateID} from '../lib/id.js';\nimport * as Constants from '../constants.js';\n\nconst Feature = function(ctx, geojson) {\n this.ctx = ctx;\n this.properties = geojson.properties || {};\n this.coordinates = geojson.geometry.coordinates;\n this.id = geojson.id || generateID();\n this.type = geojson.geometry.type;\n};\n\nFeature.prototype.changed = function() {\n this.ctx.store.featureChanged(this.id);\n};\n\nFeature.prototype.incomingCoords = function(coords) {\n this.setCoordinates(coords);\n};\n\nFeature.prototype.setCoordinates = function(coords) {\n this.coordinates = coords;\n this.changed();\n};\n\nFeature.prototype.getCoordinates = function() {\n return JSON.parse(JSON.stringify(this.coordinates));\n};\n\nFeature.prototype.setProperty = function(property, value) {\n this.properties[property] = value;\n};\n\nFeature.prototype.toGeoJSON = function() {\n return JSON.parse(JSON.stringify({\n id: this.id,\n type: Constants.geojsonTypes.FEATURE,\n properties: this.properties,\n geometry: {\n coordinates: this.getCoordinates(),\n type: this.type\n }\n }));\n};\n\nFeature.prototype.internal = function(mode) {\n const properties = {\n id: this.id,\n meta: Constants.meta.FEATURE,\n 'meta:type': this.type,\n active: Constants.activeStates.INACTIVE,\n mode\n };\n\n if (this.ctx.options.userProperties) {\n for (const name in this.properties) {\n properties[`user_${name}`] = this.properties[name];\n }\n }\n\n return {\n type: Constants.geojsonTypes.FEATURE,\n properties,\n geometry: {\n coordinates: this.getCoordinates(),\n type: this.type\n }\n };\n};\n\nexport default Feature;\n","import Feature from './feature.js';\n\nconst Point = function(ctx, geojson) {\n Feature.call(this, ctx, geojson);\n};\n\nPoint.prototype = Object.create(Feature.prototype);\n\nPoint.prototype.isValid = function() {\n return typeof this.coordinates[0] === 'number' &&\n typeof this.coordinates[1] === 'number';\n};\n\nPoint.prototype.updateCoordinate = function(pathOrLng, lngOrLat, lat) {\n if (arguments.length === 3) {\n this.coordinates = [lngOrLat, lat];\n } else {\n this.coordinates = [pathOrLng, lngOrLat];\n }\n this.changed();\n};\n\nPoint.prototype.getCoordinate = function() {\n return this.getCoordinates();\n};\n\nexport default Point;\n","import Feature from './feature.js';\n\nconst LineString = function(ctx, geojson) {\n Feature.call(this, ctx, geojson);\n};\n\nLineString.prototype = Object.create(Feature.prototype);\n\nLineString.prototype.isValid = function() {\n return this.coordinates.length > 1;\n};\n\nLineString.prototype.addCoordinate = function(path, lng, lat) {\n this.changed();\n const id = parseInt(path, 10);\n this.coordinates.splice(id, 0, [lng, lat]);\n};\n\nLineString.prototype.getCoordinate = function(path) {\n const id = parseInt(path, 10);\n return JSON.parse(JSON.stringify(this.coordinates[id]));\n};\n\nLineString.prototype.removeCoordinate = function(path) {\n this.changed();\n this.coordinates.splice(parseInt(path, 10), 1);\n};\n\nLineString.prototype.updateCoordinate = function(path, lng, lat) {\n const id = parseInt(path, 10);\n this.coordinates[id] = [lng, lat];\n this.changed();\n};\n\nexport default LineString;\n","import Feature from './feature.js';\n\nconst Polygon = function(ctx, geojson) {\n Feature.call(this, ctx, geojson);\n this.coordinates = this.coordinates.map(ring => ring.slice(0, -1));\n};\n\nPolygon.prototype = Object.create(Feature.prototype);\n\nPolygon.prototype.isValid = function() {\n if (this.coordinates.length === 0) return false;\n return this.coordinates.every(ring => ring.length > 2);\n};\n\n// Expects valid geoJSON polygon geometry: first and last positions must be equivalent.\nPolygon.prototype.incomingCoords = function(coords) {\n this.coordinates = coords.map(ring => ring.slice(0, -1));\n this.changed();\n};\n\n// Does NOT expect valid geoJSON polygon geometry: first and last positions should not be equivalent.\nPolygon.prototype.setCoordinates = function(coords) {\n this.coordinates = coords;\n this.changed();\n};\n\nPolygon.prototype.addCoordinate = function(path, lng, lat) {\n this.changed();\n const ids = path.split('.').map(x => parseInt(x, 10));\n\n const ring = this.coordinates[ids[0]];\n\n ring.splice(ids[1], 0, [lng, lat]);\n};\n\nPolygon.prototype.removeCoordinate = function(path) {\n this.changed();\n const ids = path.split('.').map(x => parseInt(x, 10));\n const ring = this.coordinates[ids[0]];\n if (ring) {\n ring.splice(ids[1], 1);\n if (ring.length < 3) {\n this.coordinates.splice(ids[0], 1);\n }\n }\n};\n\nPolygon.prototype.getCoordinate = function(path) {\n const ids = path.split('.').map(x => parseInt(x, 10));\n const ring = this.coordinates[ids[0]];\n return JSON.parse(JSON.stringify(ring[ids[1]]));\n};\n\nPolygon.prototype.getCoordinates = function() {\n return this.coordinates.map(coords => coords.concat([coords[0]]));\n};\n\nPolygon.prototype.updateCoordinate = function(path, lng, lat) {\n this.changed();\n const parts = path.split('.');\n const ringId = parseInt(parts[0], 10);\n const coordId = parseInt(parts[1], 10);\n\n if (this.coordinates[ringId] === undefined) {\n this.coordinates[ringId] = [];\n }\n\n this.coordinates[ringId][coordId] = [lng, lat];\n};\n\nexport default Polygon;\n","import {generateID} from '../lib/id.js';\nimport Feature from './feature.js';\nimport * as Constants from '../constants.js';\n\nimport MultiPoint from './point.js';\nimport MultiLineString from './line_string.js';\nimport MultiPolygon from './polygon.js';\n\nconst models = {\n MultiPoint,\n MultiLineString,\n MultiPolygon\n};\n\nconst takeAction = (features, action, path, lng, lat) => {\n const parts = path.split('.');\n const idx = parseInt(parts[0], 10);\n const tail = (!parts[1]) ? null : parts.slice(1).join('.');\n return features[idx][action](tail, lng, lat);\n};\n\nconst MultiFeature = function(ctx, geojson) {\n Feature.call(this, ctx, geojson);\n\n delete this.coordinates;\n this.model = models[geojson.geometry.type];\n if (this.model === undefined) throw new TypeError(`${geojson.geometry.type} is not a valid type`);\n this.features = this._coordinatesToFeatures(geojson.geometry.coordinates);\n};\n\nMultiFeature.prototype = Object.create(Feature.prototype);\n\nMultiFeature.prototype._coordinatesToFeatures = function(coordinates) {\n const Model = this.model.bind(this);\n return coordinates.map(coords => new Model(this.ctx, {\n id: generateID(),\n type: Constants.geojsonTypes.FEATURE,\n properties: {},\n geometry: {\n coordinates: coords,\n type: this.type.replace('Multi', '')\n }\n }));\n};\n\nMultiFeature.prototype.isValid = function() {\n return this.features.every(f => f.isValid());\n};\n\nMultiFeature.prototype.setCoordinates = function(coords) {\n this.features = this._coordinatesToFeatures(coords);\n this.changed();\n};\n\nMultiFeature.prototype.getCoordinate = function(path) {\n return takeAction(this.features, 'getCoordinate', path);\n};\n\nMultiFeature.prototype.getCoordinates = function() {\n return JSON.parse(JSON.stringify(this.features.map((f) => {\n if (f.type === Constants.geojsonTypes.POLYGON) return f.getCoordinates();\n return f.coordinates;\n })));\n};\n\nMultiFeature.prototype.updateCoordinate = function(path, lng, lat) {\n takeAction(this.features, 'updateCoordinate', path, lng, lat);\n this.changed();\n};\n\nMultiFeature.prototype.addCoordinate = function(path, lng, lat) {\n takeAction(this.features, 'addCoordinate', path, lng, lat);\n this.changed();\n};\n\nMultiFeature.prototype.removeCoordinate = function(path) {\n takeAction(this.features, 'removeCoordinate', path);\n this.changed();\n};\n\nMultiFeature.prototype.getFeatures = function() {\n return this.features;\n};\n\nexport default MultiFeature;\n","import * as Constants from '../constants.js';\nimport featuresAt from '../lib/features_at.js';\nimport Point from '../feature_types/point.js';\nimport LineString from '../feature_types/line_string.js';\nimport Polygon from '../feature_types/polygon.js';\nimport MultiFeature from '../feature_types/multi_feature.js';\n\nexport default function ModeInterface(ctx) {\n this.map = ctx.map;\n this.drawConfig = JSON.parse(JSON.stringify(ctx.options || {}));\n this._ctx = ctx;\n}\n\n/**\n * Sets Draw's interal selected state\n * @name this.setSelected\n * @param {DrawFeature[]} - whats selected as a [DrawFeature](https://github.com/mapbox/mapbox-gl-draw/blob/main/src/feature_types/feature.js)\n */\nModeInterface.prototype.setSelected = function(features) {\n return this._ctx.store.setSelected(features);\n};\n\n/**\n * Sets Draw's internal selected coordinate state\n * @name this.setSelectedCoordinates\n * @param {Object[]} coords - a array of {coord_path: 'string', feature_id: 'string'}\n */\nModeInterface.prototype.setSelectedCoordinates = function(coords) {\n this._ctx.store.setSelectedCoordinates(coords);\n coords.reduce((m, c) => {\n if (m[c.feature_id] === undefined) {\n m[c.feature_id] = true;\n this._ctx.store.get(c.feature_id).changed();\n }\n return m;\n }, {});\n};\n\n/**\n * Get all selected features as a [DrawFeature](https://github.com/mapbox/mapbox-gl-draw/blob/main/src/feature_types/feature.js)\n * @name this.getSelected\n * @returns {DrawFeature[]}\n */\nModeInterface.prototype.getSelected = function() {\n return this._ctx.store.getSelected();\n};\n\n/**\n * Get the ids of all currently selected features\n * @name this.getSelectedIds\n * @returns {String[]}\n */\nModeInterface.prototype.getSelectedIds = function() {\n return this._ctx.store.getSelectedIds();\n};\n\n/**\n * Check if a feature is selected\n * @name this.isSelected\n * @param {String} id - a feature id\n * @returns {Boolean}\n */\nModeInterface.prototype.isSelected = function(id) {\n return this._ctx.store.isSelected(id);\n};\n\n/**\n * Get a [DrawFeature](https://github.com/mapbox/mapbox-gl-draw/blob/main/src/feature_types/feature.js) by its id\n * @name this.getFeature\n * @param {String} id - a feature id\n * @returns {DrawFeature}\n */\nModeInterface.prototype.getFeature = function(id) {\n return this._ctx.store.get(id);\n};\n\n/**\n * Add a feature to draw's internal selected state\n * @name this.select\n * @param {String} id\n */\nModeInterface.prototype.select = function(id) {\n return this._ctx.store.select(id);\n};\n\n/**\n * Remove a feature from draw's internal selected state\n * @name this.delete\n * @param {String} id\n */\nModeInterface.prototype.deselect = function(id) {\n return this._ctx.store.deselect(id);\n};\n\n/**\n * Delete a feature from draw\n * @name this.deleteFeature\n * @param {String} id - a feature id\n */\nModeInterface.prototype.deleteFeature = function(id, opts = {}) {\n return this._ctx.store.delete(id, opts);\n};\n\n/**\n * Add a [DrawFeature](https://github.com/mapbox/mapbox-gl-draw/blob/main/src/feature_types/feature.js) to draw.\n * See `this.newFeature` for converting geojson into a DrawFeature\n * @name this.addFeature\n * @param {DrawFeature} feature - the feature to add\n */\nModeInterface.prototype.addFeature = function(feature, opts = {}) {\n return this._ctx.store.add(feature, opts);\n};\n\n/**\n * Clear all selected features\n */\nModeInterface.prototype.clearSelectedFeatures = function() {\n return this._ctx.store.clearSelected();\n};\n\n/**\n * Clear all selected coordinates\n */\nModeInterface.prototype.clearSelectedCoordinates = function() {\n return this._ctx.store.clearSelectedCoordinates();\n};\n\n/**\n * Indicate if the different action are currently possible with your mode\n * See [draw.actionalbe](https://github.com/mapbox/mapbox-gl-draw/blob/main/API.md#drawactionable) for a list of possible actions. All undefined actions are set to **false** by default\n * @name this.setActionableState\n * @param {Object} actions\n */\nModeInterface.prototype.setActionableState = function(actions = {}) {\n const newSet = {\n trash: actions.trash || false,\n combineFeatures: actions.combineFeatures || false,\n uncombineFeatures: actions.uncombineFeatures || false\n };\n return this._ctx.events.actionable(newSet);\n};\n\n/**\n * Trigger a mode change\n * @name this.changeMode\n * @param {String} mode - the mode to transition into\n * @param {Object} opts - the options object to pass to the new mode\n * @param {Object} eventOpts - used to control what kind of events are emitted.\n */\nModeInterface.prototype.changeMode = function(mode, opts = {}, eventOpts = {}) {\n return this._ctx.events.changeMode(mode, opts, eventOpts);\n};\n\n/**\n * Fire a map event\n * @name this.fire\n * @param {String} eventName - the event name.\n * @param {Object} eventData - the event data object.\n */\nModeInterface.prototype.fire = function(eventName, eventData) {\n return this._ctx.events.fire(eventName, eventData);\n};\n\n/**\n * Update the state of draw map classes\n * @name this.updateUIClasses\n * @param {Object} opts\n */\nModeInterface.prototype.updateUIClasses = function(opts) {\n return this._ctx.ui.queueMapClasses(opts);\n};\n\n/**\n * If a name is provided it makes that button active, else if makes all buttons inactive\n * @name this.activateUIButton\n * @param {String?} name - name of the button to make active, leave as undefined to set buttons to be inactive\n */\nModeInterface.prototype.activateUIButton = function(name) {\n return this._ctx.ui.setActiveButton(name);\n};\n\n/**\n * Get the features at the location of an event object or in a bbox\n * @name this.featuresAt\n * @param {Event||NULL} event - a mapbox-gl event object\n * @param {BBOX||NULL} bbox - the area to get features from\n * @param {String} bufferType - is this `click` or `tap` event, defaults to click\n */\nModeInterface.prototype.featuresAt = function(event, bbox, bufferType = 'click') {\n if (bufferType !== 'click' && bufferType !== 'touch') throw new Error('invalid buffer type');\n return featuresAt[bufferType](event, bbox, this._ctx);\n};\n\n/**\n * Create a new [DrawFeature](https://github.com/mapbox/mapbox-gl-draw/blob/main/src/feature_types/feature.js) from geojson\n * @name this.newFeature\n * @param {GeoJSONFeature} geojson\n * @returns {DrawFeature}\n */\nModeInterface.prototype.newFeature = function(geojson) {\n const type = geojson.geometry.type;\n if (type === Constants.geojsonTypes.POINT) return new Point(this._ctx, geojson);\n if (type === Constants.geojsonTypes.LINE_STRING) return new LineString(this._ctx, geojson);\n if (type === Constants.geojsonTypes.POLYGON) return new Polygon(this._ctx, geojson);\n return new MultiFeature(this._ctx, geojson);\n};\n\n/**\n * Check is an object is an instance of a [DrawFeature](https://github.com/mapbox/mapbox-gl-draw/blob/main/src/feature_types/feature.js)\n * @name this.isInstanceOf\n * @param {String} type - `Point`, `LineString`, `Polygon`, `MultiFeature`\n * @param {Object} feature - the object that needs to be checked\n * @returns {Boolean}\n */\nModeInterface.prototype.isInstanceOf = function(type, feature) {\n if (type === Constants.geojsonTypes.POINT) return feature instanceof Point;\n if (type === Constants.geojsonTypes.LINE_STRING) return feature instanceof LineString;\n if (type === Constants.geojsonTypes.POLYGON) return feature instanceof Polygon;\n if (type === 'MultiFeature') return feature instanceof MultiFeature;\n throw new Error(`Unknown feature class: ${type}`);\n};\n\n/**\n * Force draw to rerender the feature of the provided id\n * @name this.doRender\n * @param {String} id - a feature id\n */\nModeInterface.prototype.doRender = function(id) {\n return this._ctx.store.featureChanged(id);\n};\n\n","import ModeInterface from './mode_interface_accessors.js';\nexport default ModeInterface;\n\n/**\n * Triggered while a mode is being transitioned into.\n * @param opts {Object} - this is the object passed via `draw.changeMode('mode', opts)`;\n * @name MODE.onSetup\n * @returns {Object} - this object will be passed to all other life cycle functions\n */\nModeInterface.prototype.onSetup = function() {};\n\n/**\n * Triggered when a drag event is detected on the map\n * @name MODE.onDrag\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onDrag = function() {};\n\n/**\n * Triggered when the mouse is clicked\n * @name MODE.onClick\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onClick = function() {};\n\n/**\n * Triggered with the mouse is moved\n * @name MODE.onMouseMove\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onMouseMove = function() {};\n\n/**\n * Triggered when the mouse button is pressed down\n * @name MODE.onMouseDown\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onMouseDown = function() {};\n\n/**\n * Triggered when the mouse button is released\n * @name MODE.onMouseUp\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onMouseUp = function() {};\n\n/**\n * Triggered when the mouse leaves the map's container\n * @name MODE.onMouseOut\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onMouseOut = function() {};\n\n/**\n * Triggered when a key up event is detected\n * @name MODE.onKeyUp\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onKeyUp = function() {};\n\n/**\n * Triggered when a key down event is detected\n * @name MODE.onKeyDown\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onKeyDown = function() {};\n\n/**\n * Triggered when a touch event is started\n * @name MODE.onTouchStart\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onTouchStart = function() {};\n\n/**\n * Triggered when one drags thier finger on a mobile device\n * @name MODE.onTouchMove\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onTouchMove = function() {};\n\n/**\n * Triggered when one removes their finger from the map\n * @name MODE.onTouchEnd\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onTouchEnd = function() {};\n\n/**\n * Triggered when one quicly taps the map\n * @name MODE.onTap\n * @param state {Object} - a mutible state object created by onSetup\n * @param e {Object} - the captured event that is triggering this life cycle event\n */\nModeInterface.prototype.onTap = function() {};\n\n/**\n * Triggered when the mode is being exited, to be used for cleaning up artifacts such as invalid features\n * @name MODE.onStop\n * @param state {Object} - a mutible state object created by onSetup\n */\nModeInterface.prototype.onStop = function() {};\n\n/**\n * Triggered when [draw.trash()](https://github.com/mapbox/mapbox-gl-draw/blob/main/API.md#trash-draw) is called.\n * @name MODE.onTrash\n * @param state {Object} - a mutible state object created by onSetup\n */\nModeInterface.prototype.onTrash = function() {};\n\n/**\n * Triggered when [draw.combineFeatures()](https://github.com/mapbox/mapbox-gl-draw/blob/main/API.md#combinefeatures-draw) is called.\n * @name MODE.onCombineFeature\n * @param state {Object} - a mutible state object created by onSetup\n */\nModeInterface.prototype.onCombineFeature = function() {};\n\n/**\n * Triggered when [draw.uncombineFeatures()](https://github.com/mapbox/mapbox-gl-draw/blob/main/API.md#uncombinefeatures-draw) is called.\n * @name MODE.onUncombineFeature\n * @param state {Object} - a mutible state object created by onSetup\n */\nModeInterface.prototype.onUncombineFeature = function() {};\n\n/**\n * Triggered per feature on render to convert raw features into set of features for display on the map\n * See [styling draw](https://github.com/mapbox/mapbox-gl-draw/blob/main/API.md#styling-draw) for information about what geojson properties Draw uses as part of rendering.\n * @name MODE.toDisplayFeatures\n * @param state {Object} - a mutible state object created by onSetup\n * @param geojson {Object} - a geojson being evaulated. To render, pass to `display`.\n * @param display {Function} - all geojson objects passed to this be rendered onto the map\n */\nModeInterface.prototype.toDisplayFeatures = function() {\n throw new Error('You must overwrite toDisplayFeatures');\n};\n\n","import ModeInterface from './mode_interface.js';\n\nconst eventMapper = {\n drag: 'onDrag',\n click: 'onClick',\n mousemove: 'onMouseMove',\n mousedown: 'onMouseDown',\n mouseup: 'onMouseUp',\n mouseout: 'onMouseOut',\n keyup: 'onKeyUp',\n keydown: 'onKeyDown',\n touchstart: 'onTouchStart',\n touchmove: 'onTouchMove',\n touchend: 'onTouchEnd',\n tap: 'onTap'\n};\n\nconst eventKeys = Object.keys(eventMapper);\n\nexport default function(modeObject) {\n const modeObjectKeys = Object.keys(modeObject);\n\n return function(ctx, startOpts = {}) {\n let state = {};\n\n const mode = modeObjectKeys.reduce((m, k) => {\n m[k] = modeObject[k];\n return m;\n }, new ModeInterface(ctx));\n\n function wrapper(eh) {\n return e => mode[eh](state, e);\n }\n\n return {\n start() {\n state = mode.onSetup(startOpts); // this should set ui buttons\n\n // Adds event handlers for all event options\n // add sets the selector to false for all\n // handlers that are not present in the mode\n // to reduce on render calls for functions that\n // have no logic\n eventKeys.forEach((key) => {\n const modeHandler = eventMapper[key];\n let selector = () => false;\n if (modeObject[modeHandler]) {\n selector = () => true;\n }\n this.on(key, selector, wrapper(modeHandler));\n });\n\n },\n stop() {\n mode.onStop(state);\n },\n trash() {\n mode.onTrash(state);\n },\n combineFeatures() {\n mode.onCombineFeatures(state);\n },\n uncombineFeatures() {\n mode.onUncombineFeatures(state);\n },\n render(geojson, push) {\n mode.toDisplayFeatures(state, geojson, push);\n }\n };\n };\n}\n","import setupModeHandler from './lib/mode_handler.js';\nimport getFeaturesAndSetCursor from './lib/get_features_and_set_cursor.js';\nimport featuresAt from './lib/features_at.js';\nimport isClick from './lib/is_click.js';\nimport isTap from './lib/is_tap.js';\nimport * as Constants from './constants.js';\nimport objectToMode from './modes/object_to_mode.js';\n\nexport default function(ctx) {\n\n const modes = Object.keys(ctx.options.modes).reduce((m, k) => {\n m[k] = objectToMode(ctx.options.modes[k]);\n return m;\n }, {});\n\n let mouseDownInfo = {};\n let touchStartInfo = {};\n const events = {};\n let currentModeName = null;\n let currentMode = null;\n\n events.drag = function(event, isDrag) {\n if (isDrag({\n point: event.point,\n time: new Date().getTime()\n })) {\n ctx.ui.queueMapClasses({ mouse: Constants.cursors.DRAG });\n currentMode.drag(event);\n } else {\n event.originalEvent.stopPropagation();\n }\n };\n\n events.mousedrag = function(event) {\n events.drag(event, endInfo => !isClick(mouseDownInfo, endInfo));\n };\n\n events.touchdrag = function(event) {\n events.drag(event, endInfo => !isTap(touchStartInfo, endInfo));\n };\n\n events.mousemove = function(event) {\n const button = event.originalEvent.buttons !== undefined ? event.originalEvent.buttons : event.originalEvent.which;\n if (button === 1) {\n return events.mousedrag(event);\n }\n const target = getFeaturesAndSetCursor(event, ctx);\n event.featureTarget = target;\n currentMode.mousemove(event);\n };\n\n events.mousedown = function(event) {\n mouseDownInfo = {\n time: new Date().getTime(),\n point: event.point\n };\n const target = getFeaturesAndSetCursor(event, ctx);\n event.featureTarget = target;\n currentMode.mousedown(event);\n };\n\n events.mouseup = function(event) {\n const target = getFeaturesAndSetCursor(event, ctx);\n event.featureTarget = target;\n\n if (isClick(mouseDownInfo, {\n point: event.point,\n time: new Date().getTime()\n })) {\n currentMode.click(event);\n } else {\n currentMode.mouseup(event);\n }\n };\n\n events.mouseout = function(event) {\n currentMode.mouseout(event);\n };\n\n events.touchstart = function(event) {\n if (!ctx.options.touchEnabled) {\n return;\n }\n\n touchStartInfo = {\n time: new Date().getTime(),\n point: event.point\n };\n const target = featuresAt.touch(event, null, ctx)[0];\n event.featureTarget = target;\n currentMode.touchstart(event);\n };\n\n events.touchmove = function(event) {\n if (!ctx.options.touchEnabled) {\n return;\n }\n\n currentMode.touchmove(event);\n return events.touchdrag(event);\n };\n\n events.touchend = function(event) {\n // Prevent emulated mouse events because we will fully handle the touch here.\n // This does not stop the touch events from propogating to mapbox though.\n event.originalEvent.preventDefault();\n if (!ctx.options.touchEnabled) {\n return;\n }\n\n const target = featuresAt.touch(event, null, ctx)[0];\n event.featureTarget = target;\n if (isTap(touchStartInfo, {\n time: new Date().getTime(),\n point: event.point\n })) {\n currentMode.tap(event);\n } else {\n currentMode.touchend(event);\n }\n };\n\n // 8 - Backspace\n // 46 - Delete\n const isKeyModeValid = code => !(code === 8 || code === 46 || (code >= 48 && code <= 57));\n\n events.keydown = function(event) {\n const isMapElement = (event.srcElement || event.target).classList.contains(Constants.classes.CANVAS);\n if (!isMapElement) return; // we only handle events on the map\n\n if ((event.keyCode === 8 || event.keyCode === 46) && ctx.options.controls.trash) {\n event.preventDefault();\n currentMode.trash();\n } else if (isKeyModeValid(event.keyCode)) {\n currentMode.keydown(event);\n } else if (event.keyCode === 49 && ctx.options.controls.point) {\n changeMode(Constants.modes.DRAW_POINT);\n } else if (event.keyCode === 50 && ctx.options.controls.line_string) {\n changeMode(Constants.modes.DRAW_LINE_STRING);\n } else if (event.keyCode === 51 && ctx.options.controls.polygon) {\n changeMode(Constants.modes.DRAW_POLYGON);\n }\n };\n\n events.keyup = function(event) {\n if (isKeyModeValid(event.keyCode)) {\n currentMode.keyup(event);\n }\n };\n\n events.zoomend = function() {\n ctx.store.changeZoom();\n };\n\n events.data = function(event) {\n if (event.dataType === 'style') {\n const { setup, map, options, store } = ctx;\n const hasLayers = options.styles.some(style => map.getLayer(style.id));\n if (!hasLayers) {\n setup.addLayers();\n store.setDirty();\n store.render();\n }\n }\n };\n\n function changeMode(modename, nextModeOptions, eventOptions = {}) {\n currentMode.stop();\n\n const modebuilder = modes[modename];\n if (modebuilder === undefined) {\n throw new Error(`${modename} is not valid`);\n }\n currentModeName = modename;\n const mode = modebuilder(ctx, nextModeOptions);\n currentMode = setupModeHandler(mode, ctx);\n\n if (!eventOptions.silent) {\n ctx.map.fire(Constants.events.MODE_CHANGE, { mode: modename});\n }\n\n ctx.store.setDirty();\n ctx.store.render();\n }\n\n const actionState = {\n trash: false,\n combineFeatures: false,\n uncombineFeatures: false\n };\n\n function actionable(actions) {\n let changed = false;\n Object.keys(actions).forEach((action) => {\n if (actionState[action] === undefined) throw new Error('Invalid action type');\n if (actionState[action] !== actions[action]) changed = true;\n actionState[action] = actions[action];\n });\n if (changed) ctx.map.fire(Constants.events.ACTIONABLE, { actions: actionState });\n }\n\n const api = {\n start() {\n currentModeName = ctx.options.defaultMode;\n currentMode = setupModeHandler(modes[currentModeName](ctx), ctx);\n },\n changeMode,\n actionable,\n currentModeName() {\n return currentModeName;\n },\n currentModeRender(geojson, push) {\n return currentMode.render(geojson, push);\n },\n fire(eventName, eventData) {\n if (!ctx.map) return;\n ctx.map.fire(eventName, eventData);\n },\n addEventListeners() {\n ctx.map.on('mousemove', events.mousemove);\n ctx.map.on('mousedown', events.mousedown);\n ctx.map.on('mouseup', events.mouseup);\n ctx.map.on('data', events.data);\n\n ctx.map.on('touchmove', events.touchmove);\n ctx.map.on('touchstart', events.touchstart);\n ctx.map.on('touchend', events.touchend);\n\n ctx.container.addEventListener('mouseout', events.mouseout);\n\n if (ctx.options.keybindings) {\n ctx.container.addEventListener('keydown', events.keydown);\n ctx.container.addEventListener('keyup', events.keyup);\n }\n },\n removeEventListeners() {\n ctx.map.off('mousemove', events.mousemove);\n ctx.map.off('mousedown', events.mousedown);\n ctx.map.off('mouseup', events.mouseup);\n ctx.map.off('data', events.data);\n\n ctx.map.off('touchmove', events.touchmove);\n ctx.map.off('touchstart', events.touchstart);\n ctx.map.off('touchend', events.touchend);\n\n ctx.container.removeEventListener('mouseout', events.mouseout);\n\n if (ctx.options.keybindings) {\n ctx.container.removeEventListener('keydown', events.keydown);\n ctx.container.removeEventListener('keyup', events.keyup);\n }\n },\n trash(options) {\n currentMode.trash(options);\n },\n combineFeatures() {\n currentMode.combineFeatures();\n },\n uncombineFeatures() {\n currentMode.uncombineFeatures();\n },\n getMode() {\n return currentModeName;\n }\n };\n\n return api;\n}\n","/**\n * Derive a dense array (no `undefined`s) from a single value or array.\n *\n * @param {any} x\n * @return {Array}\n */\nfunction toDenseArray(x) {\n return [].concat(x).filter(y => y !== undefined);\n}\n\nexport default toDenseArray;\n","import * as Constants from './constants.js';\n\nexport default function render() {\n // eslint-disable-next-line no-invalid-this\n const store = this;\n const mapExists = store.ctx.map && store.ctx.map.getSource(Constants.sources.HOT) !== undefined;\n if (!mapExists) return cleanup();\n\n const mode = store.ctx.events.currentModeName();\n\n store.ctx.ui.queueMapClasses({ mode });\n\n let newHotIds = [];\n let newColdIds = [];\n\n if (store.isDirty) {\n newColdIds = store.getAllIds();\n } else {\n newHotIds = store.getChangedIds().filter(id => store.get(id) !== undefined);\n newColdIds = store.sources.hot.filter(geojson => geojson.properties.id && newHotIds.indexOf(geojson.properties.id) === -1 && store.get(geojson.properties.id) !== undefined).map(geojson => geojson.properties.id);\n }\n\n store.sources.hot = [];\n const lastColdCount = store.sources.cold.length;\n store.sources.cold = store.isDirty ? [] : store.sources.cold.filter((geojson) => {\n const id = geojson.properties.id || geojson.properties.parent;\n return newHotIds.indexOf(id) === -1;\n });\n\n const coldChanged = lastColdCount !== store.sources.cold.length || newColdIds.length > 0;\n newHotIds.forEach(id => renderFeature(id, 'hot'));\n newColdIds.forEach(id => renderFeature(id, 'cold'));\n\n function renderFeature(id, source) {\n const feature = store.get(id);\n const featureInternal = feature.internal(mode);\n store.ctx.events.currentModeRender(featureInternal, (geojson) => {\n geojson.properties.mode = mode;\n store.sources[source].push(geojson);\n });\n }\n\n if (coldChanged) {\n store.ctx.map.getSource(Constants.sources.COLD).setData({\n type: Constants.geojsonTypes.FEATURE_COLLECTION,\n features: store.sources.cold\n });\n }\n\n store.ctx.map.getSource(Constants.sources.HOT).setData({\n type: Constants.geojsonTypes.FEATURE_COLLECTION,\n features: store.sources.hot\n });\n\n cleanup();\n\n function cleanup() {\n store.isDirty = false;\n store.clearChangedIds();\n }\n}\n","import toDenseArray from './lib/to_dense_array.js';\nimport StringSet from './lib/string_set.js';\nimport render from './render.js';\nimport * as Constants from './constants.js';\n\nexport default function Store(ctx) {\n this._features = {};\n this._featureIds = new StringSet();\n this._selectedFeatureIds = new StringSet();\n this._selectedCoordinates = [];\n this._changedFeatureIds = new StringSet();\n this._emitSelectionChange = false;\n this._mapInitialConfig = {};\n this.ctx = ctx;\n this.sources = {\n hot: [],\n cold: []\n };\n\n // Deduplicate requests to render and tie them to animation frames.\n let renderRequest;\n this.render = () => {\n if (!renderRequest) {\n renderRequest = requestAnimationFrame(() => {\n renderRequest = null;\n render.call(this);\n\n // Fire deduplicated selection change event\n if (this._emitSelectionChange) {\n this.ctx.events.fire(Constants.events.SELECTION_CHANGE, {\n features: this.getSelected().map(feature => feature.toGeoJSON()),\n points: this.getSelectedCoordinates().map(coordinate => ({\n type: Constants.geojsonTypes.FEATURE,\n properties: {},\n geometry: {\n type: Constants.geojsonTypes.POINT,\n coordinates: coordinate.coordinates\n }\n }))\n });\n\n this._emitSelectionChange = false;\n }\n\n // Fire render event\n this.ctx.events.fire(Constants.events.RENDER, {});\n });\n }\n };\n\n this.isDirty = false;\n}\n\n/**\n * Delays all rendering until the returned function is invoked\n * @return {Function} renderBatch\n */\nStore.prototype.createRenderBatch = function() {\n const holdRender = this.render;\n let numRenders = 0;\n this.render = function() {\n numRenders++;\n };\n\n return () => {\n this.render = holdRender;\n if (numRenders > 0) {\n this.render();\n }\n };\n};\n\n/**\n * Sets the store's state to dirty.\n * @return {Store} this\n */\nStore.prototype.setDirty = function() {\n this.isDirty = true;\n return this;\n};\n\n/**\n * Sets a feature's state to changed.\n * @param {string} featureId\n * @return {Store} this\n */\nStore.prototype.featureCreated = function(featureId, options = {}) {\n this._changedFeatureIds.add(featureId);\n\n const silent = options.silent != null ? options.silent : this.ctx.options.suppressAPIEvents;\n if (silent !== true) {\n const feature = this.get(featureId);\n this.ctx.events.fire(Constants.events.CREATE, {\n features: [feature.toGeoJSON()]\n });\n }\n\n return this;\n};\n\n/**\n * Sets a feature's state to changed.\n * @param {string} featureId\n * @return {Store} this\n */\nStore.prototype.featureChanged = function(featureId, options = {}) {\n this._changedFeatureIds.add(featureId);\n\n const silent = options.silent != null ? options.silent : this.ctx.options.suppressAPIEvents;\n if (silent !== true) {\n this.ctx.events.fire(Constants.events.UPDATE, {\n action: options.action ? options.action : Constants.updateActions.CHANGE_COORDINATES,\n features: [this.get(featureId).toGeoJSON()]\n });\n }\n\n return this;\n};\n\n/**\n * Gets the ids of all features currently in changed state.\n * @return {Store} this\n */\nStore.prototype.getChangedIds = function() {\n return this._changedFeatureIds.values();\n};\n\n/**\n * Sets all features to unchanged state.\n * @return {Store} this\n */\nStore.prototype.clearChangedIds = function() {\n this._changedFeatureIds.clear();\n return this;\n};\n\n/**\n * Gets the ids of all features in the store.\n * @return {Store} this\n */\nStore.prototype.getAllIds = function() {\n return this._featureIds.values();\n};\n\n/**\n * Adds a feature to the store.\n * @param {Object} feature\n * @param {Object} [options]\n * @param {Object} [options.silent] - If `true`, this invocation will not fire an event.\n *\n * @return {Store} this\n */\nStore.prototype.add = function(feature, options = {}) {\n this._features[feature.id] = feature;\n this._featureIds.add(feature.id);\n this.featureCreated(feature.id, {silent: options.silent});\n return this;\n};\n\n/**\n * Deletes a feature or array of features from the store.\n * Cleans up after the deletion by deselecting the features.\n * If changes were made, sets the state to the dirty\n * and fires an event.\n * @param {string | Array} featureIds\n * @param {Object} [options]\n * @param {Object} [options.silent] - If `true`, this invocation will not fire an event.\n * @return {Store} this\n */\nStore.prototype.delete = function(featureIds, options = {}) {\n const deletedFeaturesToEmit = [];\n toDenseArray(featureIds).forEach((id) => {\n if (!this._featureIds.has(id)) return;\n this._featureIds.delete(id);\n this._selectedFeatureIds.delete(id);\n if (!options.silent) {\n if (deletedFeaturesToEmit.indexOf(this._features[id]) === -1) {\n deletedFeaturesToEmit.push(this._features[id].toGeoJSON());\n }\n }\n delete this._features[id];\n this.isDirty = true;\n });\n\n if (deletedFeaturesToEmit.length) {\n this.ctx.events.fire(Constants.events.DELETE, {features: deletedFeaturesToEmit});\n }\n\n refreshSelectedCoordinates(this, options);\n return this;\n};\n\n/**\n * Returns a feature in the store matching the specified value.\n * @return {Object | undefined} feature\n */\nStore.prototype.get = function(id) {\n return this._features[id];\n};\n\n/**\n * Returns all features in the store.\n * @return {Array}\n */\nStore.prototype.getAll = function() {\n return Object.keys(this._features).map(id => this._features[id]);\n};\n\n/**\n * Adds features to the current selection.\n * @param {string | Array} featureIds\n * @param {Object} [options]\n * @param {Object} [options.silent] - If `true`, this invocation will not fire an event.\n * @return {Store} this\n */\nStore.prototype.select = function(featureIds, options = {}) {\n toDenseArray(featureIds).forEach((id) => {\n if (this._selectedFeatureIds.has(id)) return;\n this._selectedFeatureIds.add(id);\n this._changedFeatureIds.add(id);\n if (!options.silent) {\n this._emitSelectionChange = true;\n }\n });\n return this;\n};\n\n/**\n * Deletes features from the current selection.\n * @param {string | Array} featureIds\n * @param {Object} [options]\n * @param {Object} [options.silent] - If `true`, this invocation will not fire an event.\n * @return {Store} this\n */\nStore.prototype.deselect = function(featureIds, options = {}) {\n toDenseArray(featureIds).forEach((id) => {\n if (!this._selectedFeatureIds.has(id)) return;\n this._selectedFeatureIds.delete(id);\n this._changedFeatureIds.add(id);\n if (!options.silent) {\n this._emitSelectionChange = true;\n }\n });\n refreshSelectedCoordinates(this, options);\n return this;\n};\n\n/**\n * Clears the current selection.\n * @param {Object} [options]\n * @param {Object} [options.silent] - If `true`, this invocation will not fire an event.\n * @return {Store} this\n */\nStore.prototype.clearSelected = function(options = {}) {\n this.deselect(this._selectedFeatureIds.values(), { silent: options.silent });\n return this;\n};\n\n/**\n * Sets the store's selection, clearing any prior values.\n * If no feature ids are passed, the store is just cleared.\n * @param {string | Array | undefined} featureIds\n * @param {Object} [options]\n * @param {Object} [options.silent] - If `true`, this invocation will not fire an event.\n * @return {Store} this\n */\nStore.prototype.setSelected = function(featureIds, options = {}) {\n featureIds = toDenseArray(featureIds);\n\n // Deselect any features not in the new selection\n this.deselect(this._selectedFeatureIds.values().filter(id => featureIds.indexOf(id) === -1), { silent: options.silent });\n\n // Select any features in the new selection that were not already selected\n this.select(featureIds.filter(id => !this._selectedFeatureIds.has(id)), { silent: options.silent });\n\n return this;\n};\n\n/**\n * Sets the store's coordinates selection, clearing any prior values.\n * @param {Array>} coordinates\n * @return {Store} this\n */\nStore.prototype.setSelectedCoordinates = function(coordinates) {\n this._selectedCoordinates = coordinates;\n this._emitSelectionChange = true;\n return this;\n};\n\n/**\n * Clears the current coordinates selection.\n * @param {Object} [options]\n * @return {Store} this\n */\nStore.prototype.clearSelectedCoordinates = function() {\n this._selectedCoordinates = [];\n this._emitSelectionChange = true;\n return this;\n};\n\n/**\n * Returns the ids of features in the current selection.\n * @return {Array} Selected feature ids.\n */\nStore.prototype.getSelectedIds = function() {\n return this._selectedFeatureIds.values();\n};\n\n/**\n * Returns features in the current selection.\n * @return {Array} Selected features.\n */\nStore.prototype.getSelected = function() {\n return this.getSelectedIds().map(id => this.get(id));\n};\n\n/**\n * Returns selected coordinates in the currently selected feature.\n * @return {Array} Selected coordinates.\n */\nStore.prototype.getSelectedCoordinates = function() {\n const selected = this._selectedCoordinates.map((coordinate) => {\n const feature = this.get(coordinate.feature_id);\n return {\n coordinates: feature.getCoordinate(coordinate.coord_path)\n };\n });\n return selected;\n};\n\n/**\n * Indicates whether a feature is selected.\n * @param {string} featureId\n * @return {boolean} `true` if the feature is selected, `false` if not.\n */\nStore.prototype.isSelected = function(featureId) {\n return this._selectedFeatureIds.has(featureId);\n};\n\n/**\n * Sets a property on the given feature\n * @param {string} featureId\n * @param {string} property property\n * @param {string} property value\n * @param {Object} [options]\n * @param {Object} [options.silent] - If `true`, this invocation will not fire an event.\n*/\nStore.prototype.setFeatureProperty = function(featureId, property, value, options = {}) {\n this.get(featureId).setProperty(property, value);\n\n this.featureChanged(featureId, {\n silent: options.silent,\n action: Constants.updateActions.CHANGE_PROPERTIES\n });\n};\n\nfunction refreshSelectedCoordinates(store, options = {}) {\n const newSelectedCoordinates = store._selectedCoordinates.filter(point => store._selectedFeatureIds.has(point.feature_id));\n if (store._selectedCoordinates.length !== newSelectedCoordinates.length && !options.silent) {\n store._emitSelectionChange = true;\n }\n store._selectedCoordinates = newSelectedCoordinates;\n}\n\n/**\n * Stores the initial config for a map, so that we can set it again after we're done.\n*/\nStore.prototype.storeMapConfig = function() {\n Constants.interactions.forEach((interaction) => {\n const interactionSet = this.ctx.map[interaction];\n if (interactionSet) {\n this._mapInitialConfig[interaction] = this.ctx.map[interaction].isEnabled();\n }\n });\n};\n\n/**\n * Restores the initial config for a map, ensuring all is well.\n*/\nStore.prototype.restoreMapConfig = function() {\n Object.keys(this._mapInitialConfig).forEach((key) => {\n const value = this._mapInitialConfig[key];\n if (value) {\n this.ctx.map[key].enable();\n } else {\n this.ctx.map[key].disable();\n }\n });\n};\n\n/**\n * Returns the initial state of an interaction setting.\n * @param {string} interaction\n * @return {boolean} `true` if the interaction is enabled, `false` if not.\n * Defaults to `true`. (Todo: include defaults.)\n*/\nStore.prototype.getInitialConfigValue = function(interaction) {\n if (this._mapInitialConfig[interaction] !== undefined) {\n return this._mapInitialConfig[interaction];\n } else {\n // This needs to be set to whatever the default is for that interaction\n // It seems to be true for all cases currently, so let's send back `true`.\n return true;\n }\n};\n","import * as Constants from './constants.js';\n\nconst classTypes = ['mode', 'feature', 'mouse'];\n\nexport default function(ctx) {\n\n\n const buttonElements = {};\n let activeButton = null;\n\n let currentMapClasses = {\n mode: null, // e.g. mode-direct_select\n feature: null, // e.g. feature-vertex\n mouse: null // e.g. mouse-move\n };\n\n let nextMapClasses = {\n mode: null,\n feature: null,\n mouse: null\n };\n\n function clearMapClasses() {\n queueMapClasses({mode:null, feature:null, mouse:null});\n updateMapClasses();\n }\n\n function queueMapClasses(options) {\n nextMapClasses = Object.assign(nextMapClasses, options);\n }\n\n function updateMapClasses() {\n if (!ctx.container) return;\n\n const classesToRemove = [];\n const classesToAdd = [];\n\n classTypes.forEach((type) => {\n if (nextMapClasses[type] === currentMapClasses[type]) return;\n\n classesToRemove.push(`${type}-${currentMapClasses[type]}`);\n if (nextMapClasses[type] !== null) {\n classesToAdd.push(`${type}-${nextMapClasses[type]}`);\n }\n });\n\n if (classesToRemove.length > 0) {\n ctx.container.classList.remove(...classesToRemove);\n }\n\n if (classesToAdd.length > 0) {\n ctx.container.classList.add(...classesToAdd);\n }\n\n currentMapClasses = Object.assign(currentMapClasses, nextMapClasses);\n }\n\n function createControlButton(id, options = {}) {\n const button = document.createElement('button');\n button.className = `${Constants.classes.CONTROL_BUTTON} ${options.className}`;\n button.setAttribute('title', options.title);\n options.container.appendChild(button);\n\n button.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n const clickedButton = e.target;\n if (clickedButton === activeButton) {\n deactivateButtons();\n options.onDeactivate();\n return;\n }\n\n setActiveButton(id);\n options.onActivate();\n }, true);\n\n return button;\n }\n\n function deactivateButtons() {\n if (!activeButton) return;\n activeButton.classList.remove(Constants.classes.ACTIVE_BUTTON);\n activeButton = null;\n }\n\n function setActiveButton(id) {\n deactivateButtons();\n\n const button = buttonElements[id];\n if (!button) return;\n\n if (button && id !== 'trash') {\n button.classList.add(Constants.classes.ACTIVE_BUTTON);\n activeButton = button;\n }\n }\n\n function addButtons() {\n const controls = ctx.options.controls;\n const controlGroup = document.createElement('div');\n controlGroup.className = `${Constants.classes.CONTROL_GROUP} ${Constants.classes.CONTROL_BASE}`;\n\n if (!controls) return controlGroup;\n\n if (controls[Constants.types.LINE]) {\n buttonElements[Constants.types.LINE] = createControlButton(Constants.types.LINE, {\n container: controlGroup,\n className: Constants.classes.CONTROL_BUTTON_LINE,\n title: `LineString tool ${ctx.options.keybindings ? '(l)' : ''}`,\n onActivate: () => ctx.events.changeMode(Constants.modes.DRAW_LINE_STRING),\n onDeactivate: () => ctx.events.trash()\n });\n }\n\n if (controls[Constants.types.POLYGON]) {\n buttonElements[Constants.types.POLYGON] = createControlButton(Constants.types.POLYGON, {\n container: controlGroup,\n className: Constants.classes.CONTROL_BUTTON_POLYGON,\n title: `Polygon tool ${ctx.options.keybindings ? '(p)' : ''}`,\n onActivate: () => ctx.events.changeMode(Constants.modes.DRAW_POLYGON),\n onDeactivate: () => ctx.events.trash()\n });\n }\n\n if (controls[Constants.types.POINT]) {\n buttonElements[Constants.types.POINT] = createControlButton(Constants.types.POINT, {\n container: controlGroup,\n className: Constants.classes.CONTROL_BUTTON_POINT,\n title: `Marker tool ${ctx.options.keybindings ? '(m)' : ''}`,\n onActivate: () => ctx.events.changeMode(Constants.modes.DRAW_POINT),\n onDeactivate: () => ctx.events.trash()\n });\n }\n\n if (controls.trash) {\n buttonElements.trash = createControlButton('trash', {\n container: controlGroup,\n className: Constants.classes.CONTROL_BUTTON_TRASH,\n title: 'Delete',\n onActivate: () => {\n ctx.events.trash();\n }\n });\n }\n\n if (controls.combine_features) {\n buttonElements.combine_features = createControlButton('combineFeatures', {\n container: controlGroup,\n className: Constants.classes.CONTROL_BUTTON_COMBINE_FEATURES,\n title: 'Combine',\n onActivate: () => {\n ctx.events.combineFeatures();\n }\n });\n }\n\n if (controls.uncombine_features) {\n buttonElements.uncombine_features = createControlButton('uncombineFeatures', {\n container: controlGroup,\n className: Constants.classes.CONTROL_BUTTON_UNCOMBINE_FEATURES,\n title: 'Uncombine',\n onActivate: () => {\n ctx.events.uncombineFeatures();\n }\n });\n }\n\n return controlGroup;\n }\n\n function removeButtons() {\n Object.keys(buttonElements).forEach((buttonId) => {\n const button = buttonElements[buttonId];\n if (button.parentNode) {\n button.parentNode.removeChild(button);\n }\n delete buttonElements[buttonId];\n });\n }\n\n return {\n setActiveButton,\n queueMapClasses,\n updateMapClasses,\n clearMapClasses,\n addButtons,\n removeButtons\n };\n}\n","import events from './events.js';\nimport Store from './store.js';\nimport ui from './ui.js';\nimport * as Constants from './constants.js';\n\nexport default function(ctx) {\n\n let controlContainer = null;\n let mapLoadedInterval = null;\n\n const setup = {\n onRemove() {\n // Stop connect attempt in the event that control is removed before map is loaded\n ctx.map.off('load', setup.connect);\n clearInterval(mapLoadedInterval);\n\n setup.removeLayers();\n ctx.store.restoreMapConfig();\n ctx.ui.removeButtons();\n ctx.events.removeEventListeners();\n ctx.ui.clearMapClasses();\n if (ctx.boxZoomInitial) ctx.map.boxZoom.enable();\n ctx.map = null;\n ctx.container = null;\n ctx.store = null;\n\n if (controlContainer && controlContainer.parentNode) controlContainer.parentNode.removeChild(controlContainer);\n controlContainer = null;\n\n return this;\n },\n connect() {\n ctx.map.off('load', setup.connect);\n clearInterval(mapLoadedInterval);\n setup.addLayers();\n ctx.store.storeMapConfig();\n ctx.events.addEventListeners();\n },\n onAdd(map) {\n ctx.map = map;\n ctx.events = events(ctx);\n ctx.ui = ui(ctx);\n ctx.container = map.getContainer();\n ctx.store = new Store(ctx);\n\n\n controlContainer = ctx.ui.addButtons();\n\n if (ctx.options.boxSelect) {\n ctx.boxZoomInitial = map.boxZoom.isEnabled();\n map.boxZoom.disable();\n const dragPanIsEnabled = map.dragPan.isEnabled();\n // Need to toggle dragPan on and off or else first\n // dragPan disable attempt in simple_select doesn't work\n map.dragPan.disable();\n map.dragPan.enable();\n if (!dragPanIsEnabled) {\n map.dragPan.disable();\n }\n }\n\n if (map.loaded()) {\n setup.connect();\n } else {\n map.on('load', setup.connect);\n mapLoadedInterval = setInterval(() => { if (map.loaded()) setup.connect(); }, 16);\n }\n\n ctx.events.start();\n return controlContainer;\n },\n addLayers() {\n // drawn features style\n ctx.map.addSource(Constants.sources.COLD, {\n data: {\n type: Constants.geojsonTypes.FEATURE_COLLECTION,\n features: []\n },\n type: 'geojson'\n });\n\n // hot features style\n ctx.map.addSource(Constants.sources.HOT, {\n data: {\n type: Constants.geojsonTypes.FEATURE_COLLECTION,\n features: []\n },\n type: 'geojson'\n });\n\n ctx.options.styles.forEach((style) => {\n ctx.map.addLayer(style);\n });\n\n ctx.store.setDirty(true);\n ctx.store.render();\n },\n // Check for layers and sources before attempting to remove\n // If user adds draw control and removes it before the map is loaded, layers and sources will be missing\n removeLayers() {\n ctx.options.styles.forEach((style) => {\n if (ctx.map.getLayer(style.id)) {\n ctx.map.removeLayer(style.id);\n }\n });\n\n if (ctx.map.getSource(Constants.sources.COLD)) {\n ctx.map.removeSource(Constants.sources.COLD);\n }\n\n if (ctx.map.getSource(Constants.sources.HOT)) {\n ctx.map.removeSource(Constants.sources.HOT);\n }\n }\n };\n\n ctx.setup = setup;\n\n return setup;\n}\n","/* eslint comma-dangle: [\"error\", \"always-multiline\"] */\n\nconst blue = '#3bb2d0';\nconst orange = '#fbb03b';\nconst white = '#fff';\n\nexport default [\n // Polygons\n // Solid fill\n // Active state defines color\n {\n 'id': 'gl-draw-polygon-fill',\n 'type': 'fill',\n 'filter': [\n 'all',\n ['==', '$type', 'Polygon'],\n ],\n 'paint': {\n 'fill-color': [\n 'case',\n ['==', ['get', 'active'], 'true'], orange,\n blue,\n ],\n 'fill-opacity': 0.1,\n },\n },\n // Lines\n // Polygon\n // Matches Lines AND Polygons\n // Active state defines color\n {\n 'id': 'gl-draw-lines',\n 'type': 'line',\n 'filter': [\n 'any',\n ['==', '$type', 'LineString'],\n ['==', '$type', 'Polygon'],\n ],\n 'layout': {\n 'line-cap': 'round',\n 'line-join': 'round',\n },\n 'paint': {\n 'line-color': [\n 'case',\n ['==', ['get', 'active'], 'true'], orange,\n blue,\n ],\n 'line-dasharray': [\n 'case',\n ['==', ['get', 'active'], 'true'], [0.2, 2],\n [2, 0],\n ],\n 'line-width': 2,\n },\n },\n // Points\n // Circle with an outline\n // Active state defines size and color\n {\n 'id': 'gl-draw-point-outer',\n 'type': 'circle',\n 'filter': [\n 'all',\n ['==', '$type', 'Point'],\n ['==', 'meta', 'feature'],\n ],\n 'paint': {\n 'circle-radius': [\n 'case',\n ['==', ['get', 'active'], 'true'], 7,\n 5,\n ],\n 'circle-color': white,\n },\n },\n {\n 'id': 'gl-draw-point-inner',\n 'type': 'circle',\n 'filter': [\n 'all',\n ['==', '$type', 'Point'],\n ['==', 'meta', 'feature'],\n ],\n 'paint': {\n 'circle-radius': [\n 'case',\n ['==', ['get', 'active'], 'true'], 5,\n 3,\n ],\n 'circle-color': [\n 'case',\n ['==', ['get', 'active'], 'true'], orange,\n blue,\n ],\n },\n },\n // Vertex\n // Visible when editing polygons and lines\n // Similar behaviour to Points\n // Active state defines size\n {\n 'id': 'gl-draw-vertex-outer',\n 'type': 'circle',\n 'filter': [\n 'all',\n ['==', '$type', 'Point'],\n ['==', 'meta', 'vertex'],\n ['!=', 'mode', 'simple_select'],\n ],\n 'paint': {\n 'circle-radius': [\n 'case',\n ['==', ['get', 'active'], 'true'], 7,\n 5,\n ],\n 'circle-color': white,\n },\n },\n {\n 'id': 'gl-draw-vertex-inner',\n 'type': 'circle',\n 'filter': [\n 'all',\n ['==', '$type', 'Point'],\n ['==', 'meta', 'vertex'],\n ['!=', 'mode', 'simple_select'],\n ],\n 'paint': {\n 'circle-radius': [\n 'case',\n ['==', ['get', 'active'], 'true'], 5,\n 3,\n ],\n 'circle-color': orange,\n },\n },\n // Midpoint\n // Visible when editing polygons and lines\n // Tapping or dragging them adds a new vertex to the feature\n {\n 'id': 'gl-draw-midpoint',\n 'type': 'circle',\n 'filter': [\n 'all',\n ['==', 'meta', 'midpoint'],\n ],\n 'paint': {\n 'circle-radius': 3,\n 'circle-color': orange,\n },\n },\n];\n","import * as Constants from '../constants.js';\n\nexport function isOfMetaType(type) {\n return function(e) {\n const featureTarget = e.featureTarget;\n if (!featureTarget) return false;\n if (!featureTarget.properties) return false;\n return featureTarget.properties.meta === type;\n };\n}\n\nexport function isShiftMousedown(e) {\n if (!e.originalEvent) return false;\n if (!e.originalEvent.shiftKey) return false;\n return e.originalEvent.button === 0;\n}\n\nexport function isActiveFeature(e) {\n if (!e.featureTarget) return false;\n if (!e.featureTarget.properties) return false;\n return e.featureTarget.properties.active === Constants.activeStates.ACTIVE &&\n e.featureTarget.properties.meta === Constants.meta.FEATURE;\n}\n\nexport function isInactiveFeature(e) {\n if (!e.featureTarget) return false;\n if (!e.featureTarget.properties) return false;\n return e.featureTarget.properties.active === Constants.activeStates.INACTIVE &&\n e.featureTarget.properties.meta === Constants.meta.FEATURE;\n}\n\nexport function noTarget(e) {\n return e.featureTarget === undefined;\n}\n\nexport function isFeature(e) {\n if (!e.featureTarget) return false;\n if (!e.featureTarget.properties) return false;\n return e.featureTarget.properties.meta === Constants.meta.FEATURE;\n}\n\nexport function isVertex(e) {\n const featureTarget = e.featureTarget;\n if (!featureTarget) return false;\n if (!featureTarget.properties) return false;\n return featureTarget.properties.meta === Constants.meta.VERTEX;\n}\n\nexport function isShiftDown(e) {\n if (!e.originalEvent) return false;\n return e.originalEvent.shiftKey === true;\n}\n\nexport function isEscapeKey(e) {\n return e.keyCode === 27;\n}\n\nexport function isEnterKey(e) {\n return e.keyCode === 13;\n}\n\nexport function isTrue() {\n return true;\n}\n","/**\n * A standalone point geometry with useful accessor, comparison, and\n * modification methods.\n *\n * @class\n * @param {number} x the x-coordinate. This could be longitude or screen pixels, or any other sort of unit.\n * @param {number} y the y-coordinate. This could be latitude or screen pixels, or any other sort of unit.\n *\n * @example\n * const point = new Point(-77, 38);\n */\nexport default function Point(x, y) {\n this.x = x;\n this.y = y;\n}\n\nPoint.prototype = {\n /**\n * Clone this point, returning a new point that can be modified\n * without affecting the old one.\n * @return {Point} the clone\n */\n clone() { return new Point(this.x, this.y); },\n\n /**\n * Add this point's x & y coordinates to another point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n add(p) { return this.clone()._add(p); },\n\n /**\n * Subtract this point's x & y coordinates to from point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n sub(p) { return this.clone()._sub(p); },\n\n /**\n * Multiply this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n multByPoint(p) { return this.clone()._multByPoint(p); },\n\n /**\n * Divide this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n divByPoint(p) { return this.clone()._divByPoint(p); },\n\n /**\n * Multiply this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {number} k factor\n * @return {Point} output point\n */\n mult(k) { return this.clone()._mult(k); },\n\n /**\n * Divide this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {number} k factor\n * @return {Point} output point\n */\n div(k) { return this.clone()._div(k); },\n\n /**\n * Rotate this point around the 0, 0 origin by an angle a,\n * given in radians\n * @param {number} a angle to rotate around, in radians\n * @return {Point} output point\n */\n rotate(a) { return this.clone()._rotate(a); },\n\n /**\n * Rotate this point around p point by an angle a,\n * given in radians\n * @param {number} a angle to rotate around, in radians\n * @param {Point} p Point to rotate around\n * @return {Point} output point\n */\n rotateAround(a, p) { return this.clone()._rotateAround(a, p); },\n\n /**\n * Multiply this point by a 4x1 transformation matrix\n * @param {[number, number, number, number]} m transformation matrix\n * @return {Point} output point\n */\n matMult(m) { return this.clone()._matMult(m); },\n\n /**\n * Calculate this point but as a unit vector from 0, 0, meaning\n * that the distance from the resulting point to the 0, 0\n * coordinate will be equal to 1 and the angle from the resulting\n * point to the 0, 0 coordinate will be the same as before.\n * @return {Point} unit vector point\n */\n unit() { return this.clone()._unit(); },\n\n /**\n * Compute a perpendicular point, where the new y coordinate\n * is the old x coordinate and the new x coordinate is the old y\n * coordinate multiplied by -1\n * @return {Point} perpendicular point\n */\n perp() { return this.clone()._perp(); },\n\n /**\n * Return a version of this point with the x & y coordinates\n * rounded to integers.\n * @return {Point} rounded point\n */\n round() { return this.clone()._round(); },\n\n /**\n * Return the magnitude of this point: this is the Euclidean\n * distance from the 0, 0 coordinate to this point's x and y\n * coordinates.\n * @return {number} magnitude\n */\n mag() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n\n /**\n * Judge whether this point is equal to another point, returning\n * true or false.\n * @param {Point} other the other point\n * @return {boolean} whether the points are equal\n */\n equals(other) {\n return this.x === other.x &&\n this.y === other.y;\n },\n\n /**\n * Calculate the distance from this point to another point\n * @param {Point} p the other point\n * @return {number} distance\n */\n dist(p) {\n return Math.sqrt(this.distSqr(p));\n },\n\n /**\n * Calculate the distance from this point to another point,\n * without the square root step. Useful if you're comparing\n * relative distances.\n * @param {Point} p the other point\n * @return {number} distance\n */\n distSqr(p) {\n const dx = p.x - this.x,\n dy = p.y - this.y;\n return dx * dx + dy * dy;\n },\n\n /**\n * Get the angle from the 0, 0 coordinate to this point, in radians\n * coordinates.\n * @return {number} angle\n */\n angle() {\n return Math.atan2(this.y, this.x);\n },\n\n /**\n * Get the angle from this point to another point, in radians\n * @param {Point} b the other point\n * @return {number} angle\n */\n angleTo(b) {\n return Math.atan2(this.y - b.y, this.x - b.x);\n },\n\n /**\n * Get the angle between this point and another point, in radians\n * @param {Point} b the other point\n * @return {number} angle\n */\n angleWith(b) {\n return this.angleWithSep(b.x, b.y);\n },\n\n /**\n * Find the angle of the two vectors, solving the formula for\n * the cross product a x b = |a||b|sin(θ) for θ.\n * @param {number} x the x-coordinate\n * @param {number} y the y-coordinate\n * @return {number} the angle in radians\n */\n angleWithSep(x, y) {\n return Math.atan2(\n this.x * y - this.y * x,\n this.x * x + this.y * y);\n },\n\n /** @param {[number, number, number, number]} m */\n _matMult(m) {\n const x = m[0] * this.x + m[1] * this.y,\n y = m[2] * this.x + m[3] * this.y;\n this.x = x;\n this.y = y;\n return this;\n },\n\n /** @param {Point} p */\n _add(p) {\n this.x += p.x;\n this.y += p.y;\n return this;\n },\n\n /** @param {Point} p */\n _sub(p) {\n this.x -= p.x;\n this.y -= p.y;\n return this;\n },\n\n /** @param {number} k */\n _mult(k) {\n this.x *= k;\n this.y *= k;\n return this;\n },\n\n /** @param {number} k */\n _div(k) {\n this.x /= k;\n this.y /= k;\n return this;\n },\n\n /** @param {Point} p */\n _multByPoint(p) {\n this.x *= p.x;\n this.y *= p.y;\n return this;\n },\n\n /** @param {Point} p */\n _divByPoint(p) {\n this.x /= p.x;\n this.y /= p.y;\n return this;\n },\n\n _unit() {\n this._div(this.mag());\n return this;\n },\n\n _perp() {\n const y = this.y;\n this.y = this.x;\n this.x = -y;\n return this;\n },\n\n /** @param {number} angle */\n _rotate(angle) {\n const cos = Math.cos(angle),\n sin = Math.sin(angle),\n x = cos * this.x - sin * this.y,\n y = sin * this.x + cos * this.y;\n this.x = x;\n this.y = y;\n return this;\n },\n\n /**\n * @param {number} angle\n * @param {Point} p\n */\n _rotateAround(angle, p) {\n const cos = Math.cos(angle),\n sin = Math.sin(angle),\n x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),\n y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n this.x = x;\n this.y = y;\n return this;\n },\n\n _round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n },\n\n constructor: Point\n};\n\n/**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, return it unchanged.\n * @param {Point | [number, number] | {x: number, y: number}} p input value\n * @return {Point} constructed point.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\nPoint.convert = function (p) {\n if (p instanceof Point) {\n return /** @type {Point} */ (p);\n }\n if (Array.isArray(p)) {\n return new Point(+p[0], +p[1]);\n }\n if (p.x !== undefined && p.y !== undefined) {\n return new Point(+p.x, +p.y);\n }\n throw new Error('Expected [x, y] or {x, y} point format');\n};\n","import Point from '@mapbox/point-geometry';\n\n/**\n * Returns a Point representing a mouse event's position\n * relative to a containing element.\n *\n * @param {MouseEvent} mouseEvent\n * @param {Node} container\n * @returns {Point}\n */\nfunction mouseEventPoint(mouseEvent, container) {\n const rect = container.getBoundingClientRect();\n return new Point(\n mouseEvent.clientX - rect.left - (container.clientLeft || 0),\n mouseEvent.clientY - rect.top - (container.clientTop || 0)\n );\n}\n\nexport default mouseEventPoint;\n","import * as Constants from '../constants.js';\n\n/**\n * Returns GeoJSON for a Point representing the\n * vertex of another feature.\n *\n * @param {string} parentId\n * @param {Array} coordinates\n * @param {string} path - Dot-separated numbers indicating exactly\n * where the point exists within its parent feature's coordinates.\n * @param {boolean} selected\n * @return {GeoJSON} Point\n */\n\nexport default function(parentId, coordinates, path, selected) {\n return {\n type: Constants.geojsonTypes.FEATURE,\n properties: {\n meta: Constants.meta.VERTEX,\n parent: parentId,\n coord_path: path,\n active: (selected) ? Constants.activeStates.ACTIVE : Constants.activeStates.INACTIVE\n },\n geometry: {\n type: Constants.geojsonTypes.POINT,\n coordinates\n }\n };\n}\n","import * as Constants from '../constants.js';\n\nexport default function(parent, startVertex, endVertex) {\n const startCoord = startVertex.geometry.coordinates;\n const endCoord = endVertex.geometry.coordinates;\n\n // If a coordinate exceeds the projection, we can't calculate a midpoint,\n // so run away\n if (startCoord[1] > Constants.LAT_RENDERED_MAX ||\n startCoord[1] < Constants.LAT_RENDERED_MIN ||\n endCoord[1] > Constants.LAT_RENDERED_MAX ||\n endCoord[1] < Constants.LAT_RENDERED_MIN) {\n return null;\n }\n\n const mid = {\n lng: (startCoord[0] + endCoord[0]) / 2,\n lat: (startCoord[1] + endCoord[1]) / 2\n };\n\n return {\n type: Constants.geojsonTypes.FEATURE,\n properties: {\n meta: Constants.meta.MIDPOINT,\n parent,\n lng: mid.lng,\n lat: mid.lat,\n coord_path: endVertex.properties.coord_path\n },\n geometry: {\n type: Constants.geojsonTypes.POINT,\n coordinates: [mid.lng, mid.lat]\n }\n };\n}\n","import createVertex from './create_vertex.js';\nimport createMidpoint from './create_midpoint.js';\nimport * as Constants from '../constants.js';\n\nfunction createSupplementaryPoints(geojson, options = {}, basePath = null) {\n const { type, coordinates } = geojson.geometry;\n const featureId = geojson.properties && geojson.properties.id;\n\n let supplementaryPoints = [];\n\n if (type === Constants.geojsonTypes.POINT) {\n // For points, just create a vertex\n supplementaryPoints.push(createVertex(featureId, coordinates, basePath, isSelectedPath(basePath)));\n } else if (type === Constants.geojsonTypes.POLYGON) {\n // Cycle through a Polygon's rings and\n // process each line\n coordinates.forEach((line, lineIndex) => {\n processLine(line, (basePath !== null) ? `${basePath}.${lineIndex}` : String(lineIndex));\n });\n } else if (type === Constants.geojsonTypes.LINE_STRING) {\n processLine(coordinates, basePath);\n } else if (type.indexOf(Constants.geojsonTypes.MULTI_PREFIX) === 0) {\n processMultiGeometry();\n }\n\n function processLine(line, lineBasePath) {\n let firstPointString = '';\n let lastVertex = null;\n line.forEach((point, pointIndex) => {\n const pointPath = (lineBasePath !== undefined && lineBasePath !== null) ? `${lineBasePath}.${pointIndex}` : String(pointIndex);\n const vertex = createVertex(featureId, point, pointPath, isSelectedPath(pointPath));\n\n // If we're creating midpoints, check if there was a\n // vertex before this one. If so, add a midpoint\n // between that vertex and this one.\n if (options.midpoints && lastVertex) {\n const midpoint = createMidpoint(featureId, lastVertex, vertex);\n if (midpoint) {\n supplementaryPoints.push(midpoint);\n }\n }\n lastVertex = vertex;\n\n // A Polygon line's last point is the same as the first point. If we're on the last\n // point, we want to draw a midpoint before it but not another vertex on it\n // (since we already a vertex there, from the first point).\n const stringifiedPoint = JSON.stringify(point);\n if (firstPointString !== stringifiedPoint) {\n supplementaryPoints.push(vertex);\n }\n if (pointIndex === 0) {\n firstPointString = stringifiedPoint;\n }\n });\n }\n\n function isSelectedPath(path) {\n if (!options.selectedPaths) return false;\n return options.selectedPaths.indexOf(path) !== -1;\n }\n\n // Split a multi-geometry into constituent\n // geometries, and accumulate the supplementary points\n // for each of those constituents\n function processMultiGeometry() {\n const subType = type.replace(Constants.geojsonTypes.MULTI_PREFIX, '');\n coordinates.forEach((subCoordinates, index) => {\n const subFeature = {\n type: Constants.geojsonTypes.FEATURE,\n properties: geojson.properties,\n geometry: {\n type: subType,\n coordinates: subCoordinates\n }\n };\n supplementaryPoints = supplementaryPoints.concat(createSupplementaryPoints(subFeature, options, index));\n });\n }\n\n return supplementaryPoints;\n}\n\nexport default createSupplementaryPoints;\n","export default {\n enable(ctx) {\n setTimeout(() => {\n // First check we've got a map and some context.\n if (!ctx.map || !ctx.map.doubleClickZoom || !ctx._ctx || !ctx._ctx.store || !ctx._ctx.store.getInitialConfigValue) return;\n // Now check initial state wasn't false (we leave it disabled if so)\n if (!ctx._ctx.store.getInitialConfigValue('doubleClickZoom')) return;\n ctx.map.doubleClickZoom.enable();\n }, 0);\n },\n disable(ctx) {\n setTimeout(() => {\n if (!ctx.map || !ctx.map.doubleClickZoom) return;\n // Always disable here, as it's necessary in some cases.\n ctx.map.doubleClickZoom.disable();\n }, 0);\n }\n};\n","import * as Constants from '../constants.js';\n\nconst {\n LAT_MIN,\n LAT_MAX,\n LAT_RENDERED_MIN,\n LAT_RENDERED_MAX,\n LNG_MIN,\n LNG_MAX,\n} = Constants;\nfunction extent(feature) {\n const depth = {\n Point: 0,\n LineString: 1,\n Polygon: 2,\n MultiPoint: 1,\n MultiLineString: 2,\n MultiPolygon: 3,\n }[feature.geometry.type];\n\n const coords = [feature.geometry.coordinates].flat(depth);\n const lngs = coords.map(coord => coord[0]);\n const lats = coords.map(coord => coord[1]);\n const min = vals => Math.min.apply(null, vals);\n const max = vals => Math.max.apply(null, vals);\n return [min(lngs), min(lats), max(lngs), max(lats)];\n}\n\n// Ensure that we do not drag north-south far enough for\n// - any part of any feature to exceed the poles\n// - any feature to be completely lost in the space between the projection's\n// edge and the poles, such that it couldn't be re-selected and moved back\nexport default function(geojsonFeatures, delta) {\n // \"inner edge\" = a feature's latitude closest to the equator\n let northInnerEdge = LAT_MIN;\n let southInnerEdge = LAT_MAX;\n // \"outer edge\" = a feature's latitude furthest from the equator\n let northOuterEdge = LAT_MIN;\n let southOuterEdge = LAT_MAX;\n\n let westEdge = LNG_MAX;\n let eastEdge = LNG_MIN;\n\n geojsonFeatures.forEach((feature) => {\n const bounds = extent(feature);\n const featureSouthEdge = bounds[1];\n const featureNorthEdge = bounds[3];\n const featureWestEdge = bounds[0];\n const featureEastEdge = bounds[2];\n if (featureSouthEdge > northInnerEdge) northInnerEdge = featureSouthEdge;\n if (featureNorthEdge < southInnerEdge) southInnerEdge = featureNorthEdge;\n if (featureNorthEdge > northOuterEdge) northOuterEdge = featureNorthEdge;\n if (featureSouthEdge < southOuterEdge) southOuterEdge = featureSouthEdge;\n if (featureWestEdge < westEdge) westEdge = featureWestEdge;\n if (featureEastEdge > eastEdge) eastEdge = featureEastEdge;\n });\n\n\n // These changes are not mutually exclusive: we might hit the inner\n // edge but also have hit the outer edge and therefore need\n // another readjustment\n const constrainedDelta = delta;\n if (northInnerEdge + constrainedDelta.lat > LAT_RENDERED_MAX) {\n constrainedDelta.lat = LAT_RENDERED_MAX - northInnerEdge;\n }\n if (northOuterEdge + constrainedDelta.lat > LAT_MAX) {\n constrainedDelta.lat = LAT_MAX - northOuterEdge;\n }\n if (southInnerEdge + constrainedDelta.lat < LAT_RENDERED_MIN) {\n constrainedDelta.lat = LAT_RENDERED_MIN - southInnerEdge;\n }\n if (southOuterEdge + constrainedDelta.lat < LAT_MIN) {\n constrainedDelta.lat = LAT_MIN - southOuterEdge;\n }\n if (westEdge + constrainedDelta.lng <= LNG_MIN) {\n constrainedDelta.lng += Math.ceil(Math.abs(constrainedDelta.lng) / 360) * 360;\n }\n if (eastEdge + constrainedDelta.lng >= LNG_MAX) {\n constrainedDelta.lng -= Math.ceil(Math.abs(constrainedDelta.lng) / 360) * 360;\n }\n\n return constrainedDelta;\n}\n","import constrainFeatureMovement from './constrain_feature_movement.js';\nimport * as Constants from '../constants.js';\n\nexport default function(features, delta) {\n const constrainedDelta = constrainFeatureMovement(features.map(feature => feature.toGeoJSON()), delta);\n\n features.forEach((feature) => {\n const currentCoordinates = feature.getCoordinates();\n\n const moveCoordinate = (coord) => {\n const point = {\n lng: coord[0] + constrainedDelta.lng,\n lat: coord[1] + constrainedDelta.lat\n };\n return [point.lng, point.lat];\n };\n const moveRing = ring => ring.map(coord => moveCoordinate(coord));\n const moveMultiPolygon = multi => multi.map(ring => moveRing(ring));\n\n let nextCoordinates;\n if (feature.type === Constants.geojsonTypes.POINT) {\n nextCoordinates = moveCoordinate(currentCoordinates);\n } else if (feature.type === Constants.geojsonTypes.LINE_STRING || feature.type === Constants.geojsonTypes.MULTI_POINT) {\n nextCoordinates = currentCoordinates.map(moveCoordinate);\n } else if (feature.type === Constants.geojsonTypes.POLYGON || feature.type === Constants.geojsonTypes.MULTI_LINE_STRING) {\n nextCoordinates = currentCoordinates.map(moveRing);\n } else if (feature.type === Constants.geojsonTypes.MULTI_POLYGON) {\n nextCoordinates = currentCoordinates.map(moveMultiPolygon);\n }\n\n feature.incomingCoords(nextCoordinates);\n });\n}\n","import * as CommonSelectors from '../lib/common_selectors.js';\nimport mouseEventPoint from '../lib/mouse_event_point.js';\nimport createSupplementaryPoints from '../lib/create_supplementary_points.js';\nimport StringSet from '../lib/string_set.js';\nimport doubleClickZoom from '../lib/double_click_zoom.js';\nimport moveFeatures from '../lib/move_features.js';\nimport * as Constants from '../constants.js';\n\nconst SimpleSelect = {};\n\nSimpleSelect.onSetup = function(opts) {\n // turn the opts into state.\n const state = {\n dragMoveLocation: null,\n boxSelectStartLocation: null,\n boxSelectElement: undefined,\n boxSelecting: false,\n canBoxSelect: false,\n dragMoving: false,\n canDragMove: false,\n initialDragPanState: this.map.dragPan.isEnabled(),\n initiallySelectedFeatureIds: opts.featureIds || []\n };\n\n this.setSelected(state.initiallySelectedFeatureIds.filter(id => this.getFeature(id) !== undefined));\n this.fireActionable();\n\n this.setActionableState({\n combineFeatures: true,\n uncombineFeatures: true,\n trash: true\n });\n\n return state;\n};\n\nSimpleSelect.fireUpdate = function() {\n this.fire(Constants.events.UPDATE, {\n action: Constants.updateActions.MOVE,\n features: this.getSelected().map(f => f.toGeoJSON())\n });\n};\n\nSimpleSelect.fireActionable = function() {\n const selectedFeatures = this.getSelected();\n\n const multiFeatures = selectedFeatures.filter(\n feature => this.isInstanceOf('MultiFeature', feature)\n );\n\n let combineFeatures = false;\n\n if (selectedFeatures.length > 1) {\n combineFeatures = true;\n const featureType = selectedFeatures[0].type.replace('Multi', '');\n selectedFeatures.forEach((feature) => {\n if (feature.type.replace('Multi', '') !== featureType) {\n combineFeatures = false;\n }\n });\n }\n\n const uncombineFeatures = multiFeatures.length > 0;\n const trash = selectedFeatures.length > 0;\n\n this.setActionableState({\n combineFeatures, uncombineFeatures, trash\n });\n};\n\nSimpleSelect.getUniqueIds = function(allFeatures) {\n if (!allFeatures.length) return [];\n const ids = allFeatures.map(s => s.properties.id)\n .filter(id => id !== undefined)\n .reduce((memo, id) => {\n memo.add(id);\n return memo;\n }, new StringSet());\n\n return ids.values();\n};\n\nSimpleSelect.stopExtendedInteractions = function(state) {\n if (state.boxSelectElement) {\n if (state.boxSelectElement.parentNode) state.boxSelectElement.parentNode.removeChild(state.boxSelectElement);\n state.boxSelectElement = null;\n }\n\n if ((state.canDragMove || state.canBoxSelect) && state.initialDragPanState === true) {\n this.map.dragPan.enable();\n }\n\n state.boxSelecting = false;\n state.canBoxSelect = false;\n state.dragMoving = false;\n state.canDragMove = false;\n};\n\nSimpleSelect.onStop = function() {\n doubleClickZoom.enable(this);\n};\n\nSimpleSelect.onMouseMove = function(state, e) {\n const isFeature = CommonSelectors.isFeature(e);\n if (isFeature && state.dragMoving) this.fireUpdate();\n\n // On mousemove that is not a drag, stop extended interactions.\n // This is useful if you drag off the canvas, release the button,\n // then move the mouse back over the canvas --- we don't allow the\n // interaction to continue then, but we do let it continue if you held\n // the mouse button that whole time\n this.stopExtendedInteractions(state);\n\n // Skip render\n return true;\n};\n\nSimpleSelect.onMouseOut = function(state) {\n // As soon as you mouse leaves the canvas, update the feature\n if (state.dragMoving) return this.fireUpdate();\n\n // Skip render\n return true;\n};\n\nSimpleSelect.onTap = SimpleSelect.onClick = function(state, e) {\n // Click (with or without shift) on no feature\n if (CommonSelectors.noTarget(e)) return this.clickAnywhere(state, e); // also tap\n if (CommonSelectors.isOfMetaType(Constants.meta.VERTEX)(e)) return this.clickOnVertex(state, e); //tap\n if (CommonSelectors.isFeature(e)) return this.clickOnFeature(state, e);\n};\n\nSimpleSelect.clickAnywhere = function (state) {\n // Clear the re-render selection\n const wasSelected = this.getSelectedIds();\n if (wasSelected.length) {\n this.clearSelectedFeatures();\n wasSelected.forEach(id => this.doRender(id));\n }\n doubleClickZoom.enable(this);\n this.stopExtendedInteractions(state);\n};\n\nSimpleSelect.clickOnVertex = function(state, e) {\n // Enter direct select mode\n this.changeMode(Constants.modes.DIRECT_SELECT, {\n featureId: e.featureTarget.properties.parent,\n coordPath: e.featureTarget.properties.coord_path,\n startPos: e.lngLat\n });\n this.updateUIClasses({ mouse: Constants.cursors.MOVE });\n};\n\nSimpleSelect.startOnActiveFeature = function(state, e) {\n // Stop any already-underway extended interactions\n this.stopExtendedInteractions(state);\n\n // Disable map.dragPan immediately so it can't start\n this.map.dragPan.disable();\n\n // Re-render it and enable drag move\n this.doRender(e.featureTarget.properties.id);\n\n // Set up the state for drag moving\n state.canDragMove = true;\n state.dragMoveLocation = e.lngLat;\n};\n\nSimpleSelect.clickOnFeature = function(state, e) {\n // Stop everything\n doubleClickZoom.disable(this);\n this.stopExtendedInteractions(state);\n\n const isShiftClick = CommonSelectors.isShiftDown(e);\n const selectedFeatureIds = this.getSelectedIds();\n const featureId = e.featureTarget.properties.id;\n const isFeatureSelected = this.isSelected(featureId);\n\n // Click (without shift) on any selected feature but a point\n if (!isShiftClick && isFeatureSelected && this.getFeature(featureId).type !== Constants.geojsonTypes.POINT) {\n // Enter direct select mode\n return this.changeMode(Constants.modes.DIRECT_SELECT, {\n featureId\n });\n }\n\n // Shift-click on a selected feature\n if (isFeatureSelected && isShiftClick) {\n // Deselect it\n this.deselect(featureId);\n this.updateUIClasses({ mouse: Constants.cursors.POINTER });\n if (selectedFeatureIds.length === 1) {\n doubleClickZoom.enable(this);\n }\n // Shift-click on an unselected feature\n } else if (!isFeatureSelected && isShiftClick) {\n // Add it to the selection\n this.select(featureId);\n this.updateUIClasses({ mouse: Constants.cursors.MOVE });\n // Click (without shift) on an unselected feature\n } else if (!isFeatureSelected && !isShiftClick) {\n // Make it the only selected feature\n selectedFeatureIds.forEach(id => this.doRender(id));\n this.setSelected(featureId);\n this.updateUIClasses({ mouse: Constants.cursors.MOVE });\n }\n\n // No matter what, re-render the clicked feature\n this.doRender(featureId);\n};\n\nSimpleSelect.onMouseDown = function(state, e) {\n state.initialDragPanState = this.map.dragPan.isEnabled();\n if (CommonSelectors.isActiveFeature(e)) return this.startOnActiveFeature(state, e);\n if (this.drawConfig.boxSelect && CommonSelectors.isShiftMousedown(e)) return this.startBoxSelect(state, e);\n};\n\nSimpleSelect.startBoxSelect = function(state, e) {\n this.stopExtendedInteractions(state);\n this.map.dragPan.disable();\n // Enable box select\n state.boxSelectStartLocation = mouseEventPoint(e.originalEvent, this.map.getContainer());\n state.canBoxSelect = true;\n};\n\nSimpleSelect.onTouchStart = function(state, e) {\n if (CommonSelectors.isActiveFeature(e)) return this.startOnActiveFeature(state, e);\n};\n\nSimpleSelect.onDrag = function(state, e) {\n if (state.canDragMove) return this.dragMove(state, e);\n if (this.drawConfig.boxSelect && state.canBoxSelect) return this.whileBoxSelect(state, e);\n};\n\nSimpleSelect.whileBoxSelect = function(state, e) {\n state.boxSelecting = true;\n this.updateUIClasses({ mouse: Constants.cursors.ADD });\n\n // Create the box node if it doesn't exist\n if (!state.boxSelectElement) {\n state.boxSelectElement = document.createElement('div');\n state.boxSelectElement.classList.add(Constants.classes.BOX_SELECT);\n this.map.getContainer().appendChild(state.boxSelectElement);\n }\n\n // Adjust the box node's width and xy position\n const current = mouseEventPoint(e.originalEvent, this.map.getContainer());\n const minX = Math.min(state.boxSelectStartLocation.x, current.x);\n const maxX = Math.max(state.boxSelectStartLocation.x, current.x);\n const minY = Math.min(state.boxSelectStartLocation.y, current.y);\n const maxY = Math.max(state.boxSelectStartLocation.y, current.y);\n const translateValue = `translate(${minX}px, ${minY}px)`;\n state.boxSelectElement.style.transform = translateValue;\n state.boxSelectElement.style.WebkitTransform = translateValue;\n state.boxSelectElement.style.width = `${maxX - minX}px`;\n state.boxSelectElement.style.height = `${maxY - minY}px`;\n};\n\nSimpleSelect.dragMove = function(state, e) {\n // Dragging when drag move is enabled\n state.dragMoving = true;\n e.originalEvent.stopPropagation();\n\n const delta = {\n lng: e.lngLat.lng - state.dragMoveLocation.lng,\n lat: e.lngLat.lat - state.dragMoveLocation.lat\n };\n\n moveFeatures(this.getSelected(), delta);\n\n state.dragMoveLocation = e.lngLat;\n};\n\nSimpleSelect.onTouchEnd = SimpleSelect.onMouseUp = function(state, e) {\n // End any extended interactions\n if (state.dragMoving) {\n this.fireUpdate();\n } else if (state.boxSelecting) {\n const bbox = [\n state.boxSelectStartLocation,\n mouseEventPoint(e.originalEvent, this.map.getContainer())\n ];\n const featuresInBox = this.featuresAt(null, bbox, 'click');\n const idsToSelect = this.getUniqueIds(featuresInBox)\n .filter(id => !this.isSelected(id));\n\n if (idsToSelect.length) {\n this.select(idsToSelect);\n idsToSelect.forEach(id => this.doRender(id));\n this.updateUIClasses({ mouse: Constants.cursors.MOVE });\n }\n }\n this.stopExtendedInteractions(state);\n};\n\nSimpleSelect.toDisplayFeatures = function(state, geojson, display) {\n geojson.properties.active = (this.isSelected(geojson.properties.id)) ?\n Constants.activeStates.ACTIVE : Constants.activeStates.INACTIVE;\n display(geojson);\n this.fireActionable();\n if (geojson.properties.active !== Constants.activeStates.ACTIVE ||\n geojson.geometry.type === Constants.geojsonTypes.POINT) return;\n createSupplementaryPoints(geojson).forEach(display);\n};\n\nSimpleSelect.onTrash = function() {\n this.deleteFeature(this.getSelectedIds());\n this.fireActionable();\n};\n\nSimpleSelect.onCombineFeatures = function() {\n const selectedFeatures = this.getSelected();\n\n if (selectedFeatures.length === 0 || selectedFeatures.length < 2) return;\n\n const coordinates = [], featuresCombined = [];\n const featureType = selectedFeatures[0].type.replace('Multi', '');\n\n for (let i = 0; i < selectedFeatures.length; i++) {\n const feature = selectedFeatures[i];\n\n if (feature.type.replace('Multi', '') !== featureType) {\n return;\n }\n if (feature.type.includes('Multi')) {\n feature.getCoordinates().forEach((subcoords) => {\n coordinates.push(subcoords);\n });\n } else {\n coordinates.push(feature.getCoordinates());\n }\n\n featuresCombined.push(feature.toGeoJSON());\n }\n\n if (featuresCombined.length > 1) {\n const multiFeature = this.newFeature({\n type: Constants.geojsonTypes.FEATURE,\n properties: featuresCombined[0].properties,\n geometry: {\n type: `Multi${featureType}`,\n coordinates\n }\n });\n\n this.addFeature(multiFeature);\n this.deleteFeature(this.getSelectedIds(), { silent: true });\n this.setSelected([multiFeature.id]);\n\n this.fire(Constants.events.COMBINE_FEATURES, {\n createdFeatures: [multiFeature.toGeoJSON()],\n deletedFeatures: featuresCombined\n });\n }\n this.fireActionable();\n};\n\nSimpleSelect.onUncombineFeatures = function() {\n const selectedFeatures = this.getSelected();\n if (selectedFeatures.length === 0) return;\n\n const createdFeatures = [];\n const featuresUncombined = [];\n\n for (let i = 0; i < selectedFeatures.length; i++) {\n const feature = selectedFeatures[i];\n\n if (this.isInstanceOf('MultiFeature', feature)) {\n feature.getFeatures().forEach((subFeature) => {\n this.addFeature(subFeature);\n subFeature.properties = feature.properties;\n createdFeatures.push(subFeature.toGeoJSON());\n this.select([subFeature.id]);\n });\n this.deleteFeature(feature.id, { silent: true });\n featuresUncombined.push(feature.toGeoJSON());\n }\n }\n\n if (createdFeatures.length > 1) {\n this.fire(Constants.events.UNCOMBINE_FEATURES, {\n createdFeatures,\n deletedFeatures: featuresUncombined\n });\n }\n this.fireActionable();\n};\n\nexport default SimpleSelect;\n","import { noTarget, isOfMetaType, isActiveFeature, isInactiveFeature, isShiftDown } from '../lib/common_selectors.js';\nimport createSupplementaryPoints from '../lib/create_supplementary_points.js';\nimport constrainFeatureMovement from '../lib/constrain_feature_movement.js';\nimport doubleClickZoom from '../lib/double_click_zoom.js';\nimport * as Constants from '../constants.js';\nimport moveFeatures from '../lib/move_features.js';\n\nconst isVertex = isOfMetaType(Constants.meta.VERTEX);\nconst isMidpoint = isOfMetaType(Constants.meta.MIDPOINT);\n\nconst DirectSelect = {};\n\n// INTERNAL FUCNTIONS\n\nDirectSelect.fireUpdate = function() {\n this.fire(Constants.events.UPDATE, {\n action: Constants.updateActions.CHANGE_COORDINATES,\n features: this.getSelected().map(f => f.toGeoJSON())\n });\n};\n\nDirectSelect.fireActionable = function(state) {\n this.setActionableState({\n combineFeatures: false,\n uncombineFeatures: false,\n trash: state.selectedCoordPaths.length > 0\n });\n};\n\nDirectSelect.startDragging = function(state, e) {\n state.initialDragPanState = this.map.dragPan.isEnabled();\n\n this.map.dragPan.disable();\n state.canDragMove = true;\n state.dragMoveLocation = e.lngLat;\n};\n\nDirectSelect.stopDragging = function(state) {\n if (state.canDragMove && state.initialDragPanState === true) {\n this.map.dragPan.enable();\n }\n state.dragMoving = false;\n state.canDragMove = false;\n state.dragMoveLocation = null;\n};\n\nDirectSelect.onVertex = function (state, e) {\n this.startDragging(state, e);\n const about = e.featureTarget.properties;\n const selectedIndex = state.selectedCoordPaths.indexOf(about.coord_path);\n if (!isShiftDown(e) && selectedIndex === -1) {\n state.selectedCoordPaths = [about.coord_path];\n } else if (isShiftDown(e) && selectedIndex === -1) {\n state.selectedCoordPaths.push(about.coord_path);\n }\n\n const selectedCoordinates = this.pathsToCoordinates(state.featureId, state.selectedCoordPaths);\n this.setSelectedCoordinates(selectedCoordinates);\n};\n\nDirectSelect.onMidpoint = function(state, e) {\n this.startDragging(state, e);\n const about = e.featureTarget.properties;\n state.feature.addCoordinate(about.coord_path, about.lng, about.lat);\n this.fireUpdate();\n state.selectedCoordPaths = [about.coord_path];\n};\n\nDirectSelect.pathsToCoordinates = function(featureId, paths) {\n return paths.map(coord_path => ({ feature_id: featureId, coord_path }));\n};\n\nDirectSelect.onFeature = function(state, e) {\n if (state.selectedCoordPaths.length === 0) this.startDragging(state, e);\n else this.stopDragging(state);\n};\n\nDirectSelect.dragFeature = function(state, e, delta) {\n moveFeatures(this.getSelected(), delta);\n state.dragMoveLocation = e.lngLat;\n};\n\nDirectSelect.dragVertex = function(state, e, delta) {\n const selectedCoords = state.selectedCoordPaths.map(coord_path => state.feature.getCoordinate(coord_path));\n const selectedCoordPoints = selectedCoords.map(coords => ({\n type: Constants.geojsonTypes.FEATURE,\n properties: {},\n geometry: {\n type: Constants.geojsonTypes.POINT,\n coordinates: coords\n }\n }));\n\n const constrainedDelta = constrainFeatureMovement(selectedCoordPoints, delta);\n for (let i = 0; i < selectedCoords.length; i++) {\n const coord = selectedCoords[i];\n state.feature.updateCoordinate(state.selectedCoordPaths[i], coord[0] + constrainedDelta.lng, coord[1] + constrainedDelta.lat);\n }\n};\n\nDirectSelect.clickNoTarget = function () {\n this.changeMode(Constants.modes.SIMPLE_SELECT);\n};\n\nDirectSelect.clickInactive = function () {\n this.changeMode(Constants.modes.SIMPLE_SELECT);\n};\n\nDirectSelect.clickActiveFeature = function (state) {\n state.selectedCoordPaths = [];\n this.clearSelectedCoordinates();\n state.feature.changed();\n};\n\n// EXTERNAL FUNCTIONS\n\nDirectSelect.onSetup = function(opts) {\n const featureId = opts.featureId;\n const feature = this.getFeature(featureId);\n\n if (!feature) {\n throw new Error('You must provide a featureId to enter direct_select mode');\n }\n\n if (feature.type === Constants.geojsonTypes.POINT) {\n throw new TypeError('direct_select mode doesn\\'t handle point features');\n }\n\n const state = {\n featureId,\n feature,\n dragMoveLocation: opts.startPos || null,\n dragMoving: false,\n canDragMove: false,\n selectedCoordPaths: opts.coordPath ? [opts.coordPath] : [],\n };\n\n this.setSelectedCoordinates(this.pathsToCoordinates(featureId, state.selectedCoordPaths));\n this.setSelected(featureId);\n doubleClickZoom.disable(this);\n\n this.setActionableState({\n trash: true\n });\n\n return state;\n};\n\nDirectSelect.onStop = function() {\n doubleClickZoom.enable(this);\n this.clearSelectedCoordinates();\n};\n\nDirectSelect.toDisplayFeatures = function(state, geojson, push) {\n if (state.featureId === geojson.properties.id) {\n geojson.properties.active = Constants.activeStates.ACTIVE;\n push(geojson);\n createSupplementaryPoints(geojson, {\n map: this.map,\n midpoints: true,\n selectedPaths: state.selectedCoordPaths\n }).forEach(push);\n } else {\n geojson.properties.active = Constants.activeStates.INACTIVE;\n push(geojson);\n }\n this.fireActionable(state);\n};\n\nDirectSelect.onTrash = function(state) {\n // Uses number-aware sorting to make sure '9' < '10'. Comparison is reversed because we want them\n // in reverse order so that we can remove by index safely.\n state.selectedCoordPaths\n .sort((a, b) => b.localeCompare(a, 'en', { numeric: true }))\n .forEach(id => state.feature.removeCoordinate(id));\n this.fireUpdate();\n state.selectedCoordPaths = [];\n this.clearSelectedCoordinates();\n this.fireActionable(state);\n if (state.feature.isValid() === false) {\n this.deleteFeature([state.featureId]);\n this.changeMode(Constants.modes.SIMPLE_SELECT, {});\n }\n};\n\nDirectSelect.onMouseMove = function(state, e) {\n // On mousemove that is not a drag, stop vertex movement.\n const isFeature = isActiveFeature(e);\n const onVertex = isVertex(e);\n const isMidPoint = isMidpoint(e);\n const noCoords = state.selectedCoordPaths.length === 0;\n if (isFeature && noCoords) this.updateUIClasses({ mouse: Constants.cursors.MOVE });\n else if (onVertex && !noCoords) this.updateUIClasses({ mouse: Constants.cursors.MOVE });\n else this.updateUIClasses({ mouse: Constants.cursors.NONE });\n\n const isDraggableItem = onVertex || isFeature || isMidPoint;\n if (isDraggableItem && state.dragMoving) this.fireUpdate();\n\n this.stopDragging(state);\n\n // Skip render\n return true;\n};\n\nDirectSelect.onMouseOut = function(state) {\n // As soon as you mouse leaves the canvas, update the feature\n if (state.dragMoving) this.fireUpdate();\n\n // Skip render\n return true;\n};\n\nDirectSelect.onTouchStart = DirectSelect.onMouseDown = function(state, e) {\n if (isVertex(e)) return this.onVertex(state, e);\n if (isActiveFeature(e)) return this.onFeature(state, e);\n if (isMidpoint(e)) return this.onMidpoint(state, e);\n};\n\nDirectSelect.onDrag = function(state, e) {\n if (state.canDragMove !== true) return;\n state.dragMoving = true;\n e.originalEvent.stopPropagation();\n\n const delta = {\n lng: e.lngLat.lng - state.dragMoveLocation.lng,\n lat: e.lngLat.lat - state.dragMoveLocation.lat\n };\n if (state.selectedCoordPaths.length > 0) this.dragVertex(state, e, delta);\n else this.dragFeature(state, e, delta);\n\n state.dragMoveLocation = e.lngLat;\n};\n\nDirectSelect.onClick = function(state, e) {\n if (noTarget(e)) return this.clickNoTarget(state, e);\n if (isActiveFeature(e)) return this.clickActiveFeature(state, e);\n if (isInactiveFeature(e)) return this.clickInactive(state, e);\n this.stopDragging(state);\n};\n\nDirectSelect.onTap = function(state, e) {\n if (noTarget(e)) return this.clickNoTarget(state, e);\n if (isActiveFeature(e)) return this.clickActiveFeature(state, e);\n if (isInactiveFeature(e)) return this.clickInactive(state, e);\n};\n\nDirectSelect.onTouchEnd = DirectSelect.onMouseUp = function(state) {\n if (state.dragMoving) {\n this.fireUpdate();\n }\n this.stopDragging(state);\n};\n\nexport default DirectSelect;\n\n","import * as CommonSelectors from '../lib/common_selectors.js';\nimport * as Constants from '../constants.js';\n\nconst DrawPoint = {};\n\nDrawPoint.onSetup = function() {\n const point = this.newFeature({\n type: Constants.geojsonTypes.FEATURE,\n properties: {},\n geometry: {\n type: Constants.geojsonTypes.POINT,\n coordinates: []\n }\n });\n\n this.addFeature(point);\n\n this.clearSelectedFeatures();\n this.updateUIClasses({ mouse: Constants.cursors.ADD });\n this.activateUIButton(Constants.types.POINT);\n\n this.setActionableState({\n trash: true\n });\n\n return { point };\n};\n\nDrawPoint.stopDrawingAndRemove = function(state) {\n this.deleteFeature([state.point.id], { silent: true });\n this.changeMode(Constants.modes.SIMPLE_SELECT);\n};\n\nDrawPoint.onTap = DrawPoint.onClick = function(state, e) {\n this.updateUIClasses({ mouse: Constants.cursors.MOVE });\n state.point.updateCoordinate('', e.lngLat.lng, e.lngLat.lat);\n this.fire(Constants.events.CREATE, {\n features: [state.point.toGeoJSON()]\n });\n this.changeMode(Constants.modes.SIMPLE_SELECT, { featureIds: [state.point.id] });\n};\n\nDrawPoint.onStop = function(state) {\n this.activateUIButton();\n if (!state.point.getCoordinate().length) {\n this.deleteFeature([state.point.id], { silent: true });\n }\n};\n\nDrawPoint.toDisplayFeatures = function(state, geojson, display) {\n // Never render the point we're drawing\n const isActivePoint = geojson.properties.id === state.point.id;\n geojson.properties.active = (isActivePoint) ? Constants.activeStates.ACTIVE : Constants.activeStates.INACTIVE;\n if (!isActivePoint) return display(geojson);\n};\n\nDrawPoint.onTrash = DrawPoint.stopDrawingAndRemove;\n\nDrawPoint.onKeyUp = function(state, e) {\n if (CommonSelectors.isEscapeKey(e) || CommonSelectors.isEnterKey(e)) {\n return this.stopDrawingAndRemove(state, e);\n }\n};\n\nexport default DrawPoint;\n","function isEventAtCoordinates(event, coordinates) {\n if (!event.lngLat) return false;\n return event.lngLat.lng === coordinates[0] && event.lngLat.lat === coordinates[1];\n}\n\nexport default isEventAtCoordinates;\n","import * as CommonSelectors from '../lib/common_selectors.js';\nimport doubleClickZoom from '../lib/double_click_zoom.js';\nimport * as Constants from '../constants.js';\nimport isEventAtCoordinates from '../lib/is_event_at_coordinates.js';\nimport createVertex from '../lib/create_vertex.js';\n\nconst DrawPolygon = {};\n\nDrawPolygon.onSetup = function() {\n const polygon = this.newFeature({\n type: Constants.geojsonTypes.FEATURE,\n properties: {},\n geometry: {\n type: Constants.geojsonTypes.POLYGON,\n coordinates: [[]]\n }\n });\n\n this.addFeature(polygon);\n\n this.clearSelectedFeatures();\n doubleClickZoom.disable(this);\n this.updateUIClasses({ mouse: Constants.cursors.ADD });\n this.activateUIButton(Constants.types.POLYGON);\n this.setActionableState({\n trash: true\n });\n\n return {\n polygon,\n currentVertexPosition: 0\n };\n};\n\nDrawPolygon.clickAnywhere = function(state, e) {\n if (state.currentVertexPosition > 0 && isEventAtCoordinates(e, state.polygon.coordinates[0][state.currentVertexPosition - 1])) {\n return this.changeMode(Constants.modes.SIMPLE_SELECT, { featureIds: [state.polygon.id] });\n }\n this.updateUIClasses({ mouse: Constants.cursors.ADD });\n state.polygon.updateCoordinate(`0.${state.currentVertexPosition}`, e.lngLat.lng, e.lngLat.lat);\n state.currentVertexPosition++;\n state.polygon.updateCoordinate(`0.${state.currentVertexPosition}`, e.lngLat.lng, e.lngLat.lat);\n};\n\nDrawPolygon.clickOnVertex = function(state) {\n return this.changeMode(Constants.modes.SIMPLE_SELECT, { featureIds: [state.polygon.id] });\n};\n\nDrawPolygon.onMouseMove = function(state, e) {\n state.polygon.updateCoordinate(`0.${state.currentVertexPosition}`, e.lngLat.lng, e.lngLat.lat);\n if (CommonSelectors.isVertex(e)) {\n this.updateUIClasses({ mouse: Constants.cursors.POINTER });\n }\n};\n\nDrawPolygon.onTap = DrawPolygon.onClick = function(state, e) {\n if (CommonSelectors.isVertex(e)) return this.clickOnVertex(state, e);\n return this.clickAnywhere(state, e);\n};\n\nDrawPolygon.onKeyUp = function(state, e) {\n if (CommonSelectors.isEscapeKey(e)) {\n this.deleteFeature([state.polygon.id], { silent: true });\n this.changeMode(Constants.modes.SIMPLE_SELECT);\n } else if (CommonSelectors.isEnterKey(e)) {\n this.changeMode(Constants.modes.SIMPLE_SELECT, { featureIds: [state.polygon.id] });\n }\n};\n\nDrawPolygon.onStop = function(state) {\n this.updateUIClasses({ mouse: Constants.cursors.NONE });\n doubleClickZoom.enable(this);\n this.activateUIButton();\n\n // check to see if we've deleted this feature\n if (this.getFeature(state.polygon.id) === undefined) return;\n\n //remove last added coordinate\n state.polygon.removeCoordinate(`0.${state.currentVertexPosition}`);\n if (state.polygon.isValid()) {\n this.fire(Constants.events.CREATE, {\n features: [state.polygon.toGeoJSON()]\n });\n } else {\n this.deleteFeature([state.polygon.id], { silent: true });\n this.changeMode(Constants.modes.SIMPLE_SELECT, {}, { silent: true });\n }\n};\n\nDrawPolygon.toDisplayFeatures = function(state, geojson, display) {\n const isActivePolygon = geojson.properties.id === state.polygon.id;\n geojson.properties.active = (isActivePolygon) ? Constants.activeStates.ACTIVE : Constants.activeStates.INACTIVE;\n if (!isActivePolygon) return display(geojson);\n\n // Don't render a polygon until it has two positions\n // (and a 3rd which is just the first repeated)\n if (geojson.geometry.coordinates.length === 0) return;\n\n const coordinateCount = geojson.geometry.coordinates[0].length;\n // 2 coordinates after selecting a draw type\n // 3 after creating the first point\n if (coordinateCount < 3) {\n return;\n }\n geojson.properties.meta = Constants.meta.FEATURE;\n display(createVertex(state.polygon.id, geojson.geometry.coordinates[0][0], '0.0', false));\n if (coordinateCount > 3) {\n // Add a start position marker to the map, clicking on this will finish the feature\n // This should only be shown when we're in a valid spot\n const endPos = geojson.geometry.coordinates[0].length - 3;\n display(createVertex(state.polygon.id, geojson.geometry.coordinates[0][endPos], `0.${endPos}`, false));\n }\n if (coordinateCount <= 4) {\n // If we've only drawn two positions (plus the closer),\n // make a LineString instead of a Polygon\n const lineCoordinates = [\n [geojson.geometry.coordinates[0][0][0], geojson.geometry.coordinates[0][0][1]], [geojson.geometry.coordinates[0][1][0], geojson.geometry.coordinates[0][1][1]]\n ];\n // create an initial vertex so that we can track the first point on mobile devices\n display({\n type: Constants.geojsonTypes.FEATURE,\n properties: geojson.properties,\n geometry: {\n coordinates: lineCoordinates,\n type: Constants.geojsonTypes.LINE_STRING\n }\n });\n if (coordinateCount === 3) {\n return;\n }\n }\n // render the Polygon\n return display(geojson);\n};\n\nDrawPolygon.onTrash = function(state) {\n this.deleteFeature([state.polygon.id], { silent: true });\n this.changeMode(Constants.modes.SIMPLE_SELECT);\n};\n\nexport default DrawPolygon;\n","import * as CommonSelectors from '../lib/common_selectors.js';\nimport isEventAtCoordinates from '../lib/is_event_at_coordinates.js';\nimport doubleClickZoom from '../lib/double_click_zoom.js';\nimport * as Constants from '../constants.js';\nimport createVertex from '../lib/create_vertex.js';\n\nconst DrawLineString = {};\n\nDrawLineString.onSetup = function(opts) {\n opts = opts || {};\n const featureId = opts.featureId;\n\n let line, currentVertexPosition;\n let direction = 'forward';\n if (featureId) {\n line = this.getFeature(featureId);\n if (!line) {\n throw new Error('Could not find a feature with the provided featureId');\n }\n let from = opts.from;\n if (from && from.type === 'Feature' && from.geometry && from.geometry.type === 'Point') {\n from = from.geometry;\n }\n if (from && from.type === 'Point' && from.coordinates && from.coordinates.length === 2) {\n from = from.coordinates;\n }\n if (!from || !Array.isArray(from)) {\n throw new Error('Please use the `from` property to indicate which point to continue the line from');\n }\n const lastCoord = line.coordinates.length - 1;\n if (line.coordinates[lastCoord][0] === from[0] && line.coordinates[lastCoord][1] === from[1]) {\n currentVertexPosition = lastCoord + 1;\n // add one new coordinate to continue from\n line.addCoordinate(currentVertexPosition, ...line.coordinates[lastCoord]);\n } else if (line.coordinates[0][0] === from[0] && line.coordinates[0][1] === from[1]) {\n direction = 'backwards';\n currentVertexPosition = 0;\n // add one new coordinate to continue from\n line.addCoordinate(currentVertexPosition, ...line.coordinates[0]);\n } else {\n throw new Error('`from` should match the point at either the start or the end of the provided LineString');\n }\n } else {\n line = this.newFeature({\n type: Constants.geojsonTypes.FEATURE,\n properties: {},\n geometry: {\n type: Constants.geojsonTypes.LINE_STRING,\n coordinates: []\n }\n });\n currentVertexPosition = 0;\n this.addFeature(line);\n }\n\n this.clearSelectedFeatures();\n doubleClickZoom.disable(this);\n this.updateUIClasses({ mouse: Constants.cursors.ADD });\n this.activateUIButton(Constants.types.LINE);\n this.setActionableState({\n trash: true\n });\n\n return {\n line,\n currentVertexPosition,\n direction\n };\n};\n\nDrawLineString.clickAnywhere = function(state, e) {\n if (state.currentVertexPosition > 0 && isEventAtCoordinates(e, state.line.coordinates[state.currentVertexPosition - 1]) ||\n state.direction === 'backwards' && isEventAtCoordinates(e, state.line.coordinates[state.currentVertexPosition + 1])) {\n return this.changeMode(Constants.modes.SIMPLE_SELECT, { featureIds: [state.line.id] });\n }\n this.updateUIClasses({ mouse: Constants.cursors.ADD });\n state.line.updateCoordinate(state.currentVertexPosition, e.lngLat.lng, e.lngLat.lat);\n if (state.direction === 'forward') {\n state.currentVertexPosition++;\n state.line.updateCoordinate(state.currentVertexPosition, e.lngLat.lng, e.lngLat.lat);\n } else {\n state.line.addCoordinate(0, e.lngLat.lng, e.lngLat.lat);\n }\n};\n\nDrawLineString.clickOnVertex = function(state) {\n return this.changeMode(Constants.modes.SIMPLE_SELECT, { featureIds: [state.line.id] });\n};\n\nDrawLineString.onMouseMove = function(state, e) {\n state.line.updateCoordinate(state.currentVertexPosition, e.lngLat.lng, e.lngLat.lat);\n if (CommonSelectors.isVertex(e)) {\n this.updateUIClasses({ mouse: Constants.cursors.POINTER });\n }\n};\n\nDrawLineString.onTap = DrawLineString.onClick = function(state, e) {\n if (CommonSelectors.isVertex(e)) return this.clickOnVertex(state, e);\n this.clickAnywhere(state, e);\n};\n\nDrawLineString.onKeyUp = function(state, e) {\n if (CommonSelectors.isEnterKey(e)) {\n this.changeMode(Constants.modes.SIMPLE_SELECT, { featureIds: [state.line.id] });\n } else if (CommonSelectors.isEscapeKey(e)) {\n this.deleteFeature([state.line.id], { silent: true });\n this.changeMode(Constants.modes.SIMPLE_SELECT);\n }\n};\n\nDrawLineString.onStop = function(state) {\n doubleClickZoom.enable(this);\n this.activateUIButton();\n\n // check to see if we've deleted this feature\n if (this.getFeature(state.line.id) === undefined) return;\n\n //remove last added coordinate\n state.line.removeCoordinate(`${state.currentVertexPosition}`);\n if (state.line.isValid()) {\n this.fire(Constants.events.CREATE, {\n features: [state.line.toGeoJSON()]\n });\n } else {\n this.deleteFeature([state.line.id], { silent: true });\n this.changeMode(Constants.modes.SIMPLE_SELECT, {}, { silent: true });\n }\n};\n\nDrawLineString.onTrash = function(state) {\n this.deleteFeature([state.line.id], { silent: true });\n this.changeMode(Constants.modes.SIMPLE_SELECT);\n};\n\nDrawLineString.toDisplayFeatures = function(state, geojson, display) {\n const isActiveLine = geojson.properties.id === state.line.id;\n geojson.properties.active = (isActiveLine) ? Constants.activeStates.ACTIVE : Constants.activeStates.INACTIVE;\n if (!isActiveLine) return display(geojson);\n // Only render the line if it has at least one real coordinate\n if (geojson.geometry.coordinates.length < 2) return;\n geojson.properties.meta = Constants.meta.FEATURE;\n display(createVertex(\n state.line.id,\n geojson.geometry.coordinates[state.direction === 'forward' ? geojson.geometry.coordinates.length - 2 : 1],\n `${state.direction === 'forward' ? geojson.geometry.coordinates.length - 2 : 1}`,\n false\n ));\n\n display(geojson);\n};\n\nexport default DrawLineString;\n","\nimport simple_select from './simple_select.js';\nimport direct_select from './direct_select.js';\nimport draw_point from './draw_point.js';\nimport draw_polygon from './draw_polygon.js';\nimport draw_line_string from './draw_line_string.js';\n\nexport default {\n simple_select,\n direct_select,\n draw_point,\n draw_polygon,\n draw_line_string,\n};\n","import * as Constants from './constants.js';\n\nimport styles from './lib/theme.js';\nimport modes from './modes/index.js';\n\nconst defaultOptions = {\n defaultMode: Constants.modes.SIMPLE_SELECT,\n keybindings: true,\n touchEnabled: true,\n clickBuffer: 2,\n touchBuffer: 25,\n boxSelect: true,\n displayControlsDefault: true,\n styles,\n modes,\n controls: {},\n userProperties: false,\n suppressAPIEvents: true\n};\n\nconst showControls = {\n point: true,\n line_string: true,\n polygon: true,\n trash: true,\n combine_features: true,\n uncombine_features: true\n};\n\nconst hideControls = {\n point: false,\n line_string: false,\n polygon: false,\n trash: false,\n combine_features: false,\n uncombine_features: false\n};\n\nfunction addSources(styles, sourceBucket) {\n return styles.map((style) => {\n if (style.source) return style;\n return Object.assign({}, style, {\n id: `${style.id}.${sourceBucket}`,\n source: (sourceBucket === 'hot') ? Constants.sources.HOT : Constants.sources.COLD\n });\n });\n}\n\nexport default function(options = {}) {\n let withDefaults = Object.assign({}, options);\n\n if (!options.controls) {\n withDefaults.controls = {};\n }\n\n if (options.displayControlsDefault === false) {\n withDefaults.controls = Object.assign({}, hideControls, options.controls);\n } else {\n withDefaults.controls = Object.assign({}, showControls, options.controls);\n }\n\n withDefaults = Object.assign({}, defaultOptions, withDefaults);\n\n // Layers with a shared source should be adjacent for performance reasons\n withDefaults.styles = addSources(withDefaults.styles, 'cold').concat(addSources(withDefaults.styles, 'hot'));\n\n return withDefaults;\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","module.exports = normalize;\n\nvar types = {\n Point: 'geometry',\n MultiPoint: 'geometry',\n LineString: 'geometry',\n MultiLineString: 'geometry',\n Polygon: 'geometry',\n MultiPolygon: 'geometry',\n GeometryCollection: 'geometry',\n Feature: 'feature',\n FeatureCollection: 'featurecollection'\n};\n\n/**\n * Normalize a GeoJSON feature into a FeatureCollection.\n *\n * @param {object} gj geojson data\n * @returns {object} normalized geojson data\n */\nfunction normalize(gj) {\n if (!gj || !gj.type) return null;\n var type = types[gj.type];\n if (!type) return null;\n\n if (type === 'geometry') {\n return {\n type: 'FeatureCollection',\n features: [{\n type: 'Feature',\n properties: {},\n geometry: gj\n }]\n };\n } else if (type === 'feature') {\n return {\n type: 'FeatureCollection',\n features: [gj]\n };\n } else if (type === 'featurecollection') {\n return gj;\n }\n}\n","export default function(a, b) {\n if (a.length !== b.length) return false;\n return JSON.stringify(a.map(id => id).sort()) === JSON.stringify(b.map(id => id).sort());\n}\n","import isEqual from 'fast-deep-equal';\nimport normalize from '@mapbox/geojson-normalize';\nimport {generateID} from './lib/id.js';\nimport featuresAt from './lib/features_at.js';\nimport stringSetsAreEqual from './lib/string_sets_are_equal.js';\nimport * as Constants from './constants.js';\nimport StringSet from './lib/string_set.js';\n\nimport Polygon from './feature_types/polygon.js';\nimport LineString from './feature_types/line_string.js';\nimport Point from './feature_types/point.js';\nimport MultiFeature from './feature_types/multi_feature.js';\n\nconst featureTypes = {\n Polygon,\n LineString,\n Point,\n MultiPolygon: MultiFeature,\n MultiLineString: MultiFeature,\n MultiPoint: MultiFeature\n};\n\nexport default function(ctx, api) {\n api.modes = Constants.modes;\n\n // API doesn't emit events by default\n const silent = ctx.options.suppressAPIEvents !== undefined ? !!ctx.options.suppressAPIEvents : true;\n\n api.getFeatureIdsAt = function(point) {\n const features = featuresAt.click({ point }, null, ctx);\n return features.map(feature => feature.properties.id);\n };\n\n api.getSelectedIds = function() {\n return ctx.store.getSelectedIds();\n };\n\n api.getSelected = function() {\n return {\n type: Constants.geojsonTypes.FEATURE_COLLECTION,\n features: ctx.store.getSelectedIds().map(id => ctx.store.get(id)).map(feature => feature.toGeoJSON())\n };\n };\n\n api.getSelectedPoints = function() {\n return {\n type: Constants.geojsonTypes.FEATURE_COLLECTION,\n features: ctx.store.getSelectedCoordinates().map(coordinate => ({\n type: Constants.geojsonTypes.FEATURE,\n properties: {},\n geometry: {\n type: Constants.geojsonTypes.POINT,\n coordinates: coordinate.coordinates\n }\n }))\n };\n };\n\n api.set = function(featureCollection) {\n if (featureCollection.type === undefined || featureCollection.type !== Constants.geojsonTypes.FEATURE_COLLECTION || !Array.isArray(featureCollection.features)) {\n throw new Error('Invalid FeatureCollection');\n }\n const renderBatch = ctx.store.createRenderBatch();\n let toDelete = ctx.store.getAllIds().slice();\n const newIds = api.add(featureCollection);\n const newIdsLookup = new StringSet(newIds);\n\n toDelete = toDelete.filter(id => !newIdsLookup.has(id));\n if (toDelete.length) {\n api.delete(toDelete);\n }\n\n renderBatch();\n return newIds;\n };\n\n api.add = function(geojson) {\n const featureCollection = JSON.parse(JSON.stringify(normalize(geojson)));\n\n const ids = featureCollection.features.map((feature) => {\n feature.id = feature.id || generateID();\n\n if (feature.geometry === null) {\n throw new Error('Invalid geometry: null');\n }\n\n if (ctx.store.get(feature.id) === undefined || ctx.store.get(feature.id).type !== feature.geometry.type) {\n // If the feature has not yet been created ...\n const Model = featureTypes[feature.geometry.type];\n if (Model === undefined) {\n throw new Error(`Invalid geometry type: ${feature.geometry.type}.`);\n }\n const internalFeature = new Model(ctx, feature);\n ctx.store.add(internalFeature, { silent });\n } else {\n // If a feature of that id has already been created, and we are swapping it out ...\n const internalFeature = ctx.store.get(feature.id);\n const originalProperties = internalFeature.properties;\n internalFeature.properties = feature.properties;\n if (!isEqual(originalProperties, feature.properties)) {\n ctx.store.featureChanged(internalFeature.id, { silent });\n }\n if (!isEqual(internalFeature.getCoordinates(), feature.geometry.coordinates)) {\n internalFeature.incomingCoords(feature.geometry.coordinates);\n }\n }\n return feature.id;\n });\n\n ctx.store.render();\n return ids;\n };\n\n\n api.get = function(id) {\n const feature = ctx.store.get(id);\n if (feature) {\n return feature.toGeoJSON();\n }\n };\n\n api.getAll = function() {\n return {\n type: Constants.geojsonTypes.FEATURE_COLLECTION,\n features: ctx.store.getAll().map(feature => feature.toGeoJSON())\n };\n };\n\n api.delete = function(featureIds) {\n ctx.store.delete(featureIds, { silent });\n // If we were in direct select mode and our selected feature no longer exists\n // (because it was deleted), we need to get out of that mode.\n if (api.getMode() === Constants.modes.DIRECT_SELECT && !ctx.store.getSelectedIds().length) {\n ctx.events.changeMode(Constants.modes.SIMPLE_SELECT, undefined, { silent });\n } else {\n ctx.store.render();\n }\n\n return api;\n };\n\n api.deleteAll = function() {\n ctx.store.delete(ctx.store.getAllIds(), { silent });\n // If we were in direct select mode, now our selected feature no longer exists,\n // so escape that mode.\n if (api.getMode() === Constants.modes.DIRECT_SELECT) {\n ctx.events.changeMode(Constants.modes.SIMPLE_SELECT, undefined, { silent });\n } else {\n ctx.store.render();\n }\n\n return api;\n };\n\n api.changeMode = function(mode, modeOptions = {}) {\n // Avoid changing modes just to re-select what's already selected\n if (mode === Constants.modes.SIMPLE_SELECT && api.getMode() === Constants.modes.SIMPLE_SELECT) {\n if (stringSetsAreEqual((modeOptions.featureIds || []), ctx.store.getSelectedIds())) return api;\n // And if we are changing the selection within simple_select mode, just change the selection,\n // instead of stopping and re-starting the mode\n ctx.store.setSelected(modeOptions.featureIds, { silent });\n ctx.store.render();\n return api;\n }\n\n if (mode === Constants.modes.DIRECT_SELECT && api.getMode() === Constants.modes.DIRECT_SELECT &&\n modeOptions.featureId === ctx.store.getSelectedIds()[0]) {\n return api;\n }\n\n ctx.events.changeMode(mode, modeOptions, { silent });\n return api;\n };\n\n api.getMode = function() {\n return ctx.events.getMode();\n };\n\n api.trash = function() {\n ctx.events.trash({ silent });\n return api;\n };\n\n api.combineFeatures = function() {\n ctx.events.combineFeatures({ silent });\n return api;\n };\n\n api.uncombineFeatures = function() {\n ctx.events.uncombineFeatures({ silent });\n return api;\n };\n\n api.setFeatureProperty = function(featureId, property, value) {\n ctx.store.setFeatureProperty(featureId, property, value, { silent });\n return api;\n };\n\n return api;\n}\n","import runSetup from './src/setup.js';\nimport setupOptions from './src/options.js';\nimport setupAPI from './src/api.js';\nimport modes from './src/modes/index.js';\nimport * as Constants from './src/constants.js';\nimport * as lib from './src/lib/index.js';\n\nconst setupDraw = function(options, api) {\n options = setupOptions(options);\n\n const ctx = {\n options\n };\n\n api = setupAPI(ctx, api);\n ctx.api = api;\n\n const setup = runSetup(ctx);\n\n api.onAdd = setup.onAdd;\n api.onRemove = setup.onRemove;\n api.types = Constants.types;\n api.options = options;\n\n return api;\n};\n\nfunction MapboxDraw(options) {\n setupDraw(options, this);\n}\n\nMapboxDraw.modes = modes;\nMapboxDraw.constants = Constants;\nMapboxDraw.lib = lib;\n\nexport default MapboxDraw;\n"],"names":["require$$0","modes","events","LAT_MIN","LAT_RENDERED_MIN","LAT_MAX","LAT_RENDERED_MAX","LNG_MIN","LNG_MAX","Constants.geojsonTypes","Constants.meta","featuresAt","Constants.cursors","Constants.activeStates","Point","MultiPoint","MultiLineString","MultiPolygon","getFeaturesAndSetCursor","Constants.classes","Constants.modes","setupModeHandler","Constants.events","Constants.sources","Constants.updateActions","Constants.interactions","Constants.types","isVertex","Constants.LAT_RENDERED_MAX","Constants.LAT_RENDERED_MIN","isFeature","CommonSelectors.isFeature","CommonSelectors.noTarget","CommonSelectors.isOfMetaType","CommonSelectors.isShiftDown","CommonSelectors.isActiveFeature","CommonSelectors.isShiftMousedown","CommonSelectors.isEscapeKey","CommonSelectors.isEnterKey","CommonSelectors.isVertex","simple_select","direct_select","draw_point","draw_polygon","draw_line_string"],"mappings":"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","x_google_ignoreList":[1,2,12,30,46,47]}