Newer
Older
DH_Apicture / public / static / libs / mapbox / extend / mapbox-gl-draw.js
@zhangqy zhangqy 29 days ago 122 KB first commit
!function (t, e) {
    "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).mapboxgl1.MapboxDraw = e()
}(this, (function () {
    "use strict";
    const css = `
/* Override default control style */
.mapbox-gl-draw_ctrl-bottom-left,
.mapbox-gl-draw_ctrl-top-left {
  margin-left:0;
  border-radius:0 4px 4px 0;
}
.mapbox-gl-draw_ctrl-top-right,
.mapbox-gl-draw_ctrl-bottom-right {
  margin-right:0;
  border-radius:4px 0 0 4px;
}

.mapbox-gl-draw_ctrl-draw-btn {
  border-color:rgba(0,0,0,0.9);
  color:rgba(255,255,255,0.5);
  width:30px;
  height:30px;
}

.mapbox-gl-draw_ctrl-draw-btn.active,
.mapbox-gl-draw_ctrl-draw-btn.active:hover {
  background-color:rgb(0 0 0/5%);
}
.mapbox-gl-draw_ctrl-draw-btn {
  background-repeat: no-repeat;
  background-position: center;
}

.mapbox-gl-draw_point {
  background-image: url('data:image/svg+xml;utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="20" height="20">%3Cpath d="m10 2c-3.3 0-6 2.7-6 6s6 9 6 9 6-5.7 6-9-2.7-6-6-6zm0 2c2.1 0 3.8 1.7 3.8 3.8 0 1.5-1.8 3.9-2.9 5.2h-1.7c-1.1-1.4-2.9-3.8-2.9-5.2-.1-2.1 1.6-3.8 3.7-3.8z"/>%3C/svg>');
}
.mapbox-gl-draw_polygon {
  background-image: url('data:image/svg+xml;utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="20" height="20">%3Cpath d="m15 12.3v-4.6c.6-.3 1-1 1-1.7 0-1.1-.9-2-2-2-.7 0-1.4.4-1.7 1h-4.6c-.3-.6-1-1-1.7-1-1.1 0-2 .9-2 2 0 .7.4 1.4 1 1.7v4.6c-.6.3-1 1-1 1.7 0 1.1.9 2 2 2 .7 0 1.4-.4 1.7-1h4.6c.3.6 1 1 1.7 1 1.1 0 2-.9 2-2 0-.7-.4-1.4-1-1.7zm-8-.3v-4l1-1h4l1 1v4l-1 1h-4z"/>%3C/svg>');
}
.mapbox-gl-draw_line {
  background-image: url('data:image/svg+xml;utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="20" height="20">%3Cpath d="m13.5 3.5c-1.4 0-2.5 1.1-2.5 2.5 0 .3 0 .6.2.9l-3.8 3.8c-.3-.1-.6-.2-.9-.2-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5 2.5-1.1 2.5-2.5c0-.3 0-.6-.2-.9l3.8-3.8c.3.1.6.2.9.2 1.4 0 2.5-1.1 2.5-2.5s-1.1-2.5-2.5-2.5z"/>%3C/svg>');
}
.mapbox-gl-draw_trash {
  background-image: url('data:image/svg+xml;utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="20" height="20">%3Cpath d="M10,3.4 c-0.8,0-1.5,0.5-1.8,1.2H5l-1,1v1h12v-1l-1-1h-3.2C11.5,3.9,10.8,3.4,10,3.4z M5,8v7c0,1,1,2,2,2h6c1,0,2-1,2-2V8h-2v5.5h-1.5V8h-3 v5.5H7V8H5z"/>%3C/svg>');
}
.mapbox-gl-draw_uncombine {
  background-image: url('data:image/svg+xml;utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="20" height="20">%3Cpath d="m12 2c-.3 0-.5.1-.7.3l-1 1c-.4.4-.4 1 0 1.4l1 1c.4.4 1 .4 1.4 0l1-1c.4-.4.4-1 0-1.4l-1-1c-.2-.2-.4-.3-.7-.3zm4 4c-.3 0-.5.1-.7.3l-1 1c-.4.4-.4 1 0 1.4l1 1c.4.4 1 .4 1.4 0l1-1c.4-.4.4-1 0-1.4l-1-1c-.2-.2-.4-.3-.7-.3zm-7 1c-1 0-1 1-.5 1.5.3.3 1 1 1 1l-1 1s-.5.5 0 1 1 0 1 0l1-1 1 1c.5.5 1.5.5 1.5-.5v-4zm-5 3c-.3 0-.5.1-.7.3l-1 1c-.4.4-.4 1 0 1.4l4.9 4.9c.4.4 1 .4 1.4 0l1-1c.4-.4.4-1 0-1.4l-4.9-4.9c-.1-.2-.4-.3-.7-.3z"/>%3C/svg>');
}
.mapbox-gl-draw_combine {
  background-image: url('data:image/svg+xml;utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="20" height="20">%3Cpath d="M12.1,2c-0.3,0-0.5,0.1-0.7,0.3l-1,1c-0.4,0.4-0.4,1,0,1.4l4.9,4.9c0.4,0.4,1,0.4,1.4,0l1-1 c0.4-0.4,0.4-1,0-1.4l-4.9-4.9C12.6,2.1,12.3,2,12.1,2z M8,8C7,8,7,9,7.5,9.5c0.3,0.3,1,1,1,1l-1,1c0,0-0.5,0.5,0,1s1,0,1,0l1-1l1,1 C11,13,12,13,12,12V8H8z M4,10c-0.3,0-0.5,0.1-0.7,0.3l-1,1c-0.4,0.4-0.4,1,0,1.4l1,1c0.4,0.4,1,0.4,1.4,0l1-1c0.4-0.4,0.4-1,0-1.4 l-1-1C4.5,10.1,4.3,10,4,10z M8,14c-0.3,0-0.5,0.1-0.7,0.3l-1,1c-0.4,0.4-0.4,1,0,1.4l1,1c0.4,0.4,1,0.4,1.4,0l1-1 c0.4-0.4,0.4-1,0-1.4l-1-1C8.5,14.1,8.3,14,8,14z"/>%3C/svg>');
}

.mapboxgl-map.mouse-pointer .mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: pointer;
}
.mapboxgl-map.mouse-move .mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: move;
}
.mapboxgl-map.mouse-add .mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: crosshair;
}
.mapboxgl-map.mouse-move.mode-direct_select .mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: grab;
  cursor: -moz-grab;
  cursor: -webkit-grab;
}
.mapboxgl-map.mode-direct_select.feature-vertex.mouse-move .mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: move;
}
.mapboxgl-map.mode-direct_select.feature-midpoint.mouse-pointer .mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: cell;
}
.mapboxgl-map.mode-direct_select.feature-feature.mouse-move .mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: move;
}
.mapboxgl-map.mode-static.mouse-pointer  .mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: grab;
  cursor: -moz-grab;
  cursor: -webkit-grab;
}

.mapbox-gl-draw_boxselect {
    pointer-events: none;
    position: absolute;
    top: 0;
    left: 0;
    width: 0;
    height: 0;
    background: rgba(0,0,0,.1);
    border: 2px dotted #fff;
    opacity: 0.5;
}`;
    document.write(`<style type='text/css'>${css}</style>`);
    var t = function (t, e) {
        var n = {
            drag: [],
            click: [],
            mousemove: [],
            mousedown: [],
            mouseup: [],
            mouseout: [],
            keydown: [],
            keyup: [],
            touchstart: [],
            touchmove: [],
            touchend: [],
            tap: []
        }, o = {
            on: function (t, e, o) {
                if (void 0 === n[t]) throw new Error("Invalid event type: " + t);
                n[t].push({selector: e, fn: o})
            }, render: function (t) {
                e.store.featureChanged(t)
            }
        }, r = function (t, r) {
            for (var i = n[t], a = i.length; a--;) {
                var s = i[a];
                if (s.selector(r)) {
                    s.fn.call(o, r) || e.store.render(), e.ui.updateMapClasses();
                    break
                }
            }
        };
        return t.start.call(o), {
            render: t.render, stop: function () {
                t.stop && t.stop()
            }, trash: function () {
                t.trash && (t.trash(), e.store.render())
            }, combineFeatures: function () {
                t.combineFeatures && t.combineFeatures()
            }, uncombineFeatures: function () {
                t.uncombineFeatures && t.uncombineFeatures()
            }, drag: function (t) {
                r("drag", t)
            }, click: function (t) {
                r("click", t)
            }, mousemove: function (t) {
                r("mousemove", t)
            }, mousedown: function (t) {
                r("mousedown", t)
            }, mouseup: function (t) {
                r("mouseup", t)
            }, mouseout: function (t) {
                r("mouseout", t)
            }, keydown: function (t) {
                r("keydown", t)
            }, keyup: function (t) {
                r("keyup", t)
            }, touchstart: function (t) {
                r("touchstart", t)
            }, touchmove: function (t) {
                r("touchmove", t)
            }, touchend: function (t) {
                r("touchend", t)
            }, tap: function (t) {
                r("tap", t)
            }
        }
    };

    function e(t) {
        if (t.__esModule) return t;
        var e = t.default;
        if ("function" == typeof e) {
            var n = function t() {
                if (this instanceof t) {
                    var n = [null];
                    n.push.apply(n, arguments);
                    var o = Function.bind.apply(e, n);
                    return new o
                }
                return e.apply(this, arguments)
            };
            n.prototype = e.prototype
        } else n = {};
        return Object.defineProperty(n, "__esModule", {value: !0}), Object.keys(t).forEach((function (e) {
            var o = Object.getOwnPropertyDescriptor(t, e);
            Object.defineProperty(n, e, o.get ? o : {
                enumerable: !0, get: function () {
                    return t[e]
                }
            })
        })), n
    }

    var n = {}, o = {RADIUS: 6378137, FLATTENING: 1 / 298.257223563, POLAR_RADIUS: 6356752.3142}, r = o;

    function i(t) {
        var e = 0;
        if (t && t.length > 0) {
            e += Math.abs(a(t[0]));
            for (var n = 1; n < t.length; n++) e -= Math.abs(a(t[n]))
        }
        return e
    }

    function a(t) {
        var e, n, o, i, a, u, c = 0, l = t.length;
        if (l > 2) {
            for (u = 0; u < l; u++) u === l - 2 ? (o = l - 2, i = l - 1, a = 0) : u === l - 1 ? (o = l - 1, i = 0, a = 1) : (o = u, i = u + 1, a = u + 2), e = t[o], n = t[i], c += (s(t[a][0]) - s(e[0])) * Math.sin(s(n[1]));
            c = c * r.RADIUS * r.RADIUS / 2
        }
        return c
    }

    function s(t) {
        return t * Math.PI / 180
    }

    n.geometry = function t(e) {
        var n, o = 0;
        switch (e.type) {
            case"Polygon":
                return i(e.coordinates);
            case"MultiPolygon":
                for (n = 0; n < e.coordinates.length; n++) o += i(e.coordinates[n]);
                return o;
            case"Point":
            case"MultiPoint":
            case"LineString":
            case"MultiLineString":
                return 0;
            case"GeometryCollection":
                for (n = 0; n < e.geometries.length; n++) o += t(e.geometries[n]);
                return o
        }
    }, n.ring = a;
    var u = {
            CONTROL_BASE: "mapboxgl-ctrl",
            CONTROL_PREFIX: "mapboxgl-ctrl-",
            CONTROL_BUTTON: "mapbox-gl-draw_ctrl-draw-btn",
            CONTROL_BUTTON_LINE: "mapbox-gl-draw_line",
            CONTROL_BUTTON_POLYGON: "mapbox-gl-draw_polygon",
            CONTROL_BUTTON_POINT: "mapbox-gl-draw_point",
            CONTROL_BUTTON_TRASH: "mapbox-gl-draw_trash",
            CONTROL_BUTTON_COMBINE_FEATURES: "mapbox-gl-draw_combine",
            CONTROL_BUTTON_UNCOMBINE_FEATURES: "mapbox-gl-draw_uncombine",
            CONTROL_GROUP: "mapboxgl-ctrl-group",
            ATTRIBUTION: "mapboxgl-ctrl-attrib",
            ACTIVE_BUTTON: "active",
            BOX_SELECT: "mapbox-gl-draw_boxselect"
        }, c = {HOT: "mapbox-gl-draw-hot", COLD: "mapbox-gl-draw-cold"},
        l = {ADD: "add", MOVE: "move", DRAG: "drag", POINTER: "pointer", NONE: "none"},
        d = {POLYGON: "polygon", LINE: "line_string", POINT: "point"}, p = {
            FEATURE: "Feature",
            POLYGON: "Polygon",
            LINE_STRING: "LineString",
            POINT: "Point",
            FEATURE_COLLECTION: "FeatureCollection",
            MULTI_PREFIX: "Multi",
            MULTI_POINT: "MultiPoint",
            MULTI_LINE_STRING: "MultiLineString",
            MULTI_POLYGON: "MultiPolygon"
        }, f = {
            DRAW_LINE_STRING: "draw_line_string",
            DRAW_POLYGON: "draw_polygon",
            DRAW_POINT: "draw_point",
            SIMPLE_SELECT: "simple_select",
            DIRECT_SELECT: "direct_select",
            STATIC: "static"
        }, h = {
            CREATE: "draw.create",
            DELETE: "draw.delete",
            UPDATE: "draw.update",
            SELECTION_CHANGE: "draw.selectionchange",
            MODE_CHANGE: "draw.modechange",
            ACTIONABLE: "draw.actionable",
            RENDER: "draw.render",
            COMBINE_FEATURES: "draw.combine",
            UNCOMBINE_FEATURES: "draw.uncombine"
        }, g = {MOVE: "move", CHANGE_COORDINATES: "change_coordinates"},
        y = {FEATURE: "feature", MIDPOINT: "midpoint", VERTEX: "vertex"}, v = {ACTIVE: "true", INACTIVE: "false"},
        m = ["scrollZoom", "boxZoom", "dragRotate", "dragPan", "keyboard", "doubleClickZoom", "touchZoomRotate"],
        _ = -85, b = Object.freeze({
            __proto__: null,
            classes: u,
            sources: c,
            cursors: l,
            types: d,
            geojsonTypes: p,
            modes: f,
            events: h,
            updateActions: g,
            meta: y,
            activeStates: v,
            interactions: m,
            LAT_MIN: -90,
            LAT_RENDERED_MIN: _,
            LAT_MAX: 90,
            LAT_RENDERED_MAX: 85,
            LNG_MIN: -270,
            LNG_MAX: 270
        }), E = {Point: 0, LineString: 1, MultiLineString: 1, Polygon: 2};

    function T(t, e) {
        var n = E[t.geometry.type] - E[e.geometry.type];
        return 0 === n && t.geometry.type === p.POLYGON ? t.area - e.area : n
    }

    function C(t) {
        return t.map((function (t) {
            return t.geometry.type === p.POLYGON && (t.area = n.geometry({
                type: p.FEATURE,
                property: {},
                geometry: t.geometry
            })), t
        })).sort(T).map((function (t) {
            return delete t.area, t
        }))
    }

    function O(t, e) {
        return void 0 === e && (e = 0), [[t.point.x - e, t.point.y - e], [t.point.x + e, t.point.y + e]]
    }

    function S(t) {
        if (this._items = {}, this._nums = {}, this._length = t ? t.length : 0, t) for (var e = 0, n = t.length; e < n; e++) this.add(t[e]), void 0 !== t[e] && ("string" == typeof t[e] ? this._items[t[e]] = e : this._nums[t[e]] = e)
    }

    S.prototype.add = function (t) {
        return this.has(t) || (this._length++, "string" == typeof t ? this._items[t] = this._length : this._nums[t] = this._length), this
    }, S.prototype.delete = function (t) {
        return !1 === this.has(t) || (this._length--, delete this._items[t], delete this._nums[t]), this
    }, S.prototype.has = function (t) {
        return ("string" == typeof t || "number" == typeof t) && (void 0 !== this._items[t] || void 0 !== this._nums[t])
    }, S.prototype.values = function () {
        var t = this, e = [];
        return Object.keys(this._items).forEach((function (n) {
            e.push({k: n, v: t._items[n]})
        })), Object.keys(this._nums).forEach((function (n) {
            e.push({k: JSON.parse(n), v: t._nums[n]})
        })), e.sort((function (t, e) {
            return t.v - e.v
        })).map((function (t) {
            return t.k
        }))
    }, S.prototype.clear = function () {
        return this._length = 0, this._items = {}, this._nums = {}, this
    };
    var I = [y.FEATURE, y.MIDPOINT, y.VERTEX], x = {
        click: function (t, e, n) {
            return M(t, e, n, n.options.clickBuffer)
        }, touch: function (t, e, n) {
            return M(t, e, n, n.options.touchBuffer)
        }
    };

    function M(t, e, n, o) {
        if (null === n.map) return [];
        var r = t ? O(t, o) : e, i = {};
        n.options.styles && (i.layers = n.options.styles.map((function (t) {
            return t.id
        })));
        var a = n.map.queryRenderedFeatures(r, i).filter((function (t) {
            return -1 !== I.indexOf(t.properties.meta)
        })), s = new S, u = [];
        return a.forEach((function (t) {
            var e = t.properties.id;
            s.has(e) || (s.add(e), u.push(t))
        })), C(u)
    }

    function L(t, e) {
        var n = x.click(t, null, e), o = {mouse: l.NONE};
        return n[0] && (o.mouse = n[0].properties.active === v.ACTIVE ? l.MOVE : l.POINTER, o.feature = n[0].properties.meta), -1 !== e.events.currentModeName().indexOf("draw") && (o.mouse = l.ADD), e.ui.queueMapClasses(o), e.ui.updateMapClasses(), n[0]
    }

    function N(t, e) {
        var n = t.x - e.x, o = t.y - e.y;
        return Math.sqrt(n * n + o * o)
    }

    function A(t, e, n) {
        void 0 === n && (n = {});
        var o = null != n.fineTolerance ? n.fineTolerance : 4, r = null != n.grossTolerance ? n.grossTolerance : 12,
            i = null != n.interval ? n.interval : 500;
        t.point = t.point || e.point, t.time = t.time || e.time;
        var a = N(t.point, e.point);
        return a < o || a < r && e.time - t.time < i
    }

    function P(t, e, n) {
        void 0 === n && (n = {});
        var o = null != n.tolerance ? n.tolerance : 25, r = null != n.interval ? n.interval : 250;
        return t.point = t.point || e.point, t.time = t.time || e.time, N(t.point, e.point) < o && e.time - t.time < r
    }

    var F = {}, w = {
        get exports() {
            return F
        }, set exports(t) {
            F = t
        }
    }.exports = function (t, e) {
        if (e || (e = 16), void 0 === t && (t = 128), t <= 0) return "0";
        for (var n = Math.log(Math.pow(2, t)) / Math.log(e), o = 2; n === 1 / 0; o *= 2) n = Math.log(Math.pow(2, t / o)) / Math.log(e) * o;
        var r = n - Math.floor(n), i = "";
        for (o = 0; o < Math.floor(n); o++) {
            i = Math.floor(Math.random() * e).toString(e) + i
        }
        if (r) {
            var a = Math.pow(e, r);
            i = Math.floor(Math.random() * a).toString(e) + i
        }
        var s = parseInt(i, e);
        return s !== 1 / 0 && s >= Math.pow(2, t) ? w(t, e) : i
    };
    w.rack = function (t, e, n) {
        var o = function (o) {
            var i = 0;
            do {
                if (i++ > 10) {
                    if (!n) throw new Error("too many ID collisions, use more bits");
                    t += n
                }
                var a = w(t, e)
            } while (Object.hasOwnProperty.call(r, a));
            return r[a] = o, a
        }, r = o.hats = {};
        return o.get = function (t) {
            return o.hats[t]
        }, o.set = function (t, e) {
            return o.hats[t] = e, o
        }, o.bits = t || 128, o.base = e || 16, o
    };
    var R = function (t, e) {
        this.ctx = t, this.properties = e.properties || {}, this.coordinates = e.geometry.coordinates, this.id = e.id || F(), this.type = e.geometry.type
    };
    R.prototype.changed = function () {
        this.ctx.store.featureChanged(this.id)
    }, R.prototype.incomingCoords = function (t) {
        this.setCoordinates(t)
    }, R.prototype.setCoordinates = function (t) {
        this.coordinates = t, this.changed()
    }, R.prototype.getCoordinates = function () {
        return JSON.parse(JSON.stringify(this.coordinates))
    }, R.prototype.setProperty = function (t, e) {
        this.properties[t] = e
    }, R.prototype.toGeoJSON = function () {
        return JSON.parse(JSON.stringify({
            id: this.id,
            type: p.FEATURE,
            properties: this.properties,
            geometry: {coordinates: this.getCoordinates(), type: this.type}
        }))
    }, R.prototype.internal = function (t) {
        var e = {id: this.id, meta: y.FEATURE, "meta:type": this.type, active: v.INACTIVE, mode: t};
        if (this.ctx.options.userProperties) for (var n in this.properties) e["user_" + n] = this.properties[n];
        return {type: p.FEATURE, properties: e, geometry: {coordinates: this.getCoordinates(), type: this.type}}
    };
    var k = function (t, e) {
        R.call(this, t, e)
    };
    (k.prototype = Object.create(R.prototype)).isValid = function () {
        return "number" == typeof this.coordinates[0] && "number" == typeof this.coordinates[1]
    }, k.prototype.updateCoordinate = function (t, e, n) {
        this.coordinates = 3 === arguments.length ? [e, n] : [t, e], this.changed()
    }, k.prototype.getCoordinate = function () {
        return this.getCoordinates()
    };
    var D = function (t, e) {
        R.call(this, t, e)
    };
    (D.prototype = Object.create(R.prototype)).isValid = function () {
        return this.coordinates.length > 1
    }, D.prototype.addCoordinate = function (t, e, n) {
        this.changed();
        var o = parseInt(t, 10);
        this.coordinates.splice(o, 0, [e, n])
    }, D.prototype.getCoordinate = function (t) {
        var e = parseInt(t, 10);
        return JSON.parse(JSON.stringify(this.coordinates[e]))
    }, D.prototype.removeCoordinate = function (t) {
        this.changed(), this.coordinates.splice(parseInt(t, 10), 1)
    }, D.prototype.updateCoordinate = function (t, e, n) {
        var o = parseInt(t, 10);
        this.coordinates[o] = [e, n], this.changed()
    };
    var U = function (t, e) {
        R.call(this, t, e), this.coordinates = this.coordinates.map((function (t) {
            return t.slice(0, -1)
        }))
    };
    (U.prototype = Object.create(R.prototype)).isValid = function () {
        return 0 !== this.coordinates.length && this.coordinates.every((function (t) {
            return t.length > 2
        }))
    }, U.prototype.incomingCoords = function (t) {
        this.coordinates = t.map((function (t) {
            return t.slice(0, -1)
        })), this.changed()
    }, U.prototype.setCoordinates = function (t) {
        this.coordinates = t, this.changed()
    }, U.prototype.addCoordinate = function (t, e, n) {
        this.changed();
        var o = t.split(".").map((function (t) {
            return parseInt(t, 10)
        }));
        this.coordinates[o[0]].splice(o[1], 0, [e, n])
    }, U.prototype.removeCoordinate = function (t) {
        this.changed();
        var e = t.split(".").map((function (t) {
            return parseInt(t, 10)
        })), n = this.coordinates[e[0]];
        n && (n.splice(e[1], 1), n.length < 3 && this.coordinates.splice(e[0], 1))
    }, U.prototype.getCoordinate = function (t) {
        var e = t.split(".").map((function (t) {
            return parseInt(t, 10)
        })), n = this.coordinates[e[0]];
        return JSON.parse(JSON.stringify(n[e[1]]))
    }, U.prototype.getCoordinates = function () {
        return this.coordinates.map((function (t) {
            return t.concat([t[0]])
        }))
    }, U.prototype.updateCoordinate = function (t, e, n) {
        this.changed();
        var o = t.split("."), r = parseInt(o[0], 10), i = parseInt(o[1], 10);
        void 0 === this.coordinates[r] && (this.coordinates[r] = []), this.coordinates[r][i] = [e, n]
    };
    var j = {MultiPoint: k, MultiLineString: D, MultiPolygon: U}, V = function (t, e, n, o, r) {
        var i = n.split("."), a = parseInt(i[0], 10), s = i[1] ? i.slice(1).join(".") : null;
        return t[a][e](s, o, r)
    }, B = function (t, e) {
        if (R.call(this, t, e), delete this.coordinates, this.model = j[e.geometry.type], void 0 === this.model) throw new TypeError(e.geometry.type + " is not a valid type");
        this.features = this._coordinatesToFeatures(e.geometry.coordinates)
    };

    function G(t) {
        this.map = t.map, this.drawConfig = JSON.parse(JSON.stringify(t.options || {})), this._ctx = t
    }

    (B.prototype = Object.create(R.prototype))._coordinatesToFeatures = function (t) {
        var e = this, n = this.model.bind(this);
        return t.map((function (t) {
            return new n(e.ctx, {
                id: F(),
                type: p.FEATURE,
                properties: {},
                geometry: {coordinates: t, type: e.type.replace("Multi", "")}
            })
        }))
    }, B.prototype.isValid = function () {
        return this.features.every((function (t) {
            return t.isValid()
        }))
    }, B.prototype.setCoordinates = function (t) {
        this.features = this._coordinatesToFeatures(t), this.changed()
    }, B.prototype.getCoordinate = function (t) {
        return V(this.features, "getCoordinate", t)
    }, B.prototype.getCoordinates = function () {
        return JSON.parse(JSON.stringify(this.features.map((function (t) {
            return t.type === p.POLYGON ? t.getCoordinates() : t.coordinates
        }))))
    }, B.prototype.updateCoordinate = function (t, e, n) {
        V(this.features, "updateCoordinate", t, e, n), this.changed()
    }, B.prototype.addCoordinate = function (t, e, n) {
        V(this.features, "addCoordinate", t, e, n), this.changed()
    }, B.prototype.removeCoordinate = function (t) {
        V(this.features, "removeCoordinate", t), this.changed()
    }, B.prototype.getFeatures = function () {
        return this.features
    }, G.prototype.setSelected = function (t) {
        return this._ctx.store.setSelected(t)
    }, G.prototype.setSelectedCoordinates = function (t) {
        var e = this;
        this._ctx.store.setSelectedCoordinates(t), t.reduce((function (t, n) {
            return void 0 === t[n.feature_id] && (t[n.feature_id] = !0, e._ctx.store.get(n.feature_id).changed()), t
        }), {})
    }, G.prototype.getSelected = function () {
        return this._ctx.store.getSelected()
    }, G.prototype.getSelectedIds = function () {
        return this._ctx.store.getSelectedIds()
    }, G.prototype.isSelected = function (t) {
        return this._ctx.store.isSelected(t)
    }, G.prototype.getFeature = function (t) {
        return this._ctx.store.get(t)
    }, G.prototype.select = function (t) {
        return this._ctx.store.select(t)
    }, G.prototype.deselect = function (t) {
        return this._ctx.store.deselect(t)
    }, G.prototype.deleteFeature = function (t, e) {
        return void 0 === e && (e = {}), this._ctx.store.delete(t, e)
    }, G.prototype.addFeature = function (t) {
        return this._ctx.store.add(t)
    }, G.prototype.clearSelectedFeatures = function () {
        return this._ctx.store.clearSelected()
    }, G.prototype.clearSelectedCoordinates = function () {
        return this._ctx.store.clearSelectedCoordinates()
    }, G.prototype.setActionableState = function (t) {
        void 0 === t && (t = {});
        var e = {
            trash: t.trash || !1,
            combineFeatures: t.combineFeatures || !1,
            uncombineFeatures: t.uncombineFeatures || !1
        };
        return this._ctx.events.actionable(e)
    }, G.prototype.changeMode = function (t, e, n) {
        return void 0 === e && (e = {}), void 0 === n && (n = {}), this._ctx.events.changeMode(t, e, n)
    }, G.prototype.updateUIClasses = function (t) {
        return this._ctx.ui.queueMapClasses(t)
    }, G.prototype.activateUIButton = function (t) {
        return this._ctx.ui.setActiveButton(t)
    }, G.prototype.featuresAt = function (t, e, n) {
        if (void 0 === n && (n = "click"), "click" !== n && "touch" !== n) throw new Error("invalid buffer type");
        return x[n](t, e, this._ctx)
    }, G.prototype.newFeature = function (t) {
        var e = t.geometry.type;
        return e === p.POINT ? new k(this._ctx, t) : e === p.LINE_STRING ? new D(this._ctx, t) : e === p.POLYGON ? new U(this._ctx, t) : new B(this._ctx, t)
    }, G.prototype.isInstanceOf = function (t, e) {
        if (t === p.POINT) return e instanceof k;
        if (t === p.LINE_STRING) return e instanceof D;
        if (t === p.POLYGON) return e instanceof U;
        if ("MultiFeature" === t) return e instanceof B;
        throw new Error("Unknown feature class: " + t)
    }, G.prototype.doRender = function (t) {
        return this._ctx.store.featureChanged(t)
    }, G.prototype.onSetup = function () {
    }, G.prototype.onDrag = function () {
    }, G.prototype.onClick = function () {
    }, G.prototype.onMouseMove = function () {
    }, G.prototype.onMouseDown = function () {
    }, G.prototype.onMouseUp = function () {
    }, G.prototype.onMouseOut = function () {
    }, G.prototype.onKeyUp = function () {
    }, G.prototype.onKeyDown = function () {
    }, G.prototype.onTouchStart = function () {
    }, G.prototype.onTouchMove = function () {
    }, G.prototype.onTouchEnd = function () {
    }, G.prototype.onTap = function () {
    }, G.prototype.onStop = function () {
    }, G.prototype.onTrash = function () {
    }, G.prototype.onCombineFeature = function () {
    }, G.prototype.onUncombineFeature = function () {
    }, G.prototype.toDisplayFeatures = function () {
        throw new Error("You must overwrite toDisplayFeatures")
    };
    var J = {
        drag: "onDrag",
        click: "onClick",
        mousemove: "onMouseMove",
        mousedown: "onMouseDown",
        mouseup: "onMouseUp",
        mouseout: "onMouseOut",
        keyup: "onKeyUp",
        keydown: "onKeyDown",
        touchstart: "onTouchStart",
        touchmove: "onTouchMove",
        touchend: "onTouchEnd",
        tap: "onTap"
    }, z = Object.keys(J);

    function Y(t) {
        var e = Object.keys(t);
        return function (n, o) {
            void 0 === o && (o = {});
            var r = {}, i = e.reduce((function (e, n) {
                return e[n] = t[n], e
            }), new G(n));
            return {
                start: function () {
                    var e = this;
                    r = i.onSetup(o), z.forEach((function (n) {
                        var o, a = J[n], s = function () {
                            return !1
                        };
                        t[a] && (s = function () {
                            return !0
                        }), e.on(n, s, (o = a, function (t) {
                            return i[o](r, t)
                        }))
                    }))
                }, stop: function () {
                    i.onStop(r)
                }, trash: function () {
                    i.onTrash(r)
                }, combineFeatures: function () {
                    i.onCombineFeatures(r)
                }, uncombineFeatures: function () {
                    i.onUncombineFeatures(r)
                }, render: function (t, e) {
                    i.toDisplayFeatures(r, t, e)
                }
            }
        }
    }

    function $(t) {
        return [].concat(t).filter((function (t) {
            return void 0 !== t
        }))
    }

    function q() {
        var t = this;
        if (!(t.ctx.map && void 0 !== t.ctx.map.getSource(c.HOT))) return u();
        var e = t.ctx.events.currentModeName();
        t.ctx.ui.queueMapClasses({mode: e});
        var n = [], o = [];
        t.isDirty ? o = t.getAllIds() : (n = t.getChangedIds().filter((function (e) {
            return void 0 !== t.get(e)
        })), o = t.sources.hot.filter((function (e) {
            return e.properties.id && -1 === n.indexOf(e.properties.id) && void 0 !== t.get(e.properties.id)
        })).map((function (t) {
            return t.properties.id
        }))), t.sources.hot = [];
        var r = t.sources.cold.length;
        t.sources.cold = t.isDirty ? [] : t.sources.cold.filter((function (t) {
            var e = t.properties.id || t.properties.parent;
            return -1 === n.indexOf(e)
        }));
        var i = r !== t.sources.cold.length || o.length > 0;

        function a(n, o) {
            var r = t.get(n).internal(e);
            t.ctx.events.currentModeRender(r, (function (e) {
                t.sources[o].push(e)
            }))
        }

        if (n.forEach((function (t) {
            return a(t, "hot")
        })), o.forEach((function (t) {
            return a(t, "cold")
        })), i && t.ctx.map.getSource(c.COLD).setData({
            type: p.FEATURE_COLLECTION,
            features: t.sources.cold
        }), t.ctx.map.getSource(c.HOT).setData({
            type: p.FEATURE_COLLECTION,
            features: t.sources.hot
        }), t._emitSelectionChange && (t.ctx.map.fire(h.SELECTION_CHANGE, {
            features: t.getSelected().map((function (t) {
                return t.toGeoJSON()
            })), points: t.getSelectedCoordinates().map((function (t) {
                return {type: p.FEATURE, properties: {}, geometry: {type: p.POINT, coordinates: t.coordinates}}
            }))
        }), t._emitSelectionChange = !1), t._deletedFeaturesToEmit.length) {
            var s = t._deletedFeaturesToEmit.map((function (t) {
                return t.toGeoJSON()
            }));
            t._deletedFeaturesToEmit = [], t.ctx.map.fire(h.DELETE, {features: s})
        }

        function u() {
            t.isDirty = !1, t.clearChangedIds()
        }

        u(), t.ctx.map.fire(h.RENDER, {})
    }

    function H(t) {
        var e, n = this;
        this._features = {}, this._featureIds = new S, this._selectedFeatureIds = new S, this._selectedCoordinates = [], this._changedFeatureIds = new S, this._deletedFeaturesToEmit = [], this._emitSelectionChange = !1, this._mapInitialConfig = {}, this.ctx = t, this.sources = {
            hot: [],
            cold: []
        }, this.render = function () {
            e || (e = requestAnimationFrame((function () {
                e = null, q.call(n)
            })))
        }, this.isDirty = !1
    }

    function X(t, e) {
        var n = t._selectedCoordinates.filter((function (e) {
            return t._selectedFeatureIds.has(e.feature_id)
        }));
        t._selectedCoordinates.length === n.length || e.silent || (t._emitSelectionChange = !0), t._selectedCoordinates = n
    }

    H.prototype.createRenderBatch = function () {
        var t = this, e = this.render, n = 0;
        return this.render = function () {
            n++
        }, function () {
            t.render = e, n > 0 && t.render()
        }
    }, H.prototype.setDirty = function () {
        return this.isDirty = !0, this
    }, H.prototype.featureChanged = function (t) {
        return this._changedFeatureIds.add(t), this
    }, H.prototype.getChangedIds = function () {
        return this._changedFeatureIds.values()
    }, H.prototype.clearChangedIds = function () {
        return this._changedFeatureIds.clear(), this
    }, H.prototype.getAllIds = function () {
        return this._featureIds.values()
    }, H.prototype.add = function (t) {
        return this.featureChanged(t.id), this._features[t.id] = t, this._featureIds.add(t.id), this
    }, H.prototype.delete = function (t, e) {
        var n = this;
        return void 0 === e && (e = {}), $(t).forEach((function (t) {
            n._featureIds.has(t) && (n._featureIds.delete(t), n._selectedFeatureIds.delete(t), e.silent || -1 === n._deletedFeaturesToEmit.indexOf(n._features[t]) && n._deletedFeaturesToEmit.push(n._features[t]), delete n._features[t], n.isDirty = !0)
        })), X(this, e), this
    }, H.prototype.get = function (t) {
        return this._features[t]
    }, H.prototype.getAll = function () {
        var t = this;
        return Object.keys(this._features).map((function (e) {
            return t._features[e]
        }))
    }, H.prototype.select = function (t, e) {
        var n = this;
        return void 0 === e && (e = {}), $(t).forEach((function (t) {
            n._selectedFeatureIds.has(t) || (n._selectedFeatureIds.add(t), n._changedFeatureIds.add(t), e.silent || (n._emitSelectionChange = !0))
        })), this
    }, H.prototype.deselect = function (t, e) {
        var n = this;
        return void 0 === e && (e = {}), $(t).forEach((function (t) {
            n._selectedFeatureIds.has(t) && (n._selectedFeatureIds.delete(t), n._changedFeatureIds.add(t), e.silent || (n._emitSelectionChange = !0))
        })), X(this, e), this
    }, H.prototype.clearSelected = function (t) {
        return void 0 === t && (t = {}), this.deselect(this._selectedFeatureIds.values(), {silent: t.silent}), this
    }, H.prototype.setSelected = function (t, e) {
        var n = this;
        return void 0 === e && (e = {}), t = $(t), this.deselect(this._selectedFeatureIds.values().filter((function (e) {
            return -1 === t.indexOf(e)
        })), {silent: e.silent}), this.select(t.filter((function (t) {
            return !n._selectedFeatureIds.has(t)
        })), {silent: e.silent}), this
    }, H.prototype.setSelectedCoordinates = function (t) {
        return this._selectedCoordinates = t, this._emitSelectionChange = !0, this
    }, H.prototype.clearSelectedCoordinates = function () {
        return this._selectedCoordinates = [], this._emitSelectionChange = !0, this
    }, H.prototype.getSelectedIds = function () {
        return this._selectedFeatureIds.values()
    }, H.prototype.getSelected = function () {
        var t = this;
        return this._selectedFeatureIds.values().map((function (e) {
            return t.get(e)
        }))
    }, H.prototype.getSelectedCoordinates = function () {
        var t = this;
        return this._selectedCoordinates.map((function (e) {
            return {coordinates: t.get(e.feature_id).getCoordinate(e.coord_path)}
        }))
    }, H.prototype.isSelected = function (t) {
        return this._selectedFeatureIds.has(t)
    }, H.prototype.setFeatureProperty = function (t, e, n) {
        this.get(t).setProperty(e, n), this.featureChanged(t)
    }, H.prototype.storeMapConfig = function () {
        var t = this;
        m.forEach((function (e) {
            t.ctx.map[e] && (t._mapInitialConfig[e] = t.ctx.map[e].isEnabled())
        }))
    }, H.prototype.restoreMapConfig = function () {
        var t = this;
        Object.keys(this._mapInitialConfig).forEach((function (e) {
            t._mapInitialConfig[e] ? t.ctx.map[e].enable() : t.ctx.map[e].disable()
        }))
    }, H.prototype.getInitialConfigValue = function (t) {
        return void 0 === this._mapInitialConfig[t] || this._mapInitialConfig[t]
    };
    var W = function () {
        for (var t = arguments, e = {}, n = 0; n < arguments.length; n++) {
            var o = t[n];
            for (var r in o) Z.call(o, r) && (e[r] = o[r])
        }
        return e
    }, Z = Object.prototype.hasOwnProperty;
    var K = ["mode", "feature", "mouse"];

    function Q(e) {
        var n = null, o = null, r = {
            onRemove: function () {
                return e.map.off("load", r.connect), clearInterval(o), r.removeLayers(), e.store.restoreMapConfig(), e.ui.removeButtons(), e.events.removeEventListeners(), e.ui.clearMapClasses(), e.map = null, e.container = null, e.store = null, n && n.parentNode && n.parentNode.removeChild(n), n = null, this
            }, connect: function () {
                e.map.off("load", r.connect), clearInterval(o), r.addLayers(), e.store.storeMapConfig(), e.events.addEventListeners()
            }, onAdd: function (i) {
                var a = i.fire;
                return i.fire = function (t, e) {
                    var n = arguments;
                    return 1 === a.length && 1 !== arguments.length && (n = [W({}, {type: t}, e)]), a.apply(i, n)
                }, e.map = i, e.events = function (e) {
                    var n = Object.keys(e.options.modes).reduce((function (t, n) {
                        return t[n] = Y(e.options.modes[n]), t
                    }), {}), o = {}, r = {}, i = {}, a = null, s = null;
                    i.drag = function (t, n) {
                        n({
                            point: t.point,
                            time: (new Date).getTime()
                        }) ? (e.ui.queueMapClasses({mouse: l.DRAG}), s.drag(t)) : t.originalEvent.stopPropagation()
                    }, i.mousedrag = function (t) {
                        i.drag(t, (function (t) {
                            return !A(o, t)
                        }))
                    }, i.touchdrag = function (t) {
                        i.drag(t, (function (t) {
                            return !P(r, t)
                        }))
                    }, i.mousemove = function (t) {
                        if (1 === (void 0 !== t.originalEvent.buttons ? t.originalEvent.buttons : t.originalEvent.which)) return i.mousedrag(t);
                        var n = L(t, e);
                        t.featureTarget = n, s.mousemove(t)
                    }, i.mousedown = function (t) {
                        o = {time: (new Date).getTime(), point: t.point};
                        var n = L(t, e);
                        t.featureTarget = n, s.mousedown(t)
                    }, i.mouseup = function (t) {
                        var n = L(t, e);
                        t.featureTarget = n, A(o, {
                            point: t.point,
                            time: (new Date).getTime()
                        }) ? s.click(t) : s.mouseup(t)
                    }, i.mouseout = function (t) {
                        s.mouseout(t)
                    }, i.touchstart = function (t) {
                        if (e.options.touchEnabled) {
                            r = {time: (new Date).getTime(), point: t.point};
                            var n = x.touch(t, null, e)[0];
                            t.featureTarget = n, s.touchstart(t)
                        }
                    }, i.touchmove = function (t) {
                        if (e.options.touchEnabled) return s.touchmove(t), i.touchdrag(t)
                    }, i.touchend = function (t) {
                        if (e.options.touchEnabled) {
                            var n = x.touch(t, null, e)[0];
                            t.featureTarget = n, P(r, {
                                time: (new Date).getTime(),
                                point: t.point
                            }) ? s.tap(t) : s.touchend(t)
                        }
                    };
                    var u = function (t) {
                        return !(8 === t || 46 === t || t >= 48 && t <= 57)
                    };

                    function c(o, r, i) {
                        void 0 === i && (i = {}), s.stop();
                        var u = n[o];
                        if (void 0 === u) throw new Error(o + " is not valid");
                        a = o;
                        var c = u(e, r);
                        s = t(c, e), i.silent || e.map.fire(h.MODE_CHANGE, {mode: o}), e.store.setDirty(), e.store.render()
                    }

                    i.keydown = function (t) {
                        "mapboxgl-canvas" === (t.srcElement || t.target).classList[0] && (8 !== t.keyCode && 46 !== t.keyCode || !e.options.controls.trash ? u(t.keyCode) ? s.keydown(t) : 49 === t.keyCode && e.options.controls.point ? c(f.DRAW_POINT) : 50 === t.keyCode && e.options.controls.line_string ? c(f.DRAW_LINE_STRING) : 51 === t.keyCode && e.options.controls.polygon && c(f.DRAW_POLYGON) : (t.preventDefault(), s.trash()))
                    }, i.keyup = function (t) {
                        u(t.keyCode) && s.keyup(t)
                    }, i.zoomend = function () {
                        e.store.changeZoom()
                    }, i.data = function (t) {
                        if ("style" === t.dataType) {
                            var n = e.setup, o = e.map, r = e.options, i = e.store;
                            r.styles.some((function (t) {
                                return o.getLayer(t.id)
                            })) || (n.addLayers(), i.setDirty(), i.render())
                        }
                    };
                    var d = {trash: !1, combineFeatures: !1, uncombineFeatures: !1};
                    return {
                        start: function () {
                            a = e.options.defaultMode, s = t(n[a](e), e)
                        }, changeMode: c, actionable: function (t) {
                            var n = !1;
                            Object.keys(t).forEach((function (e) {
                                if (void 0 === d[e]) throw new Error("Invalid action type");
                                d[e] !== t[e] && (n = !0), d[e] = t[e]
                            })), n && e.map.fire(h.ACTIONABLE, {actions: d})
                        }, currentModeName: function () {
                            return a
                        }, currentModeRender: function (t, e) {
                            return s.render(t, e)
                        }, fire: function (t, e) {
                            i[t] && i[t](e)
                        }, addEventListeners: function () {
                            e.map.on("mousemove", i.mousemove), e.map.on("mousedown", i.mousedown), e.map.on("mouseup", i.mouseup), e.map.on("data", i.data), e.map.on("touchmove", i.touchmove, {passive: !0}), e.map.on("touchstart", i.touchstart, {passive: !0}), e.map.on("touchend", i.touchend, {passive: !0}), e.container.addEventListener("mouseout", i.mouseout), e.options.keybindings && (e.container.addEventListener("keydown", i.keydown), e.container.addEventListener("keyup", i.keyup))
                        }, removeEventListeners: function () {
                            e.map.off("mousemove", i.mousemove), e.map.off("mousedown", i.mousedown), e.map.off("mouseup", i.mouseup), e.map.off("data", i.data), e.map.off("touchmove", i.touchmove), e.map.off("touchstart", i.touchstart), e.map.off("touchend", i.touchend), e.container.removeEventListener("mouseout", i.mouseout), e.options.keybindings && (e.container.removeEventListener("keydown", i.keydown), e.container.removeEventListener("keyup", i.keyup))
                        }, trash: function (t) {
                            s.trash(t)
                        }, combineFeatures: function () {
                            s.combineFeatures()
                        }, uncombineFeatures: function () {
                            s.uncombineFeatures()
                        }, getMode: function () {
                            return a
                        }
                    }
                }(e), e.ui = function (t) {
                    var e = {}, n = null, o = {mode: null, feature: null, mouse: null},
                        r = {mode: null, feature: null, mouse: null};

                    function i(t) {
                        r = W(r, t)
                    }

                    function a() {
                        var e, n;
                        if (t.container) {
                            var i = [], a = [];
                            K.forEach((function (t) {
                                r[t] !== o[t] && (i.push(t + "-" + o[t]), null !== r[t] && a.push(t + "-" + r[t]))
                            })), i.length > 0 && (e = t.container.classList).remove.apply(e, i), a.length > 0 && (n = t.container.classList).add.apply(n, a), o = W(o, r)
                        }
                    }

                    function s(t, e) {
                        void 0 === e && (e = {});
                        var o = document.createElement("button");
                        return o.className = u.CONTROL_BUTTON + " " + e.className, o.setAttribute("title", e.title), e.container.appendChild(o), o.addEventListener("click", (function (o) {
                            if (o.preventDefault(), o.stopPropagation(), o.target === n) return c(), void e.onDeactivate();
                            l(t), e.onActivate()
                        }), !0), o
                    }

                    function c() {
                        n && (n.classList.remove(u.ACTIVE_BUTTON), n = null)
                    }

                    function l(t) {
                        c();
                        var o = e[t];
                        o && o && "trash" !== t && (o.classList.add(u.ACTIVE_BUTTON), n = o)
                    }

                    return {
                        setActiveButton: l, queueMapClasses: i, updateMapClasses: a, clearMapClasses: function () {
                            i({mode: null, feature: null, mouse: null}), a()
                        }, addButtons: function () {
                            var n = t.options.controls, o = document.createElement("div");
                            return o.className = u.CONTROL_GROUP + " " + u.CONTROL_BASE, n ? (n[d.LINE] && (e[d.LINE] = s(d.LINE, {
                                container: o,
                                className: u.CONTROL_BUTTON_LINE,
                                title: "LineString tool " + (t.options.keybindings ? "(l)" : ""),
                                onActivate: function () {
                                    return t.events.changeMode(f.DRAW_LINE_STRING)
                                },
                                onDeactivate: function () {
                                    return t.events.trash()
                                }
                            })), n[d.POLYGON] && (e[d.POLYGON] = s(d.POLYGON, {
                                container: o,
                                className: u.CONTROL_BUTTON_POLYGON,
                                title: "Polygon tool " + (t.options.keybindings ? "(p)" : ""),
                                onActivate: function () {
                                    return t.events.changeMode(f.DRAW_POLYGON)
                                },
                                onDeactivate: function () {
                                    return t.events.trash()
                                }
                            })), n[d.POINT] && (e[d.POINT] = s(d.POINT, {
                                container: o,
                                className: u.CONTROL_BUTTON_POINT,
                                title: "Marker tool " + (t.options.keybindings ? "(m)" : ""),
                                onActivate: function () {
                                    return t.events.changeMode(f.DRAW_POINT)
                                },
                                onDeactivate: function () {
                                    return t.events.trash()
                                }
                            })), n.trash && (e.trash = s("trash", {
                                container: o,
                                className: u.CONTROL_BUTTON_TRASH,
                                title: "Delete",
                                onActivate: function () {
                                    t.events.trash()
                                }
                            })), n.combine_features && (e.combine_features = s("combineFeatures", {
                                container: o,
                                className: u.CONTROL_BUTTON_COMBINE_FEATURES,
                                title: "Combine",
                                onActivate: function () {
                                    t.events.combineFeatures()
                                }
                            })), n.uncombine_features && (e.uncombine_features = s("uncombineFeatures", {
                                container: o,
                                className: u.CONTROL_BUTTON_UNCOMBINE_FEATURES,
                                title: "Uncombine",
                                onActivate: function () {
                                    t.events.uncombineFeatures()
                                }
                            })), o) : o
                        }, removeButtons: function () {
                            Object.keys(e).forEach((function (t) {
                                var n = e[t];
                                n.parentNode && n.parentNode.removeChild(n), delete e[t]
                            }))
                        }
                    }
                }(e), e.container = i.getContainer(), e.store = new H(e), n = e.ui.addButtons(), e.options.boxSelect && (i.boxZoom.disable(), i.dragPan.disable(), i.dragPan.enable()), i.loaded() ? r.connect() : (i.on("load", r.connect), o = setInterval((function () {
                    i.loaded() && r.connect()
                }), 16)), e.events.start(), n
            }, addLayers: function () {
                e.map.addSource(c.COLD, {
                    data: {type: p.FEATURE_COLLECTION, features: []},
                    type: "geojson"
                }), e.map.addSource(c.HOT, {
                    data: {type: p.FEATURE_COLLECTION, features: []},
                    type: "geojson"
                }), e.options.styles.forEach((function (t) {
                    e.map.addLayer(t)
                })), e.store.setDirty(!0), e.store.render()
            }, removeLayers: function () {
                e.options.styles.forEach((function (t) {
                    e.map.getLayer(t.id) && e.map.removeLayer(t.id)
                })), e.map.getSource(c.COLD) && e.map.removeSource(c.COLD), e.map.getSource(c.HOT) && e.map.removeSource(c.HOT)
            }
        };
        return e.setup = r, r
    }

    var tt = [{
        id: "gl-draw-polygon-fill-inactive",
        type: "fill",
        filter: ["all", ["==", "active", "false"], ["==", "$type", "Polygon"], ["!=", "mode", "static"]],
        paint: {"fill-color": "#3bb2d0", "fill-outline-color": "#3bb2d0", "fill-opacity": .1}
    }, {
        id: "gl-draw-polygon-fill-active",
        type: "fill",
        filter: ["all", ["==", "active", "true"], ["==", "$type", "Polygon"]],
        paint: {"fill-color": "#fbb03b", "fill-outline-color": "#fbb03b", "fill-opacity": .1}
    }, {
        id: "gl-draw-polygon-midpoint",
        type: "circle",
        filter: ["all", ["==", "$type", "Point"], ["==", "meta", "midpoint"]],
        paint: {"circle-radius": 3, "circle-color": "#fbb03b"}
    }, {
        id: "gl-draw-polygon-stroke-inactive",
        type: "line",
        filter: ["all", ["==", "active", "false"], ["==", "$type", "Polygon"], ["!=", "mode", "static"]],
        layout: {"line-cap": "round", "line-join": "round"},
        paint: {"line-color": "#3bb2d0", "line-width": 2}
    }, {
        id: "gl-draw-polygon-stroke-active",
        type: "line",
        filter: ["all", ["==", "active", "true"], ["==", "$type", "Polygon"]],
        layout: {"line-cap": "round", "line-join": "round"},
        paint: {"line-color": "#fbb03b", "line-dasharray": [.2, 2], "line-width": 2}
    }, {
        id: "gl-draw-line-inactive",
        type: "line",
        filter: ["all", ["==", "active", "false"], ["==", "$type", "LineString"], ["!=", "mode", "static"]],
        layout: {"line-cap": "round", "line-join": "round"},
        paint: {"line-color": "#3bb2d0", "line-width": 2}
    }, {
        id: "gl-draw-line-active",
        type: "line",
        filter: ["all", ["==", "$type", "LineString"], ["==", "active", "true"]],
        layout: {"line-cap": "round", "line-join": "round"},
        paint: {"line-color": "#fbb03b", "line-dasharray": [.2, 2], "line-width": 2}
    }, {
        id: "gl-draw-polygon-and-line-vertex-stroke-inactive",
        type: "circle",
        filter: ["all", ["==", "meta", "vertex"], ["==", "$type", "Point"], ["!=", "mode", "static"]],
        paint: {"circle-radius": 5, "circle-color": "#fff"}
    }, {
        id: "gl-draw-polygon-and-line-vertex-inactive",
        type: "circle",
        filter: ["all", ["==", "meta", "vertex"], ["==", "$type", "Point"], ["!=", "mode", "static"]],
        paint: {"circle-radius": 3, "circle-color": "#fbb03b"}
    }, {
        id: "gl-draw-point-point-stroke-inactive",
        type: "circle",
        filter: ["all", ["==", "active", "false"], ["==", "$type", "Point"], ["==", "meta", "feature"], ["!=", "mode", "static"]],
        paint: {"circle-radius": 5, "circle-opacity": 1, "circle-color": "#fff"}
    }, {
        id: "gl-draw-point-inactive",
        type: "circle",
        filter: ["all", ["==", "active", "false"], ["==", "$type", "Point"], ["==", "meta", "feature"], ["!=", "mode", "static"]],
        paint: {"circle-radius": 3, "circle-color": "#3bb2d0"}
    }, {
        id: "gl-draw-point-stroke-active",
        type: "circle",
        filter: ["all", ["==", "$type", "Point"], ["==", "active", "true"], ["!=", "meta", "midpoint"]],
        paint: {"circle-radius": 7, "circle-color": "#fff"}
    }, {
        id: "gl-draw-point-active",
        type: "circle",
        filter: ["all", ["==", "$type", "Point"], ["!=", "meta", "midpoint"], ["==", "active", "true"]],
        paint: {"circle-radius": 5, "circle-color": "#fbb03b"}
    }, {
        id: "gl-draw-polygon-fill-static",
        type: "fill",
        filter: ["all", ["==", "mode", "static"], ["==", "$type", "Polygon"]],
        paint: {"fill-color": "#404040", "fill-outline-color": "#404040", "fill-opacity": .1}
    }, {
        id: "gl-draw-polygon-stroke-static",
        type: "line",
        filter: ["all", ["==", "mode", "static"], ["==", "$type", "Polygon"]],
        layout: {"line-cap": "round", "line-join": "round"},
        paint: {"line-color": "#404040", "line-width": 2}
    }, {
        id: "gl-draw-line-static",
        type: "line",
        filter: ["all", ["==", "mode", "static"], ["==", "$type", "LineString"]],
        layout: {"line-cap": "round", "line-join": "round"},
        paint: {"line-color": "#404040", "line-width": 2}
    }, {
        id: "gl-draw-point-static",
        type: "circle",
        filter: ["all", ["==", "mode", "static"], ["==", "$type", "Point"]],
        paint: {"circle-radius": 5, "circle-color": "#404040"}
    }];

    function et(t) {
        return function (e) {
            var n = e.featureTarget;
            return !!n && (!!n.properties && n.properties.meta === t)
        }
    }

    function nt(t) {
        return !!t.originalEvent && (!!t.originalEvent.shiftKey && 0 === t.originalEvent.button)
    }

    function ot(t) {
        return !!t.featureTarget && (!!t.featureTarget.properties && (t.featureTarget.properties.active === v.ACTIVE && t.featureTarget.properties.meta === y.FEATURE))
    }

    function rt(t) {
        return !!t.featureTarget && (!!t.featureTarget.properties && (t.featureTarget.properties.active === v.INACTIVE && t.featureTarget.properties.meta === y.FEATURE))
    }

    function it(t) {
        return void 0 === t.featureTarget
    }

    function at(t) {
        return !!t.featureTarget && (!!t.featureTarget.properties && t.featureTarget.properties.meta === y.FEATURE)
    }

    function st(t) {
        var e = t.featureTarget;
        return !!e && (!!e.properties && e.properties.meta === y.VERTEX)
    }

    function ut(t) {
        return !!t.originalEvent && !0 === t.originalEvent.shiftKey
    }

    function ct(t) {
        return 27 === t.keyCode
    }

    function lt(t) {
        return 13 === t.keyCode
    }

    var dt = Object.freeze({
        __proto__: null,
        isOfMetaType: et,
        isShiftMousedown: nt,
        isActiveFeature: ot,
        isInactiveFeature: rt,
        noTarget: it,
        isFeature: at,
        isVertex: st,
        isShiftDown: ut,
        isEscapeKey: ct,
        isEnterKey: lt,
        isTrue: function () {
            return !0
        }
    }), pt = ft;

    function ft(t, e) {
        this.x = t, this.y = e
    }

    function ht(t, e) {
        var n = e.getBoundingClientRect();
        return new pt(t.clientX - n.left - (e.clientLeft || 0), t.clientY - n.top - (e.clientTop || 0))
    }

    function gt(t, e, n, o) {
        return {
            type: p.FEATURE,
            properties: {meta: y.VERTEX, parent: t, coord_path: n, active: o ? v.ACTIVE : v.INACTIVE},
            geometry: {type: p.POINT, coordinates: e}
        }
    }

    function yt(t, e, n) {
        var o = e.geometry.coordinates, r = n.geometry.coordinates;
        if (o[1] > 85 || o[1] < _ || r[1] > 85 || r[1] < _) return null;
        var i = {lng: (o[0] + r[0]) / 2, lat: (o[1] + r[1]) / 2};
        return {
            type: p.FEATURE,
            properties: {meta: y.MIDPOINT, parent: t, lng: i.lng, lat: i.lat, coord_path: n.properties.coord_path},
            geometry: {type: p.POINT, coordinates: [i.lng, i.lat]}
        }
    }

    function vt(t, e, n) {
        void 0 === e && (e = {}), void 0 === n && (n = null);
        var o, r = t.geometry, i = r.type, a = r.coordinates, s = t.properties && t.properties.id, u = [];

        function c(t, n) {
            var o = "", r = null;
            t.forEach((function (t, i) {
                var a = null != n ? n + "." + i : String(i), c = gt(s, t, a, l(a));
                if (e.midpoints && r) {
                    var d = yt(s, r, c);
                    d && u.push(d)
                }
                r = c;
                var p = JSON.stringify(t);
                o !== p && u.push(c), 0 === i && (o = p)
            }))
        }

        function l(t) {
            return !!e.selectedPaths && -1 !== e.selectedPaths.indexOf(t)
        }

        return i === p.POINT ? u.push(gt(s, a, n, l(n))) : i === p.POLYGON ? a.forEach((function (t, e) {
            c(t, null !== n ? n + "." + e : String(e))
        })) : i === p.LINE_STRING ? c(a, n) : 0 === i.indexOf(p.MULTI_PREFIX) && (o = i.replace(p.MULTI_PREFIX, ""), a.forEach((function (n, r) {
            var i = {type: p.FEATURE, properties: t.properties, geometry: {type: o, coordinates: n}};
            u = u.concat(vt(i, e, r))
        }))), u
    }

    ft.prototype = {
        clone: function () {
            return new ft(this.x, this.y)
        }, add: function (t) {
            return this.clone()._add(t)
        }, sub: function (t) {
            return this.clone()._sub(t)
        }, multByPoint: function (t) {
            return this.clone()._multByPoint(t)
        }, divByPoint: function (t) {
            return this.clone()._divByPoint(t)
        }, mult: function (t) {
            return this.clone()._mult(t)
        }, div: function (t) {
            return this.clone()._div(t)
        }, rotate: function (t) {
            return this.clone()._rotate(t)
        }, rotateAround: function (t, e) {
            return this.clone()._rotateAround(t, e)
        }, matMult: function (t) {
            return this.clone()._matMult(t)
        }, unit: function () {
            return this.clone()._unit()
        }, perp: function () {
            return this.clone()._perp()
        }, round: function () {
            return this.clone()._round()
        }, mag: function () {
            return Math.sqrt(this.x * this.x + this.y * this.y)
        }, equals: function (t) {
            return this.x === t.x && this.y === t.y
        }, dist: function (t) {
            return Math.sqrt(this.distSqr(t))
        }, distSqr: function (t) {
            var e = t.x - this.x, n = t.y - this.y;
            return e * e + n * n
        }, angle: function () {
            return Math.atan2(this.y, this.x)
        }, angleTo: function (t) {
            return Math.atan2(this.y - t.y, this.x - t.x)
        }, angleWith: function (t) {
            return this.angleWithSep(t.x, t.y)
        }, angleWithSep: function (t, e) {
            return Math.atan2(this.x * e - this.y * t, this.x * t + this.y * e)
        }, _matMult: function (t) {
            var e = t[0] * this.x + t[1] * this.y, n = t[2] * this.x + t[3] * this.y;
            return this.x = e, this.y = n, this
        }, _add: function (t) {
            return this.x += t.x, this.y += t.y, this
        }, _sub: function (t) {
            return this.x -= t.x, this.y -= t.y, this
        }, _mult: function (t) {
            return this.x *= t, this.y *= t, this
        }, _div: function (t) {
            return this.x /= t, this.y /= t, this
        }, _multByPoint: function (t) {
            return this.x *= t.x, this.y *= t.y, this
        }, _divByPoint: function (t) {
            return this.x /= t.x, this.y /= t.y, this
        }, _unit: function () {
            return this._div(this.mag()), this
        }, _perp: function () {
            var t = this.y;
            return this.y = this.x, this.x = -t, this
        }, _rotate: function (t) {
            var e = Math.cos(t), n = Math.sin(t), o = e * this.x - n * this.y, r = n * this.x + e * this.y;
            return this.x = o, this.y = r, this
        }, _rotateAround: function (t, e) {
            var n = Math.cos(t), o = Math.sin(t), r = e.x + n * (this.x - e.x) - o * (this.y - e.y),
                i = e.y + o * (this.x - e.x) + n * (this.y - e.y);
            return this.x = r, this.y = i, this
        }, _round: function () {
            return this.x = Math.round(this.x), this.y = Math.round(this.y), this
        }
    }, ft.convert = function (t) {
        return t instanceof ft ? t : Array.isArray(t) ? new ft(t[0], t[1]) : t
    };
    var mt = {
        enable: function (t) {
            setTimeout((function () {
                t.map && t.map.doubleClickZoom && t._ctx && t._ctx.store && t._ctx.store.getInitialConfigValue && t._ctx.store.getInitialConfigValue("doubleClickZoom") && t.map.doubleClickZoom.enable()
            }), 0)
        }, disable: function (t) {
            setTimeout((function () {
                t.map && t.map.doubleClickZoom && t.map.doubleClickZoom.disable()
            }), 0)
        }
    }, _t = {}, bt = {
        get exports() {
            return _t
        }, set exports(t) {
            _t = t
        }
    }, Et = function (t) {
        if (!t || !t.type) return null;
        var e = Tt[t.type];
        if (!e) return null;
        if ("geometry" === e) return {
            type: "FeatureCollection",
            features: [{type: "Feature", properties: {}, geometry: t}]
        };
        if ("feature" === e) return {type: "FeatureCollection", features: [t]};
        if ("featurecollection" === e) return t
    }, Tt = {
        Point: "geometry",
        MultiPoint: "geometry",
        LineString: "geometry",
        MultiLineString: "geometry",
        Polygon: "geometry",
        MultiPolygon: "geometry",
        GeometryCollection: "geometry",
        Feature: "feature",
        FeatureCollection: "featurecollection"
    };
    var Ct = Object.freeze({
        __proto__: null, default: function t(e) {
            switch (e && e.type || null) {
                case"FeatureCollection":
                    return e.features = e.features.reduce((function (e, n) {
                        return e.concat(t(n))
                    }), []), e;
                case"Feature":
                    return e.geometry ? t(e.geometry).map((function (t) {
                        var n = {type: "Feature", properties: JSON.parse(JSON.stringify(e.properties)), geometry: t};
                        return void 0 !== e.id && (n.id = e.id), n
                    })) : [e];
                case"MultiPoint":
                    return e.coordinates.map((function (t) {
                        return {type: "Point", coordinates: t}
                    }));
                case"MultiPolygon":
                    return e.coordinates.map((function (t) {
                        return {type: "Polygon", coordinates: t}
                    }));
                case"MultiLineString":
                    return e.coordinates.map((function (t) {
                        return {type: "LineString", coordinates: t}
                    }));
                case"GeometryCollection":
                    return e.geometries.map(t).reduce((function (t, e) {
                        return t.concat(e)
                    }), []);
                case"Point":
                case"Polygon":
                case"LineString":
                    return [e]
            }
        }
    }), Ot = Et, St = e(Ct), It = function (t) {
        return function t(e) {
            if (Array.isArray(e) && e.length && "number" == typeof e[0]) return [e];
            return e.reduce((function (e, n) {
                return Array.isArray(n) && Array.isArray(n[0]) ? e.concat(t(n)) : (e.push(n), e)
            }), [])
        }(t)
    };
    St instanceof Function || (St = St.default);
    var xt = {}, Mt = {
        get exports() {
            return xt
        }, set exports(t) {
            xt = t
        }
    }.exports = function (t) {
        return new Lt(t)
    };

    function Lt(t) {
        this.value = t
    }

    function Nt(t, e, n) {
        var o = [], r = [], i = !0;
        return function t(a) {
            var s = n ? At(a) : a, u = {}, c = !0, l = {
                node: s,
                node_: a,
                path: [].concat(o),
                parent: r[r.length - 1],
                parents: r,
                key: o.slice(-1)[0],
                isRoot: 0 === o.length,
                level: o.length,
                circular: null,
                update: function (t, e) {
                    l.isRoot || (l.parent.node[l.key] = t), l.node = t, e && (c = !1)
                },
                delete: function (t) {
                    delete l.parent.node[l.key], t && (c = !1)
                },
                remove: function (t) {
                    wt(l.parent.node) ? l.parent.node.splice(l.key, 1) : delete l.parent.node[l.key], t && (c = !1)
                },
                keys: null,
                before: function (t) {
                    u.before = t
                },
                after: function (t) {
                    u.after = t
                },
                pre: function (t) {
                    u.pre = t
                },
                post: function (t) {
                    u.post = t
                },
                stop: function () {
                    i = !1
                },
                block: function () {
                    c = !1
                }
            };
            if (!i) return l;

            function d() {
                if ("object" == typeof l.node && null !== l.node) {
                    l.keys && l.node_ === l.node || (l.keys = Pt(l.node)), l.isLeaf = 0 == l.keys.length;
                    for (var t = 0; t < r.length; t++) if (r[t].node_ === a) {
                        l.circular = r[t];
                        break
                    }
                } else l.isLeaf = !0, l.keys = null;
                l.notLeaf = !l.isLeaf, l.notRoot = !l.isRoot
            }

            d();
            var p = e.call(l, l.node);
            return void 0 !== p && l.update && l.update(p), u.before && u.before.call(l, l.node), c ? ("object" != typeof l.node || null === l.node || l.circular || (r.push(l), d(), Rt(l.keys, (function (e, r) {
                o.push(e), u.pre && u.pre.call(l, l.node[e], e);
                var i = t(l.node[e]);
                n && kt.call(l.node, e) && (l.node[e] = i.node), i.isLast = r == l.keys.length - 1, i.isFirst = 0 == r, u.post && u.post.call(l, i), o.pop()
            })), r.pop()), u.after && u.after.call(l, l.node), l) : l
        }(t).node
    }

    function At(t) {
        if ("object" == typeof t && null !== t) {
            var e;
            if (wt(t)) e = []; else if ("[object Date]" === Ft(t)) e = new Date(t.getTime ? t.getTime() : t); else if (function (t) {
                return "[object RegExp]" === Ft(t)
            }(t)) e = new RegExp(t); else if (function (t) {
                return "[object Error]" === Ft(t)
            }(t)) e = {message: t.message}; else if (function (t) {
                return "[object Boolean]" === Ft(t)
            }(t)) e = new Boolean(t); else if (function (t) {
                return "[object Number]" === Ft(t)
            }(t)) e = new Number(t); else if (function (t) {
                return "[object String]" === Ft(t)
            }(t)) e = new String(t); else if (Object.create && Object.getPrototypeOf) e = Object.create(Object.getPrototypeOf(t)); else if (t.constructor === Object) e = {}; else {
                var n = t.constructor && t.constructor.prototype || t.__proto__ || {}, o = function () {
                };
                o.prototype = n, e = new o
            }
            return Rt(Pt(t), (function (n) {
                e[n] = t[n]
            })), e
        }
        return t
    }

    Lt.prototype.get = function (t) {
        for (var e = this.value, n = 0; n < t.length; n++) {
            var o = t[n];
            if (!e || !kt.call(e, o)) {
                e = void 0;
                break
            }
            e = e[o]
        }
        return e
    }, Lt.prototype.has = function (t) {
        for (var e = this.value, n = 0; n < t.length; n++) {
            var o = t[n];
            if (!e || !kt.call(e, o)) return !1;
            e = e[o]
        }
        return !0
    }, Lt.prototype.set = function (t, e) {
        for (var n = this.value, o = 0; o < t.length - 1; o++) {
            var r = t[o];
            kt.call(n, r) || (n[r] = {}), n = n[r]
        }
        return n[t[o]] = e, e
    }, Lt.prototype.map = function (t) {
        return Nt(this.value, t, !0)
    }, Lt.prototype.forEach = function (t) {
        return this.value = Nt(this.value, t, !1), this.value
    }, Lt.prototype.reduce = function (t, e) {
        var n = 1 === arguments.length, o = n ? this.value : e;
        return this.forEach((function (e) {
            this.isRoot && n || (o = t.call(this, o, e))
        })), o
    }, Lt.prototype.paths = function () {
        var t = [];
        return this.forEach((function (e) {
            t.push(this.path)
        })), t
    }, Lt.prototype.nodes = function () {
        var t = [];
        return this.forEach((function (e) {
            t.push(this.node)
        })), t
    }, Lt.prototype.clone = function () {
        var t = [], e = [];
        return function n(o) {
            for (var r = 0; r < t.length; r++) if (t[r] === o) return e[r];
            if ("object" == typeof o && null !== o) {
                var i = At(o);
                return t.push(o), e.push(i), Rt(Pt(o), (function (t) {
                    i[t] = n(o[t])
                })), t.pop(), e.pop(), i
            }
            return o
        }(this.value)
    };
    var Pt = Object.keys || function (t) {
        var e = [];
        for (var n in t) e.push(n);
        return e
    };

    function Ft(t) {
        return Object.prototype.toString.call(t)
    }

    var wt = Array.isArray || function (t) {
        return "[object Array]" === Object.prototype.toString.call(t)
    }, Rt = function (t, e) {
        if (t.forEach) return t.forEach(e);
        for (var n = 0; n < t.length; n++) e(t[n], n, t)
    };
    Rt(Pt(Lt.prototype), (function (t) {
        Mt[t] = function (e) {
            var n = [].slice.call(arguments, 1), o = new Lt(e);
            return o[t].apply(o, n)
        }
    }));
    var kt = Object.hasOwnProperty || function (t, e) {
        return e in t
    }, Dt = Ut;

    function Ut(t) {
        if (!(this instanceof Ut)) return new Ut(t);
        this._bbox = t || [1 / 0, 1 / 0, -1 / 0, -1 / 0], this._valid = !!t
    }

    Ut.prototype.include = function (t) {
        return this._valid = !0, this._bbox[0] = Math.min(this._bbox[0], t[0]), this._bbox[1] = Math.min(this._bbox[1], t[1]), this._bbox[2] = Math.max(this._bbox[2], t[0]), this._bbox[3] = Math.max(this._bbox[3], t[1]), this
    }, Ut.prototype.equals = function (t) {
        var e;
        return e = t instanceof Ut ? t.bbox() : t, this._bbox[0] == e[0] && this._bbox[1] == e[1] && this._bbox[2] == e[2] && this._bbox[3] == e[3]
    }, Ut.prototype.center = function (t) {
        return this._valid ? [(this._bbox[0] + this._bbox[2]) / 2, (this._bbox[1] + this._bbox[3]) / 2] : null
    }, Ut.prototype.union = function (t) {
        var e;
        return this._valid = !0, e = t instanceof Ut ? t.bbox() : t, this._bbox[0] = Math.min(this._bbox[0], e[0]), this._bbox[1] = Math.min(this._bbox[1], e[1]), this._bbox[2] = Math.max(this._bbox[2], e[2]), this._bbox[3] = Math.max(this._bbox[3], e[3]), this
    }, Ut.prototype.bbox = function () {
        return this._valid ? this._bbox : null
    }, Ut.prototype.contains = function (t) {
        if (!t) return this._fastContains();
        if (!this._valid) return null;
        var e = t[0], n = t[1];
        return this._bbox[0] <= e && this._bbox[1] <= n && this._bbox[2] >= e && this._bbox[3] >= n
    }, Ut.prototype.intersect = function (t) {
        return this._valid ? (e = t instanceof Ut ? t.bbox() : t, !(this._bbox[0] > e[2] || this._bbox[2] < e[0] || this._bbox[3] < e[1] || this._bbox[1] > e[3])) : null;
        var e
    }, Ut.prototype._fastContains = function () {
        if (!this._valid) return new Function("return null;");
        var t = "return " + this._bbox[0] + "<= ll[0] &&" + this._bbox[1] + "<= ll[1] &&" + this._bbox[2] + ">= ll[0] &&" + this._bbox[3] + ">= ll[1]";
        return new Function("ll", t)
    }, Ut.prototype.polygon = function () {
        return this._valid ? {
            type: "Polygon",
            coordinates: [[[this._bbox[0], this._bbox[1]], [this._bbox[2], this._bbox[1]], [this._bbox[2], this._bbox[3]], [this._bbox[0], this._bbox[3]], [this._bbox[0], this._bbox[1]]]]
        } : null
    };
    var jt = function (t) {
        if (!t) return [];
        var e = St(Ot(t)), n = [];
        return e.features.forEach((function (t) {
            t.geometry && (n = n.concat(It(t.geometry.coordinates)))
        })), n
    }, Vt = xt, Bt = Dt, Gt = {
        features: ["FeatureCollection"],
        coordinates: ["Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon"],
        geometry: ["Feature"],
        geometries: ["GeometryCollection"]
    }, Jt = Object.keys(Gt);

    function zt(t) {
        for (var e = Bt(), n = jt(t), o = 0; o < n.length; o++) e.include(n[o]);
        return e
    }

    bt.exports = function (t) {
        return zt(t).bbox()
    }, _t.polygon = function (t) {
        return zt(t).polygon()
    }, _t.bboxify = function (t) {
        return Vt(t).map((function (t) {
            t && (Jt.some((function (e) {
                return !!t[e] && -1 !== Gt[e].indexOf(t.type)
            })) && (t.bbox = zt(t).bbox(), this.update(t)))
        }))
    };
    var Yt = -90;

    function $t(t, e) {
        var n = Yt, o = 90, r = Yt, i = 90, a = 270, s = -270;
        t.forEach((function (t) {
            var e = _t(t), u = e[1], c = e[3], l = e[0], d = e[2];
            u > n && (n = u), c < o && (o = c), c > r && (r = c), u < i && (i = u), l < a && (a = l), d > s && (s = d)
        }));
        var u = e;
        return n + u.lat > 85 && (u.lat = 85 - n), r + u.lat > 90 && (u.lat = 90 - r), o + u.lat < -85 && (u.lat = -85 - o), i + u.lat < Yt && (u.lat = Yt - i), a + u.lng <= -270 && (u.lng += 360 * Math.ceil(Math.abs(u.lng) / 360)), s + u.lng >= 270 && (u.lng -= 360 * Math.ceil(Math.abs(u.lng) / 360)), u
    }

    function qt(t, e) {
        var n = $t(t.map((function (t) {
            return t.toGeoJSON()
        })), e);
        t.forEach((function (t) {
            var e, o = t.getCoordinates(), r = function (t) {
                var e = {lng: t[0] + n.lng, lat: t[1] + n.lat};
                return [e.lng, e.lat]
            }, i = function (t) {
                return t.map((function (t) {
                    return r(t)
                }))
            };
            t.type === p.POINT ? e = r(o) : t.type === p.LINE_STRING || t.type === p.MULTI_POINT ? e = o.map(r) : t.type === p.POLYGON || t.type === p.MULTI_LINE_STRING ? e = o.map(i) : t.type === p.MULTI_POLYGON && (e = o.map((function (t) {
                return t.map((function (t) {
                    return i(t)
                }))
            }))), t.incomingCoords(e)
        }))
    }

    var Ht = {
        onSetup: function (t) {
            var e = this, n = {
                dragMoveLocation: null,
                boxSelectStartLocation: null,
                boxSelectElement: void 0,
                boxSelecting: !1,
                canBoxSelect: !1,
                dragMoving: !1,
                canDragMove: !1,
                initiallySelectedFeatureIds: t.featureIds || []
            };
            return this.setSelected(n.initiallySelectedFeatureIds.filter((function (t) {
                return void 0 !== e.getFeature(t)
            }))), this.fireActionable(), this.setActionableState({
                combineFeatures: !0,
                uncombineFeatures: !0,
                trash: !0
            }), n
        }, fireUpdate: function () {
            this.map.fire(h.UPDATE, {
                action: g.MOVE, features: this.getSelected().map((function (t) {
                    return t.toGeoJSON()
                }))
            })
        }, fireActionable: function () {
            var t = this, e = this.getSelected(), n = e.filter((function (e) {
                return t.isInstanceOf("MultiFeature", e)
            })), o = !1;
            if (e.length > 1) {
                o = !0;
                var r = e[0].type.replace("Multi", "");
                e.forEach((function (t) {
                    t.type.replace("Multi", "") !== r && (o = !1)
                }))
            }
            var i = n.length > 0, a = e.length > 0;
            this.setActionableState({combineFeatures: o, uncombineFeatures: i, trash: a})
        }, getUniqueIds: function (t) {
            return t.length ? t.map((function (t) {
                return t.properties.id
            })).filter((function (t) {
                return void 0 !== t
            })).reduce((function (t, e) {
                return t.add(e), t
            }), new S).values() : []
        }, stopExtendedInteractions: function (t) {
            t.boxSelectElement && (t.boxSelectElement.parentNode && t.boxSelectElement.parentNode.removeChild(t.boxSelectElement), t.boxSelectElement = null), this.map.dragPan.enable(), t.boxSelecting = !1, t.canBoxSelect = !1, t.dragMoving = !1, t.canDragMove = !1
        }, onStop: function () {
            mt.enable(this)
        }, onMouseMove: function (t) {
            return this.stopExtendedInteractions(t), !0
        }, onMouseOut: function (t) {
            return !t.dragMoving || this.fireUpdate()
        }
    };
    Ht.onTap = Ht.onClick = function (t, e) {
        return it(e) ? this.clickAnywhere(t, e) : et(y.VERTEX)(e) ? this.clickOnVertex(t, e) : at(e) ? this.clickOnFeature(t, e) : void 0
    }, Ht.clickAnywhere = function (t) {
        var e = this, n = this.getSelectedIds();
        n.length && (this.clearSelectedFeatures(), n.forEach((function (t) {
            return e.doRender(t)
        }))), mt.enable(this), this.stopExtendedInteractions(t)
    }, Ht.clickOnVertex = function (t, e) {
        this.changeMode(f.DIRECT_SELECT, {
            featureId: e.featureTarget.properties.parent,
            coordPath: e.featureTarget.properties.coord_path,
            startPos: e.lngLat
        }), this.updateUIClasses({mouse: l.MOVE})
    }, Ht.startOnActiveFeature = function (t, e) {
        this.stopExtendedInteractions(t), this.map.dragPan.disable(), this.doRender(e.featureTarget.properties.id), t.canDragMove = !0, t.dragMoveLocation = e.lngLat
    }, Ht.clickOnFeature = function (t, e) {
        var n = this;
        mt.disable(this), this.stopExtendedInteractions(t);
        var o = ut(e), r = this.getSelectedIds(), i = e.featureTarget.properties.id, a = this.isSelected(i);
        if (!o && a && this.getFeature(i).type !== p.POINT) return this.changeMode(f.DIRECT_SELECT, {featureId: i});
        a && o ? (this.deselect(i), this.updateUIClasses({mouse: l.POINTER}), 1 === r.length && mt.enable(this)) : !a && o ? (this.select(i), this.updateUIClasses({mouse: l.MOVE})) : a || o || (r.forEach((function (t) {
            return n.doRender(t)
        })), this.setSelected(i), this.updateUIClasses({mouse: l.MOVE})), this.doRender(i)
    }, Ht.onMouseDown = function (t, e) {
        return ot(e) ? this.startOnActiveFeature(t, e) : this.drawConfig.boxSelect && nt(e) ? this.startBoxSelect(t, e) : void 0
    }, Ht.startBoxSelect = function (t, e) {
        this.stopExtendedInteractions(t), this.map.dragPan.disable(), t.boxSelectStartLocation = ht(e.originalEvent, this.map.getContainer()), t.canBoxSelect = !0
    }, Ht.onTouchStart = function (t, e) {
        if (ot(e)) return this.startOnActiveFeature(t, e)
    }, Ht.onDrag = function (t, e) {
        return t.canDragMove ? this.dragMove(t, e) : this.drawConfig.boxSelect && t.canBoxSelect ? this.whileBoxSelect(t, e) : void 0
    }, Ht.whileBoxSelect = function (t, e) {
        t.boxSelecting = !0, this.updateUIClasses({mouse: l.ADD}), t.boxSelectElement || (t.boxSelectElement = document.createElement("div"), t.boxSelectElement.classList.add(u.BOX_SELECT), this.map.getContainer().appendChild(t.boxSelectElement));
        var n = ht(e.originalEvent, this.map.getContainer()), o = Math.min(t.boxSelectStartLocation.x, n.x),
            r = Math.max(t.boxSelectStartLocation.x, n.x), i = Math.min(t.boxSelectStartLocation.y, n.y),
            a = Math.max(t.boxSelectStartLocation.y, n.y), s = "translate(" + o + "px, " + i + "px)";
        t.boxSelectElement.style.transform = s, t.boxSelectElement.style.WebkitTransform = s, t.boxSelectElement.style.width = r - o + "px", t.boxSelectElement.style.height = a - i + "px"
    }, Ht.dragMove = function (t, e) {
        t.dragMoving = !0, e.originalEvent.stopPropagation();
        var n = {lng: e.lngLat.lng - t.dragMoveLocation.lng, lat: e.lngLat.lat - t.dragMoveLocation.lat};
        qt(this.getSelected(), n), t.dragMoveLocation = e.lngLat
    }, Ht.onTouchEnd = Ht.onMouseUp = function (t, e) {
        var n = this;
        if (t.dragMoving) this.fireUpdate(); else if (t.boxSelecting) {
            var o = [t.boxSelectStartLocation, ht(e.originalEvent, this.map.getContainer())],
                r = this.featuresAt(null, o, "click"), i = this.getUniqueIds(r).filter((function (t) {
                    return !n.isSelected(t)
                }));
            i.length && (this.select(i), i.forEach((function (t) {
                return n.doRender(t)
            })), this.updateUIClasses({mouse: l.MOVE}))
        }
        this.stopExtendedInteractions(t)
    }, Ht.toDisplayFeatures = function (t, e, n) {
        e.properties.active = this.isSelected(e.properties.id) ? v.ACTIVE : v.INACTIVE, n(e), this.fireActionable(), e.properties.active === v.ACTIVE && e.geometry.type !== p.POINT && vt(e).forEach(n)
    }, Ht.onTrash = function () {
        this.deleteFeature(this.getSelectedIds()), this.fireActionable()
    }, Ht.onCombineFeatures = function () {
        var t = this.getSelected();
        if (!(0 === t.length || t.length < 2)) {
            for (var e = [], n = [], o = t[0].type.replace("Multi", ""), r = 0; r < t.length; r++) {
                var i = t[r];
                if (i.type.replace("Multi", "") !== o) return;
                i.type.includes("Multi") ? i.getCoordinates().forEach((function (t) {
                    e.push(t)
                })) : e.push(i.getCoordinates()), n.push(i.toGeoJSON())
            }
            if (n.length > 1) {
                var a = this.newFeature({
                    type: p.FEATURE,
                    properties: n[0].properties,
                    geometry: {type: "Multi" + o, coordinates: e}
                });
                this.addFeature(a), this.deleteFeature(this.getSelectedIds(), {silent: !0}), this.setSelected([a.id]), this.map.fire(h.COMBINE_FEATURES, {
                    createdFeatures: [a.toGeoJSON()],
                    deletedFeatures: n
                })
            }
            this.fireActionable()
        }
    }, Ht.onUncombineFeatures = function () {
        var t = this, e = this.getSelected();
        if (0 !== e.length) {
            for (var n = [], o = [], r = function (r) {
                var i = e[r];
                t.isInstanceOf("MultiFeature", i) && (i.getFeatures().forEach((function (e) {
                    t.addFeature(e), e.properties = i.properties, n.push(e.toGeoJSON()), t.select([e.id])
                })), t.deleteFeature(i.id, {silent: !0}), o.push(i.toGeoJSON()))
            }, i = 0; i < e.length; i++) r(i);
            n.length > 1 && this.map.fire(h.UNCOMBINE_FEATURES, {
                createdFeatures: n,
                deletedFeatures: o
            }), this.fireActionable()
        }
    };
    var Xt = et(y.VERTEX), Wt = et(y.MIDPOINT), Zt = {
        fireUpdate: function () {
            this.map.fire(h.UPDATE, {
                action: g.CHANGE_COORDINATES, features: this.getSelected().map((function (t) {
                    return t.toGeoJSON()
                }))
            })
        }, fireActionable: function (t) {
            this.setActionableState({
                combineFeatures: !1,
                uncombineFeatures: !1,
                trash: t.selectedCoordPaths.length > 0
            })
        }, startDragging: function (t, e) {
            this.map.dragPan.disable(), t.canDragMove = !0, t.dragMoveLocation = e.lngLat
        }, stopDragging: function (t) {
            this.map.dragPan.enable(), t.dragMoving = !1, t.canDragMove = !1, t.dragMoveLocation = null
        }, onVertex: function (t, e) {
            this.startDragging(t, e);
            var n = e.featureTarget.properties, o = t.selectedCoordPaths.indexOf(n.coord_path);
            ut(e) || -1 !== o ? ut(e) && -1 === o && t.selectedCoordPaths.push(n.coord_path) : t.selectedCoordPaths = [n.coord_path];
            var r = this.pathsToCoordinates(t.featureId, t.selectedCoordPaths);
            this.setSelectedCoordinates(r)
        }, onMidpoint: function (t, e) {
            this.startDragging(t, e);
            var n = e.featureTarget.properties;
            t.feature.addCoordinate(n.coord_path, n.lng, n.lat), this.fireUpdate(), t.selectedCoordPaths = [n.coord_path]
        }, pathsToCoordinates: function (t, e) {
            return e.map((function (e) {
                return {feature_id: t, coord_path: e}
            }))
        }, onFeature: function (t, e) {
            0 === t.selectedCoordPaths.length ? this.startDragging(t, e) : this.stopDragging(t)
        }, dragFeature: function (t, e, n) {
            qt(this.getSelected(), n), t.dragMoveLocation = e.lngLat
        }, dragVertex: function (t, e, n) {
            for (var o = t.selectedCoordPaths.map((function (e) {
                return t.feature.getCoordinate(e)
            })), r = $t(o.map((function (t) {
                return {type: p.FEATURE, properties: {}, geometry: {type: p.POINT, coordinates: t}}
            })), n), i = 0; i < o.length; i++) {
                var a = o[i];
                t.feature.updateCoordinate(t.selectedCoordPaths[i], a[0] + r.lng, a[1] + r.lat)
            }
        }, clickNoTarget: function () {
            this.changeMode(f.SIMPLE_SELECT)
        }, clickInactive: function () {
            this.changeMode(f.SIMPLE_SELECT)
        }, clickActiveFeature: function (t) {
            t.selectedCoordPaths = [], this.clearSelectedCoordinates(), t.feature.changed()
        }, onSetup: function (t) {
            var e = t.featureId, n = this.getFeature(e);
            if (!n) throw new Error("You must provide a featureId to enter direct_select mode");
            if (n.type === p.POINT) throw new TypeError("direct_select mode doesn't handle point features");
            var o = {
                featureId: e,
                feature: n,
                dragMoveLocation: t.startPos || null,
                dragMoving: !1,
                canDragMove: !1,
                selectedCoordPaths: t.coordPath ? [t.coordPath] : []
            };
            return this.setSelectedCoordinates(this.pathsToCoordinates(e, o.selectedCoordPaths)), this.setSelected(e), mt.disable(this), this.setActionableState({trash: !0}), o
        }, onStop: function () {
            mt.enable(this), this.clearSelectedCoordinates()
        }, toDisplayFeatures: function (t, e, n) {
            t.featureId === e.properties.id ? (e.properties.active = v.ACTIVE, n(e), vt(e, {
                map: this.map,
                midpoints: !0,
                selectedPaths: t.selectedCoordPaths
            }).forEach(n)) : (e.properties.active = v.INACTIVE, n(e)), this.fireActionable(t)
        }, onTrash: function (t) {
            t.selectedCoordPaths.sort((function (t, e) {
                return e.localeCompare(t, "en", {numeric: !0})
            })).forEach((function (e) {
                return t.feature.removeCoordinate(e)
            })), this.fireUpdate(), t.selectedCoordPaths = [], this.clearSelectedCoordinates(), this.fireActionable(t), !1 === t.feature.isValid() && (this.deleteFeature([t.featureId]), this.changeMode(f.SIMPLE_SELECT, {}))
        }, onMouseMove: function (t, e) {
            var n = ot(e), o = Xt(e), r = 0 === t.selectedCoordPaths.length;
            return n && r || o && !r ? this.updateUIClasses({mouse: l.MOVE}) : this.updateUIClasses({mouse: l.NONE}), this.stopDragging(t), !0
        }, onMouseOut: function (t) {
            return t.dragMoving && this.fireUpdate(), !0
        }
    };
    Zt.onTouchStart = Zt.onMouseDown = function (t, e) {
        return Xt(e) ? this.onVertex(t, e) : ot(e) ? this.onFeature(t, e) : Wt(e) ? this.onMidpoint(t, e) : void 0
    }, Zt.onDrag = function (t, e) {
        if (!0 === t.canDragMove) {
            t.dragMoving = !0, e.originalEvent.stopPropagation();
            var n = {lng: e.lngLat.lng - t.dragMoveLocation.lng, lat: e.lngLat.lat - t.dragMoveLocation.lat};
            t.selectedCoordPaths.length > 0 ? this.dragVertex(t, e, n) : this.dragFeature(t, e, n), t.dragMoveLocation = e.lngLat
        }
    }, Zt.onClick = function (t, e) {
        return it(e) ? this.clickNoTarget(t, e) : ot(e) ? this.clickActiveFeature(t, e) : rt(e) ? this.clickInactive(t, e) : void this.stopDragging(t)
    }, Zt.onTap = function (t, e) {
        return it(e) ? this.clickNoTarget(t, e) : ot(e) ? this.clickActiveFeature(t, e) : rt(e) ? this.clickInactive(t, e) : void 0
    }, Zt.onTouchEnd = Zt.onMouseUp = function (t) {
        t.dragMoving && this.fireUpdate(), this.stopDragging(t)
    };
    var Kt = {};

    function Qt(t, e) {
        return !!t.lngLat && (t.lngLat.lng === e[0] && t.lngLat.lat === e[1])
    }

    Kt.onSetup = function () {
        var t = this.newFeature({type: p.FEATURE, properties: {}, geometry: {type: p.POINT, coordinates: []}});
        return this.addFeature(t), this.clearSelectedFeatures(), this.updateUIClasses({mouse: l.ADD}), this.activateUIButton(d.POINT), this.setActionableState({trash: !0}), {point: t}
    }, Kt.stopDrawingAndRemove = function (t) {
        this.deleteFeature([t.point.id], {silent: !0}), this.changeMode(f.SIMPLE_SELECT)
    }, Kt.onTap = Kt.onClick = function (t, e) {
        this.updateUIClasses({mouse: l.MOVE}), t.point.updateCoordinate("", e.lngLat.lng, e.lngLat.lat), this.map.fire(h.CREATE, {features: [t.point.toGeoJSON()]}), this.changeMode(f.SIMPLE_SELECT, {featureIds: [t.point.id]})
    }, Kt.onStop = function (t) {
        this.activateUIButton(), t.point.getCoordinate().length || this.deleteFeature([t.point.id], {silent: !0})
    }, Kt.toDisplayFeatures = function (t, e, n) {
        var o = e.properties.id === t.point.id;
        if (e.properties.active = o ? v.ACTIVE : v.INACTIVE, !o) return n(e)
    }, Kt.onTrash = Kt.stopDrawingAndRemove, Kt.onKeyUp = function (t, e) {
        if (ct(e) || lt(e)) return this.stopDrawingAndRemove(t, e)
    };
    var te = {
        onSetup: function () {
            var t = this.newFeature({type: p.FEATURE, properties: {}, geometry: {type: p.POLYGON, coordinates: [[]]}});
            return this.addFeature(t), this.clearSelectedFeatures(), mt.disable(this), this.updateUIClasses({mouse: l.ADD}), this.activateUIButton(d.POLYGON), this.setActionableState({trash: !0}), {
                polygon: t,
                currentVertexPosition: 0
            }
        }, clickAnywhere: function (t, e) {
            if (t.currentVertexPosition > 0 && Qt(e, t.polygon.coordinates[0][t.currentVertexPosition - 1])) return this.changeMode(f.SIMPLE_SELECT, {featureIds: [t.polygon.id]});
            this.updateUIClasses({mouse: l.ADD}), t.polygon.updateCoordinate("0." + t.currentVertexPosition, e.lngLat.lng, e.lngLat.lat), t.currentVertexPosition++, t.polygon.updateCoordinate("0." + t.currentVertexPosition, e.lngLat.lng, e.lngLat.lat)
        }, clickOnVertex: function (t) {
            return this.changeMode(f.SIMPLE_SELECT, {featureIds: [t.polygon.id]})
        }, onMouseMove: function (t, e) {
            t.polygon.updateCoordinate("0." + t.currentVertexPosition, e.lngLat.lng, e.lngLat.lat), st(e) && this.updateUIClasses({mouse: l.POINTER})
        }
    };
    te.onTap = te.onClick = function (t, e) {
        return st(e) ? this.clickOnVertex(t, e) : this.clickAnywhere(t, e)
    }, te.onKeyUp = function (t, e) {
        ct(e) ? (this.deleteFeature([t.polygon.id], {silent: !0}), this.changeMode(f.SIMPLE_SELECT)) : lt(e) && this.changeMode(f.SIMPLE_SELECT, {featureIds: [t.polygon.id]})
    }, te.onStop = function (t) {
        this.updateUIClasses({mouse: l.NONE}), mt.enable(this), this.activateUIButton(), void 0 !== this.getFeature(t.polygon.id) && (t.polygon.removeCoordinate("0." + t.currentVertexPosition), t.polygon.isValid() ? this.map.fire(h.CREATE, {features: [t.polygon.toGeoJSON()]}) : (this.deleteFeature([t.polygon.id], {silent: !0}), this.changeMode(f.SIMPLE_SELECT, {}, {silent: !0})))
    }, te.toDisplayFeatures = function (t, e, n) {
        var o = e.properties.id === t.polygon.id;
        if (e.properties.active = o ? v.ACTIVE : v.INACTIVE, !o) return n(e);
        if (0 !== e.geometry.coordinates.length) {
            var r = e.geometry.coordinates[0].length;
            if (!(r < 3)) {
                if (e.properties.meta = y.FEATURE, n(gt(t.polygon.id, e.geometry.coordinates[0][0], "0.0", !1)), r > 3) {
                    var i = e.geometry.coordinates[0].length - 3;
                    n(gt(t.polygon.id, e.geometry.coordinates[0][i], "0." + i, !1))
                }
                if (r <= 4) {
                    var a = [[e.geometry.coordinates[0][0][0], e.geometry.coordinates[0][0][1]], [e.geometry.coordinates[0][1][0], e.geometry.coordinates[0][1][1]]];
                    if (n({
                        type: p.FEATURE,
                        properties: e.properties,
                        geometry: {coordinates: a, type: p.LINE_STRING}
                    }), 3 === r) return
                }
                return n(e)
            }
        }
    }, te.onTrash = function (t) {
        this.deleteFeature([t.polygon.id], {silent: !0}), this.changeMode(f.SIMPLE_SELECT)
    };
    var ee = {
        onSetup: function (t) {
            var e, n, o = (t = t || {}).featureId, r = "forward";
            if (o) {
                if (!(e = this.getFeature(o))) throw new Error("Could not find a feature with the provided featureId");
                var i = t.from;
                if (i && "Feature" === i.type && i.geometry && "Point" === i.geometry.type && (i = i.geometry), i && "Point" === i.type && i.coordinates && 2 === i.coordinates.length && (i = i.coordinates), !i || !Array.isArray(i)) throw new Error("Please use the `from` property to indicate which point to continue the line from");
                var a = e.coordinates.length - 1;
                if (e.coordinates[a][0] === i[0] && e.coordinates[a][1] === i[1]) n = a + 1, e.addCoordinate.apply(e, [n].concat(e.coordinates[a])); else {
                    if (e.coordinates[0][0] !== i[0] || e.coordinates[0][1] !== i[1]) throw new Error("`from` should match the point at either the start or the end of the provided LineString");
                    r = "backwards", n = 0, e.addCoordinate.apply(e, [n].concat(e.coordinates[0]))
                }
            } else e = this.newFeature({
                type: p.FEATURE,
                properties: {},
                geometry: {type: p.LINE_STRING, coordinates: []}
            }), n = 0, this.addFeature(e);
            return this.clearSelectedFeatures(), mt.disable(this), this.updateUIClasses({mouse: l.ADD}), this.activateUIButton(d.LINE), this.setActionableState({trash: !0}), {
                line: e,
                currentVertexPosition: n,
                direction: r
            }
        }, clickAnywhere: function (t, e) {
            if (t.currentVertexPosition > 0 && Qt(e, t.line.coordinates[t.currentVertexPosition - 1]) || "backwards" === t.direction && Qt(e, t.line.coordinates[t.currentVertexPosition + 1])) return this.changeMode(f.SIMPLE_SELECT, {featureIds: [t.line.id]});
            this.updateUIClasses({mouse: l.ADD}), t.line.updateCoordinate(t.currentVertexPosition, e.lngLat.lng, e.lngLat.lat), "forward" === t.direction ? (t.currentVertexPosition++, t.line.updateCoordinate(t.currentVertexPosition, e.lngLat.lng, e.lngLat.lat)) : t.line.addCoordinate(0, e.lngLat.lng, e.lngLat.lat)
        }, clickOnVertex: function (t) {
            return this.changeMode(f.SIMPLE_SELECT, {featureIds: [t.line.id]})
        }, onMouseMove: function (t, e) {
            t.line.updateCoordinate(t.currentVertexPosition, e.lngLat.lng, e.lngLat.lat), st(e) && this.updateUIClasses({mouse: l.POINTER})
        }
    };
    ee.onTap = ee.onClick = function (t, e) {
        if (st(e)) return this.clickOnVertex(t, e);
        this.clickAnywhere(t, e)
    }, ee.onKeyUp = function (t, e) {
        lt(e) ? this.changeMode(f.SIMPLE_SELECT, {featureIds: [t.line.id]}) : ct(e) && (this.deleteFeature([t.line.id], {silent: !0}), this.changeMode(f.SIMPLE_SELECT))
    }, ee.onStop = function (t) {
        mt.enable(this), this.activateUIButton(), void 0 !== this.getFeature(t.line.id) && (t.line.removeCoordinate("" + t.currentVertexPosition), t.line.isValid() ? this.map.fire(h.CREATE, {features: [t.line.toGeoJSON()]}) : (this.deleteFeature([t.line.id], {silent: !0}), this.changeMode(f.SIMPLE_SELECT, {}, {silent: !0})))
    }, ee.onTrash = function (t) {
        this.deleteFeature([t.line.id], {silent: !0}), this.changeMode(f.SIMPLE_SELECT)
    }, ee.toDisplayFeatures = function (t, e, n) {
        var o = e.properties.id === t.line.id;
        if (e.properties.active = o ? v.ACTIVE : v.INACTIVE, !o) return n(e);
        e.geometry.coordinates.length < 2 || (e.properties.meta = y.FEATURE, n(gt(t.line.id, e.geometry.coordinates["forward" === t.direction ? e.geometry.coordinates.length - 2 : 1], "" + ("forward" === t.direction ? e.geometry.coordinates.length - 2 : 1), !1)), n(e))
    };
    var ne = {simple_select: Ht, direct_select: Zt, draw_point: Kt, draw_polygon: te, draw_line_string: ee}, oe = {
            defaultMode: f.SIMPLE_SELECT,
            keybindings: !0,
            touchEnabled: !0,
            clickBuffer: 2,
            touchBuffer: 25,
            boxSelect: !0,
            displayControlsDefault: !0,
            styles: tt,
            modes: ne,
            controls: {},
            userProperties: !1
        }, re = {point: !0, line_string: !0, polygon: !0, trash: !0, combine_features: !0, uncombine_features: !0},
        ie = {point: !1, line_string: !1, polygon: !1, trash: !1, combine_features: !1, uncombine_features: !1};

    function ae(t, e) {
        return t.map((function (t) {
            return t.source ? t : W(t, {id: t.id + "." + e, source: "hot" === e ? c.HOT : c.COLD})
        }))
    }

    var se = {};
    !function (t, e) {
        var n = "__lodash_hash_undefined__", o = 9007199254740991, r = "[object Arguments]", i = "[object Array]",
            a = "[object Boolean]", s = "[object Date]", u = "[object Error]", c = "[object Function]",
            l = "[object Map]", d = "[object Number]", p = "[object Object]", f = "[object Promise]",
            h = "[object RegExp]", g = "[object Set]", y = "[object String]", v = "[object Symbol]",
            m = "[object WeakMap]", _ = "[object ArrayBuffer]", b = "[object DataView]",
            E = /^\[object .+?Constructor\]$/, T = /^(?:0|[1-9]\d*)$/, C = {};
        C["[object Float32Array]"] = C["[object Float64Array]"] = C["[object Int8Array]"] = C["[object Int16Array]"] = C["[object Int32Array]"] = C["[object Uint8Array]"] = C["[object Uint8ClampedArray]"] = C["[object Uint16Array]"] = C["[object Uint32Array]"] = !0, C[r] = C[i] = C[_] = C[a] = C[b] = C[s] = C[u] = C[c] = C[l] = C[d] = C[p] = C[h] = C[g] = C[y] = C[m] = !1;
        var O = "object" == typeof global && global && global.Object === Object && global,
            S = "object" == typeof self && self && self.Object === Object && self,
            I = O || S || Function("return this")(), x = e && !e.nodeType && e, M = x && t && !t.nodeType && t,
            L = M && M.exports === x, N = L && O.process, A = function () {
                try {
                    return N && N.binding && N.binding("util")
                } catch (t) {
                }
            }(), P = A && A.isTypedArray;

        function F(t, e) {
            for (var n = -1, o = null == t ? 0 : t.length; ++n < o;) if (e(t[n], n, t)) return !0;
            return !1
        }

        function w(t) {
            var e = -1, n = Array(t.size);
            return t.forEach((function (t, o) {
                n[++e] = [o, t]
            })), n
        }

        function R(t) {
            var e = -1, n = Array(t.size);
            return t.forEach((function (t) {
                n[++e] = t
            })), n
        }

        var k, D, U, j = Array.prototype, V = Function.prototype, B = Object.prototype, G = I["__core-js_shared__"],
            J = V.toString, z = B.hasOwnProperty,
            Y = (k = /[^.]+$/.exec(G && G.keys && G.keys.IE_PROTO || "")) ? "Symbol(src)_1." + k : "", $ = B.toString,
            q = RegExp("^" + J.call(z).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"),
            H = L ? I.Buffer : void 0, X = I.Symbol, W = I.Uint8Array, Z = B.propertyIsEnumerable, K = j.splice,
            Q = X ? X.toStringTag : void 0, tt = Object.getOwnPropertySymbols, et = H ? H.isBuffer : void 0,
            nt = (D = Object.keys, U = Object, function (t) {
                return D(U(t))
            }), ot = At(I, "DataView"), rt = At(I, "Map"), it = At(I, "Promise"), at = At(I, "Set"),
            st = At(I, "WeakMap"), ut = At(Object, "create"), ct = Rt(ot), lt = Rt(rt), dt = Rt(it), pt = Rt(at),
            ft = Rt(st), ht = X ? X.prototype : void 0, gt = ht ? ht.valueOf : void 0;

        function yt(t) {
            var e = -1, n = null == t ? 0 : t.length;
            for (this.clear(); ++e < n;) {
                var o = t[e];
                this.set(o[0], o[1])
            }
        }

        function vt(t) {
            var e = -1, n = null == t ? 0 : t.length;
            for (this.clear(); ++e < n;) {
                var o = t[e];
                this.set(o[0], o[1])
            }
        }

        function mt(t) {
            var e = -1, n = null == t ? 0 : t.length;
            for (this.clear(); ++e < n;) {
                var o = t[e];
                this.set(o[0], o[1])
            }
        }

        function _t(t) {
            var e = -1, n = null == t ? 0 : t.length;
            for (this.__data__ = new mt; ++e < n;) this.add(t[e])
        }

        function bt(t) {
            var e = this.__data__ = new vt(t);
            this.size = e.size
        }

        function Et(t, e) {
            var n = Ut(t), o = !n && Dt(t), r = !n && !o && jt(t), i = !n && !o && !r && zt(t), a = n || o || r || i,
                s = a ? function (t, e) {
                    for (var n = -1, o = Array(t); ++n < t;) o[n] = e(n);
                    return o
                }(t.length, String) : [], u = s.length;
            for (var c in t) !e && !z.call(t, c) || a && ("length" == c || r && ("offset" == c || "parent" == c) || i && ("buffer" == c || "byteLength" == c || "byteOffset" == c) || wt(c, u)) || s.push(c);
            return s
        }

        function Tt(t, e) {
            for (var n = t.length; n--;) if (kt(t[n][0], e)) return n;
            return -1
        }

        function Ct(t) {
            return null == t ? void 0 === t ? "[object Undefined]" : "[object Null]" : Q && Q in Object(t) ? function (t) {
                var e = z.call(t, Q), n = t[Q];
                try {
                    t[Q] = void 0;
                    var o = !0
                } catch (t) {
                }
                var r = $.call(t);
                o && (e ? t[Q] = n : delete t[Q]);
                return r
            }(t) : function (t) {
                return $.call(t)
            }(t)
        }

        function Ot(t) {
            return Jt(t) && Ct(t) == r
        }

        function St(t, e, n, o, c) {
            return t === e || (null == t || null == e || !Jt(t) && !Jt(e) ? t != t && e != e : function (t, e, n, o, c, f) {
                var m = Ut(t), E = Ut(e), T = m ? i : Ft(t), C = E ? i : Ft(e), O = (T = T == r ? p : T) == p,
                    S = (C = C == r ? p : C) == p, I = T == C;
                if (I && jt(t)) {
                    if (!jt(e)) return !1;
                    m = !0, O = !1
                }
                if (I && !O) return f || (f = new bt), m || zt(t) ? Mt(t, e, n, o, c, f) : function (t, e, n, o, r, i, c) {
                    switch (n) {
                        case b:
                            if (t.byteLength != e.byteLength || t.byteOffset != e.byteOffset) return !1;
                            t = t.buffer, e = e.buffer;
                        case _:
                            return !(t.byteLength != e.byteLength || !i(new W(t), new W(e)));
                        case a:
                        case s:
                        case d:
                            return kt(+t, +e);
                        case u:
                            return t.name == e.name && t.message == e.message;
                        case h:
                        case y:
                            return t == e + "";
                        case l:
                            var p = w;
                        case g:
                            var f = 1 & o;
                            if (p || (p = R), t.size != e.size && !f) return !1;
                            var m = c.get(t);
                            if (m) return m == e;
                            o |= 2, c.set(t, e);
                            var E = Mt(p(t), p(e), o, r, i, c);
                            return c.delete(t), E;
                        case v:
                            if (gt) return gt.call(t) == gt.call(e)
                    }
                    return !1
                }(t, e, T, n, o, c, f);
                if (!(1 & n)) {
                    var x = O && z.call(t, "__wrapped__"), M = S && z.call(e, "__wrapped__");
                    if (x || M) {
                        var L = x ? t.value() : t, N = M ? e.value() : e;
                        return f || (f = new bt), c(L, N, n, o, f)
                    }
                }
                if (!I) return !1;
                return f || (f = new bt), function (t, e, n, o, r, i) {
                    var a = 1 & n, s = Lt(t), u = s.length, c = Lt(e).length;
                    if (u != c && !a) return !1;
                    var l = u;
                    for (; l--;) {
                        var d = s[l];
                        if (!(a ? d in e : z.call(e, d))) return !1
                    }
                    var p = i.get(t);
                    if (p && i.get(e)) return p == e;
                    var f = !0;
                    i.set(t, e), i.set(e, t);
                    var h = a;
                    for (; ++l < u;) {
                        var g = t[d = s[l]], y = e[d];
                        if (o) var v = a ? o(y, g, d, e, t, i) : o(g, y, d, t, e, i);
                        if (!(void 0 === v ? g === y || r(g, y, n, o, i) : v)) {
                            f = !1;
                            break
                        }
                        h || (h = "constructor" == d)
                    }
                    if (f && !h) {
                        var m = t.constructor, _ = e.constructor;
                        m == _ || !("constructor" in t) || !("constructor" in e) || "function" == typeof m && m instanceof m && "function" == typeof _ && _ instanceof _ || (f = !1)
                    }
                    return i.delete(t), i.delete(e), f
                }(t, e, n, o, c, f)
            }(t, e, n, o, St, c))
        }

        function It(t) {
            return !(!Gt(t) || function (t) {
                return !!Y && Y in t
            }(t)) && (Vt(t) ? q : E).test(Rt(t))
        }

        function xt(t) {
            if (n = (e = t) && e.constructor, o = "function" == typeof n && n.prototype || B, e !== o) return nt(t);
            var e, n, o, r = [];
            for (var i in Object(t)) z.call(t, i) && "constructor" != i && r.push(i);
            return r
        }

        function Mt(t, e, n, o, r, i) {
            var a = 1 & n, s = t.length, u = e.length;
            if (s != u && !(a && u > s)) return !1;
            var c = i.get(t);
            if (c && i.get(e)) return c == e;
            var l = -1, d = !0, p = 2 & n ? new _t : void 0;
            for (i.set(t, e), i.set(e, t); ++l < s;) {
                var f = t[l], h = e[l];
                if (o) var g = a ? o(h, f, l, e, t, i) : o(f, h, l, t, e, i);
                if (void 0 !== g) {
                    if (g) continue;
                    d = !1;
                    break
                }
                if (p) {
                    if (!F(e, (function (t, e) {
                        if (a = e, !p.has(a) && (f === t || r(f, t, n, o, i))) return p.push(e);
                        var a
                    }))) {
                        d = !1;
                        break
                    }
                } else if (f !== h && !r(f, h, n, o, i)) {
                    d = !1;
                    break
                }
            }
            return i.delete(t), i.delete(e), d
        }

        function Lt(t) {
            return function (t, e, n) {
                var o = e(t);
                return Ut(t) ? o : function (t, e) {
                    for (var n = -1, o = e.length, r = t.length; ++n < o;) t[r + n] = e[n];
                    return t
                }(o, n(t))
            }(t, Yt, Pt)
        }

        function Nt(t, e) {
            var n, o, r = t.__data__;
            return ("string" == (o = typeof (n = e)) || "number" == o || "symbol" == o || "boolean" == o ? "__proto__" !== n : null === n) ? r["string" == typeof e ? "string" : "hash"] : r.map
        }

        function At(t, e) {
            var n = function (t, e) {
                return null == t ? void 0 : t[e]
            }(t, e);
            return It(n) ? n : void 0
        }

        yt.prototype.clear = function () {
            this.__data__ = ut ? ut(null) : {}, this.size = 0
        }, yt.prototype.delete = function (t) {
            var e = this.has(t) && delete this.__data__[t];
            return this.size -= e ? 1 : 0, e
        }, yt.prototype.get = function (t) {
            var e = this.__data__;
            if (ut) {
                var o = e[t];
                return o === n ? void 0 : o
            }
            return z.call(e, t) ? e[t] : void 0
        }, yt.prototype.has = function (t) {
            var e = this.__data__;
            return ut ? void 0 !== e[t] : z.call(e, t)
        }, yt.prototype.set = function (t, e) {
            var o = this.__data__;
            return this.size += this.has(t) ? 0 : 1, o[t] = ut && void 0 === e ? n : e, this
        }, vt.prototype.clear = function () {
            this.__data__ = [], this.size = 0
        }, vt.prototype.delete = function (t) {
            var e = this.__data__, n = Tt(e, t);
            return !(n < 0) && (n == e.length - 1 ? e.pop() : K.call(e, n, 1), --this.size, !0)
        }, vt.prototype.get = function (t) {
            var e = this.__data__, n = Tt(e, t);
            return n < 0 ? void 0 : e[n][1]
        }, vt.prototype.has = function (t) {
            return Tt(this.__data__, t) > -1
        }, vt.prototype.set = function (t, e) {
            var n = this.__data__, o = Tt(n, t);
            return o < 0 ? (++this.size, n.push([t, e])) : n[o][1] = e, this
        }, mt.prototype.clear = function () {
            this.size = 0, this.__data__ = {hash: new yt, map: new (rt || vt), string: new yt}
        }, mt.prototype.delete = function (t) {
            var e = Nt(this, t).delete(t);
            return this.size -= e ? 1 : 0, e
        }, mt.prototype.get = function (t) {
            return Nt(this, t).get(t)
        }, mt.prototype.has = function (t) {
            return Nt(this, t).has(t)
        }, mt.prototype.set = function (t, e) {
            var n = Nt(this, t), o = n.size;
            return n.set(t, e), this.size += n.size == o ? 0 : 1, this
        }, _t.prototype.add = _t.prototype.push = function (t) {
            return this.__data__.set(t, n), this
        }, _t.prototype.has = function (t) {
            return this.__data__.has(t)
        }, bt.prototype.clear = function () {
            this.__data__ = new vt, this.size = 0
        }, bt.prototype.delete = function (t) {
            var e = this.__data__, n = e.delete(t);
            return this.size = e.size, n
        }, bt.prototype.get = function (t) {
            return this.__data__.get(t)
        }, bt.prototype.has = function (t) {
            return this.__data__.has(t)
        }, bt.prototype.set = function (t, e) {
            var n = this.__data__;
            if (n instanceof vt) {
                var o = n.__data__;
                if (!rt || o.length < 199) return o.push([t, e]), this.size = ++n.size, this;
                n = this.__data__ = new mt(o)
            }
            return n.set(t, e), this.size = n.size, this
        };
        var Pt = tt ? function (t) {
            return null == t ? [] : (t = Object(t), function (t, e) {
                for (var n = -1, o = null == t ? 0 : t.length, r = 0, i = []; ++n < o;) {
                    var a = t[n];
                    e(a, n, t) && (i[r++] = a)
                }
                return i
            }(tt(t), (function (e) {
                return Z.call(t, e)
            })))
        } : function () {
            return []
        }, Ft = Ct;

        function wt(t, e) {
            return !!(e = null == e ? o : e) && ("number" == typeof t || T.test(t)) && t > -1 && t % 1 == 0 && t < e
        }

        function Rt(t) {
            if (null != t) {
                try {
                    return J.call(t)
                } catch (t) {
                }
                try {
                    return t + ""
                } catch (t) {
                }
            }
            return ""
        }

        function kt(t, e) {
            return t === e || t != t && e != e
        }

        (ot && Ft(new ot(new ArrayBuffer(1))) != b || rt && Ft(new rt) != l || it && Ft(it.resolve()) != f || at && Ft(new at) != g || st && Ft(new st) != m) && (Ft = function (t) {
            var e = Ct(t), n = e == p ? t.constructor : void 0, o = n ? Rt(n) : "";
            if (o) switch (o) {
                case ct:
                    return b;
                case lt:
                    return l;
                case dt:
                    return f;
                case pt:
                    return g;
                case ft:
                    return m
            }
            return e
        });
        var Dt = Ot(function () {
            return arguments
        }()) ? Ot : function (t) {
            return Jt(t) && z.call(t, "callee") && !Z.call(t, "callee")
        }, Ut = Array.isArray;
        var jt = et || function () {
            return !1
        };

        function Vt(t) {
            if (!Gt(t)) return !1;
            var e = Ct(t);
            return e == c || "[object GeneratorFunction]" == e || "[object AsyncFunction]" == e || "[object Proxy]" == e
        }

        function Bt(t) {
            return "number" == typeof t && t > -1 && t % 1 == 0 && t <= o
        }

        function Gt(t) {
            var e = typeof t;
            return null != t && ("object" == e || "function" == e)
        }

        function Jt(t) {
            return null != t && "object" == typeof t
        }

        var zt = P ? function (t) {
            return function (e) {
                return t(e)
            }
        }(P) : function (t) {
            return Jt(t) && Bt(t.length) && !!C[Ct(t)]
        };

        function Yt(t) {
            return null != (e = t) && Bt(e.length) && !Vt(e) ? Et(t) : xt(t);
            var e
        }

        t.exports = function (t, e) {
            return St(t, e)
        }
    }({
        get exports() {
            return se
        }, set exports(t) {
            se = t
        }
    }, se);
    var ue = se;

    function ce(t, e) {
        return t.length === e.length && JSON.stringify(t.map((function (t) {
            return t
        })).sort()) === JSON.stringify(e.map((function (t) {
            return t
        })).sort())
    }

    var le = {Polygon: U, LineString: D, Point: k, MultiPolygon: B, MultiLineString: B, MultiPoint: B};
    var de = Object.freeze({
        __proto__: null,
        CommonSelectors: dt,
        constrainFeatureMovement: $t,
        createMidPoint: yt,
        createSupplementaryPoints: vt,
        createVertex: gt,
        doubleClickZoom: mt,
        euclideanDistance: N,
        featuresAt: x,
        getFeatureAtAndSetCursors: L,
        isClick: A,
        isEventAtCoordinates: Qt,
        isTap: P,
        mapEventToBoundingBox: O,
        ModeHandler: t,
        moveFeatures: qt,
        sortFeatures: C,
        stringSetsAreEqual: ce,
        StringSet: S,
        theme: tt,
        toDenseArray: $
    }), pe = function (t, e) {
        var n = {
            options: t = function (t) {
                void 0 === t && (t = {});
                var e = W(t);
                return t.controls || (e.controls = {}), !1 === t.displayControlsDefault ? e.controls = W(ie, t.controls) : e.controls = W(re, t.controls), (e = W(oe, e)).styles = ae(e.styles, "cold").concat(ae(e.styles, "hot")), e
            }(t)
        };
        e = function (t, e) {
            return e.modes = f, e.getFeatureIdsAt = function (e) {
                return x.click({point: e}, null, t).map((function (t) {
                    return t.properties.id
                }))
            }, e.getSelectedIds = function () {
                return t.store.getSelectedIds()
            }, e.getSelected = function () {
                return {
                    type: p.FEATURE_COLLECTION, features: t.store.getSelectedIds().map((function (e) {
                        return t.store.get(e)
                    })).map((function (t) {
                        return t.toGeoJSON()
                    }))
                }
            }, e.getSelectedPoints = function () {
                return {
                    type: p.FEATURE_COLLECTION, features: t.store.getSelectedCoordinates().map((function (t) {
                        return {type: p.FEATURE, properties: {}, geometry: {type: p.POINT, coordinates: t.coordinates}}
                    }))
                }
            }, e.set = function (n) {
                if (void 0 === n.type || n.type !== p.FEATURE_COLLECTION || !Array.isArray(n.features)) throw new Error("Invalid FeatureCollection");
                var o = t.store.createRenderBatch(), r = t.store.getAllIds().slice(), i = e.add(n), a = new S(i);
                return (r = r.filter((function (t) {
                    return !a.has(t)
                }))).length && e.delete(r), o(), i
            }, e.add = function (e) {
                var n = JSON.parse(JSON.stringify(Et(e))).features.map((function (e) {
                    if (e.id = e.id || F(), null === e.geometry) throw new Error("Invalid geometry: null");
                    if (void 0 === t.store.get(e.id) || t.store.get(e.id).type !== e.geometry.type) {
                        var n = le[e.geometry.type];
                        if (void 0 === n) throw new Error("Invalid geometry type: " + e.geometry.type + ".");
                        var o = new n(t, e);
                        t.store.add(o)
                    } else {
                        var r = t.store.get(e.id);
                        r.properties = e.properties, ue(r.getCoordinates(), e.geometry.coordinates) || r.incomingCoords(e.geometry.coordinates)
                    }
                    return e.id
                }));
                return t.store.render(), n
            }, e.get = function (e) {
                var n = t.store.get(e);
                if (n) return n.toGeoJSON()
            }, e.getAll = function () {
                return {
                    type: p.FEATURE_COLLECTION, features: t.store.getAll().map((function (t) {
                        return t.toGeoJSON()
                    }))
                }
            }, e.delete = function (n) {
                return t.store.delete(n, {silent: !0}), e.getMode() !== f.DIRECT_SELECT || t.store.getSelectedIds().length ? t.store.render() : t.events.changeMode(f.SIMPLE_SELECT, void 0, {silent: !0}), e
            }, e.deleteAll = function () {
                return t.store.delete(t.store.getAllIds(), {silent: !0}), e.getMode() === f.DIRECT_SELECT ? t.events.changeMode(f.SIMPLE_SELECT, void 0, {silent: !0}) : t.store.render(), e
            }, e.changeMode = function (n, o) {
                return void 0 === o && (o = {}), n === f.SIMPLE_SELECT && e.getMode() === f.SIMPLE_SELECT ? (ce(o.featureIds || [], t.store.getSelectedIds()) || (t.store.setSelected(o.featureIds, {silent: !0}), t.store.render()), e) : (n === f.DIRECT_SELECT && e.getMode() === f.DIRECT_SELECT && o.featureId === t.store.getSelectedIds()[0] || t.events.changeMode(n, o, {silent: !0}), e)
            }, e.getMode = function () {
                return t.events.getMode()
            }, e.trash = function () {
                return t.events.trash({silent: !0}), e
            }, e.combineFeatures = function () {
                return t.events.combineFeatures({silent: !0}), e
            }, e.uncombineFeatures = function () {
                return t.events.uncombineFeatures({silent: !0}), e
            }, e.setFeatureProperty = function (n, o, r) {
                return t.store.setFeatureProperty(n, o, r), e
            }, e
        }(n, e), n.api = e;
        var o = Q(n);
        return e.onAdd = o.onAdd, e.onRemove = o.onRemove, e.types = d, e.options = t, e
    };

    function fe(t) {
        pe(t, this)
    }

    return fe.modes = ne, fe.constants = b, fe.lib = de, fe
}));
//# sourceMappingURL=mapbox-gl-draw.js.map