{"version":3,"file":"maplibre-gl-geocoder.mjs","sources":["../node_modules/tslib/tslib.es6.js","../node_modules/xtend/immutable.js","../node_modules/fuzzy/lib/fuzzy.js","../node_modules/suggestions-list/src/list.js","../node_modules/suggestions-list/src/suggestions.js","../node_modules/suggestions-list/index.js","../node_modules/subtag/subtag.js","../node_modules/lodash.debounce/index.js","../node_modules/events/events.js","../lib/exceptions.ts","../lib/localization.ts","../lib/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n    ownKeys = Object.getOwnPropertyNames || function (o) {\r\n        var ar = [];\r\n        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n        return ar;\r\n    };\r\n    return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose, inner;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n            if (async) inner = dispose;\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    var r, s = 0;\r\n    function next() {\r\n        while (r = env.stack.pop()) {\r\n            try {\r\n                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n                if (r.dispose) {\r\n                    var result = r.dispose.call(r.value);\r\n                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n                }\r\n                else s |= 1;\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n    if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n        return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n            return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n        });\r\n    }\r\n    return path;\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __esDecorate: __esDecorate,\r\n    __runInitializers: __runInitializers,\r\n    __propKey: __propKey,\r\n    __setFunctionName: __setFunctionName,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","/*\n * Fuzzy\n * https://github.com/myork/fuzzy\n *\n * Copyright (c) 2012 Matt York\n * Licensed under the MIT license.\n */\n\n(function() {\n\nvar root = this;\n\nvar fuzzy = {};\n\n// Use in node or in browser\nif (typeof exports !== 'undefined') {\n  module.exports = fuzzy;\n} else {\n  root.fuzzy = fuzzy;\n}\n\n// Return all elements of `array` that have a fuzzy\n// match against `pattern`.\nfuzzy.simpleFilter = function(pattern, array) {\n  return array.filter(function(str) {\n    return fuzzy.test(pattern, str);\n  });\n};\n\n// Does `pattern` fuzzy match `str`?\nfuzzy.test = function(pattern, str) {\n  return fuzzy.match(pattern, str) !== null;\n};\n\n// If `pattern` matches `str`, wrap each matching character\n// in `opts.pre` and `opts.post`. If no match, return null\nfuzzy.match = function(pattern, str, opts) {\n  opts = opts || {};\n  var patternIdx = 0\n    , result = []\n    , len = str.length\n    , totalScore = 0\n    , currScore = 0\n    // prefix\n    , pre = opts.pre || ''\n    // suffix\n    , post = opts.post || ''\n    // String to compare against. This might be a lowercase version of the\n    // raw string\n    , compareString =  opts.caseSensitive && str || str.toLowerCase()\n    , ch;\n\n  pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n  // For each character in the string, either add it to the result\n  // or wrap in template if it's the next string in the pattern\n  for(var idx = 0; idx < len; idx++) {\n    ch = str[idx];\n    if(compareString[idx] === pattern[patternIdx]) {\n      ch = pre + ch + post;\n      patternIdx += 1;\n\n      // consecutive characters should increase the score more than linearly\n      currScore += 1 + currScore;\n    } else {\n      currScore = 0;\n    }\n    totalScore += currScore;\n    result[result.length] = ch;\n  }\n\n  // return rendered string if we have a match for every char\n  if(patternIdx === pattern.length) {\n    // if the string is an exact match with pattern, totalScore should be maxed\n    totalScore = (compareString === pattern) ? Infinity : totalScore;\n    return {rendered: result.join(''), score: totalScore};\n  }\n\n  return null;\n};\n\n// The normal entry point. Filters `arr` for matches against `pattern`.\n// It returns an array with matching values of the type:\n//\n//     [{\n//         string:   '<b>lah' // The rendered string\n//       , index:    2        // The index of the element in `arr`\n//       , original: 'blah'   // The original element in `arr`\n//     }]\n//\n// `opts` is an optional argument bag. Details:\n//\n//    opts = {\n//        // string to put before a matching character\n//        pre:     '<b>'\n//\n//        // string to put after matching character\n//      , post:    '</b>'\n//\n//        // Optional function. Input is an entry in the given arr`,\n//        // output should be the string to test `pattern` against.\n//        // In this example, if `arr = [{crying: 'koala'}]` we would return\n//        // 'koala'.\n//      , extract: function(arg) { return arg.crying; }\n//    }\nfuzzy.filter = function(pattern, arr, opts) {\n  if(!arr || arr.length === 0) {\n    return [];\n  }\n  if (typeof pattern !== 'string') {\n    return arr;\n  }\n  opts = opts || {};\n  return arr\n    .reduce(function(prev, element, idx, arr) {\n      var str = element;\n      if(opts.extract) {\n        str = opts.extract(element);\n      }\n      var rendered = fuzzy.match(pattern, str, opts);\n      if(rendered != null) {\n        prev[prev.length] = {\n            string: rendered.rendered\n          , score: rendered.score\n          , index: idx\n          , original: element\n        };\n      }\n      return prev;\n    }, [])\n\n    // Sort by score. Browsers are inconsistent wrt stable/unstable\n    // sorting, so force stable by using the index in the case of tie.\n    // See http://ofb.net/~sethml/is-sort-stable.html\n    .sort(function(a,b) {\n      var compare = b.score - a.score;\n      if(compare) return compare;\n      return a.index - b.index;\n    });\n};\n\n\n}());\n\n","'use strict';\n\nvar List = function(component) {\n  this.component = component;\n  this.items = [];\n  this.active = component.options.noInitialSelection ? -1 : 0;\n  this.wrapper = document.createElement('div');\n  this.wrapper.className = 'suggestions-wrapper';\n  this.element = document.createElement('ul');\n  this.element.className = 'suggestions';\n  this.wrapper.appendChild(this.element);\n\n  // selectingListItem is set to true in the time between the mousedown and mouseup when clicking an item in the list\n  // mousedown on a list item will cause the input to blur which normally hides the list, so this flag is used to keep\n  // the list open until the mouseup\n  this.selectingListItem = false;\n\n  component.el.parentNode.insertBefore(this.wrapper, component.el.nextSibling);\n  return this;\n};\n\nList.prototype.show = function() {\n  this.element.style.display = 'block';\n};\n\nList.prototype.hide = function() {\n  this.element.style.display = 'none';\n};\n\nList.prototype.add = function(item) {\n  this.items.push(item);\n};\n\nList.prototype.clear = function() {\n  this.items = [];\n  this.active = this.component.options.noInitialSelection ? -1 : 0;\n};\n\nList.prototype.isEmpty = function() {\n  return !this.items.length;\n};\n\nList.prototype.isVisible = function() {\n  return this.element.style.display === 'block';\n};\n\nList.prototype.draw = function() {\n  this.element.innerHTML = '';\n\n  if (this.items.length === 0) {\n    this.hide();\n    return;\n  }\n\n  for (var i = 0; i < this.items.length; i++) {\n    this.drawItem(this.items[i], this.active === i);\n  }\n\n  this.show();\n};\n\nList.prototype.drawItem = function(item, active) {\n  var li = document.createElement('li'),\n    a = document.createElement('a');\n\n  if (active) li.className += ' active';\n\n  a.innerHTML = item.string;\n\n  li.appendChild(a);\n  this.element.appendChild(li);\n\n  li.addEventListener('mousedown', function() {\n    this.selectingListItem = true;\n  }.bind(this));\n\n  li.addEventListener('mouseup', function() {\n    this.handleMouseUp.call(this, item);\n  }.bind(this));\n};\n\nList.prototype.handleMouseUp = function(item) {\n  this.selectingListItem = false;\n  this.component.value(item.original);\n  this.clear();\n  this.draw();\n};\n\nList.prototype.move = function(index) {\n  this.active = index;\n  this.draw();\n};\n\nList.prototype.previous = function() {\n  this.move(this.active <= 0 ? this.items.length - 1 : this.active - 1);\n};\n\nList.prototype.next = function() {\n  this.move(this.active >= this.items.length - 1 ? 0 : this.active + 1);\n};\n\nList.prototype.drawError = function(msg){\n  var li = document.createElement('li');\n\n  li.innerHTML = msg;\n\n  this.element.appendChild(li);\n  this.show();\n}\n\nmodule.exports = List;\n","'use strict';\n\nvar extend = require('xtend');\nvar fuzzy = require('fuzzy');\nvar List = require('./list');\n\nvar Suggestions = function(el, data, options) {\n  options = options || {};\n\n  this.options = extend({\n    minLength: 2,\n    limit: 5,\n    filter: true,\n    hideOnBlur: true,\n    noInitialSelection: true\n  }, options);\n\n  this.el = el;\n  this.data = data || [];\n  this.list = new List(this);\n\n  this.query = '';\n  this.selected = null;\n\n  this.list.draw();\n\n  this.el.addEventListener('keyup', function(e) {\n    this.handleKeyUp(e.keyCode, e);\n  }.bind(this), false);\n\n  this.el.addEventListener('keydown', function(e) {\n    this.handleKeyDown(e);\n  }.bind(this));\n\n  this.el.addEventListener('focus', function() {\n    this.handleFocus();\n  }.bind(this));\n\n  this.el.addEventListener('blur', function() {\n    this.handleBlur();\n  }.bind(this));\n\n  this.el.addEventListener('paste', function(e) {\n    this.handlePaste(e);\n  }.bind(this));\n\n  // use user-provided render function if given, otherwise just use the default\n  this.render = (this.options.render) ? this.options.render.bind(this) : this.render.bind(this)\n\n  this.getItemValue = (this.options.getItemValue) ? this.options.getItemValue.bind(this) : this.getItemValue.bind(this);\n\n  return this;\n};\n\nSuggestions.prototype.handleKeyUp = function(keyCode, e) {\n  // 40 - DOWN\n  // 38 - UP\n  // 27 - ESC\n  // 13 - ENTER\n  // 9 - TAB\n\n  if (keyCode === 40 ||\n      keyCode === 38 ||\n      keyCode === 27 ||\n      keyCode === 9) return;\n      \n  if (keyCode === 13) {\n    if (this.list.items[this.list.active]) {\n      this.list.handleMouseUp(this.list.items[this.list.active]);\n      e.stopPropagation();\n    }\n    return;\n  }\n  \n  this.handleInputChange(this.el.value);\n\n};\n\nSuggestions.prototype.handleKeyDown = function(e) {\n  switch (e.keyCode) {\n    case 13: // ENTER\n      if (this.list.active >= 0) {\n        this.list.selectingListItem = true;\n      }\n      break;\n    case 9: // TAB\n      if (!this.list.isEmpty()) {\n        if (this.list.isVisible()) {\n          e.preventDefault();\n        }\n        this.value(this.list.active >= 0 ? this.list.items[this.list.active].original : null);\n        this.list.hide();\n      }\n    break;\n    case 27: // ESC\n      if (!this.list.isEmpty()) this.list.hide();\n    break;\n    case 38: // UP\n      this.list.previous();\n    break;\n    case 40: // DOWN\n      this.list.next();\n    break;\n  }\n};\n\nSuggestions.prototype.handleBlur = function() {\n  if (!this.list.selectingListItem && this.options.hideOnBlur) {\n    this.list.hide();\n  }\n};\n\nSuggestions.prototype.handlePaste = function(e) {\n  if (e.clipboardData) {\n    this.handleInputChange(e.clipboardData.getData('Text'));\n  } else {\n    var self = this;\n    setTimeout(function () {\n      self.handleInputChange(e.target.value);\n    }, 100);\n  }\n};\n\nSuggestions.prototype.handleInputChange = function(query) {\n  this.query = this.normalize(query);\n\n  this.list.clear();\n\n  if (this.query.length < this.options.minLength) {\n    this.list.draw();\n    return;\n  }\n\n  this.getCandidates(function(data) {\n    for (var i = 0; i < data.length; i++) {\n      this.list.add(data[i]);\n      if (i === (this.options.limit - 1)) break;\n    }\n    this.list.draw();\n  }.bind(this));\n};\n\nSuggestions.prototype.handleFocus = function() {\n  if (!this.list.isEmpty()) this.list.show();\n  this.list.selectingListItem = false;\n};\n\n/**\n * Update data previously passed\n *\n * @param {Array} revisedData\n */\nSuggestions.prototype.update = function(revisedData) {\n  this.data = revisedData;\n  this.handleKeyUp();\n};\n\n/**\n * Clears data\n */\nSuggestions.prototype.clear = function() {\n  this.data = [];\n  this.list.clear();\n};\n\n/**\n * Normalize the results list and input value for matching\n *\n * @param {String} value\n * @return {String}\n */\nSuggestions.prototype.normalize = function(value) {\n  value = value.toLowerCase();\n  return value;\n};\n\n/**\n * Evaluates whether an array item qualifies as a match with the current query\n *\n * @param {String} candidate a possible item from the array passed\n * @param {String} query the current query\n * @return {Boolean}\n */\nSuggestions.prototype.match = function(candidate, query) {\n  return candidate.indexOf(query) > -1;\n};\n\nSuggestions.prototype.value = function(value) {\n  this.selected = value;\n  this.el.value = this.getItemValue(value || { place_name: this.query });\n\n  if (document.createEvent) {\n    var e = document.createEvent('HTMLEvents');\n    e.initEvent('change', true, false);\n    this.el.dispatchEvent(e);\n  } else {\n    this.el.fireEvent('onchange');\n  }\n};\n\nSuggestions.prototype.getCandidates = function(callback) {\n  var options = {\n    pre: '<strong>',\n    post: '</strong>',\n    extract: function(d) { return this.getItemValue(d); }.bind(this)\n  };\n  var results;\n  if(this.options.filter){\n    results = fuzzy.filter(this.query, this.data, options);\n\n    results = results.map(function(item){\n      return {\n        original: item.original,\n        string: this.render(item.original, item.string)\n      };\n    }.bind(this))\n  }else{\n    results = this.data.map(function(d) {\n      var renderedString = this.render(d);\n      return {\n        original: d,\n        string: renderedString\n      };\n    }.bind(this));\n  }\n  callback(results);\n};\n\n/**\n * For a given item in the data array, return what should be used as the candidate string\n *\n * @param {Object|String} item an item from the data array\n * @return {String} item\n */\nSuggestions.prototype.getItemValue = function(item) {\n  return item;\n};\n\n/**\n * For a given item in the data array, return a string of html that should be rendered in the dropdown\n * @param {Object|String} item an item from the data array\n * @param {String} sourceFormatting a string that has pre-formatted html that should be passed directly through the render function \n * @return {String} html\n */\nSuggestions.prototype.render = function(item, sourceFormatting) {\n  if (sourceFormatting){\n    // use existing formatting on the source string\n    return sourceFormatting;\n  }\n  var boldString = (item.original) ? this.getItemValue(item.original) : this.getItemValue(item);\n  var indexString = this.normalize(boldString);\n  var indexOfQuery = indexString.lastIndexOf(this.query);\n  while (indexOfQuery > -1) {\n    var endIndexOfQuery = indexOfQuery + this.query.length;\n    boldString = boldString.slice(0, indexOfQuery) + '<strong>' + boldString.slice(indexOfQuery, endIndexOfQuery) + '</strong>' + boldString.slice(endIndexOfQuery);\n    indexOfQuery = indexString.slice(0, indexOfQuery).lastIndexOf(this.query);\n  }\n  return boldString\n}\n\n/**\n * Render an custom error message in the suggestions list\n * @param {String} msg An html string to render as an error message\n */\nSuggestions.prototype.renderError = function(msg){\n  this.list.drawError(msg);\n}\n\nmodule.exports = Suggestions;\n","'use strict';\n\n/**\n * A typeahead component for inputs\n * @class Suggestions\n *\n * @param {HTMLInputElement} el A valid HTML input element\n * @param {Array} data An array of data used for results\n * @param {Object} options\n * @param {Number} [options.limit=5] Max number of results to display in the auto suggest list.\n * @param {Number} [options.minLength=2] Number of characters typed into an input to trigger suggestions.\n * @param {Boolean} [options.hideOnBlur=true] If `true`, hides the suggestions when focus is lost.\n * @return {Suggestions} `this`\n * @example\n * // in the browser\n * var input = document.querySelector('input');\n * var data = [\n *   'Roy Eldridge',\n *   'Roy Hargrove',\n *   'Rex Stewart'\n * ];\n *\n * new Suggestions(input, data);\n *\n * // with options\n * var input = document.querySelector('input');\n * var data = [{\n *   name: 'Roy Eldridge',\n *   year: 1911\n * }, {\n *   name: 'Roy Hargrove',\n *   year: 1969\n * }, {\n *   name: 'Rex Stewart',\n *   year: 1907\n * }];\n *\n * var typeahead = new Suggestions(input, data, {\n *   filter: false, // Disable filtering\n *   minLength: 3, // Number of characters typed into an input to trigger suggestions.\n *   limit: 3, //  Max number of results to display.\n *   hideOnBlur: false // Don't hide results when input loses focus\n * });\n *\n * // As we're passing an object of an arrays as data, override\n * // `getItemValue` by specifying the specific property to search on.\n * typeahead.getItemValue = function(item) { return item.name };\n *\n * input.addEventListener('change', function() {\n *   console.log(typeahead.selected); // Current selected item.\n * });\n *\n * // With browserify\n * var Suggestions = require('suggestions');\n *\n * new Suggestions(input, data);\n */\nvar Suggestions = require('./src/suggestions');\nmodule.exports = Suggestions;\n\nif (typeof window !== 'undefined') {\n  window.Suggestions = Suggestions;\n}\n","!function(root, name, make) {\r\n  if (typeof module != 'undefined' && module.exports) module.exports = make()\r\n  else root[name] = make()\r\n}(this, 'subtag', function() {\r\n\r\n  var empty = ''\r\n  var pattern = /^([a-zA-Z]{2,3})(?:[_-]+([a-zA-Z]{3})(?=$|[_-]+))?(?:[_-]+([a-zA-Z]{4})(?=$|[_-]+))?(?:[_-]+([a-zA-Z]{2}|[0-9]{3})(?=$|[_-]+))?/\r\n\r\n  function match(tag) {\r\n    return tag.match(pattern) || []\r\n  }\r\n\r\n  function split(tag) {\r\n    return match(tag).filter(function(v, i) { return v && i })\r\n  }\r\n\r\n  function api(tag) {\r\n    tag = match(tag)\r\n    return {\r\n      language: tag[1] || empty,\r\n      extlang: tag[2] || empty,\r\n      script: tag[3] || empty,\r\n      region: tag[4] || empty\r\n    }\r\n  }\r\n\r\n  function expose(target, key, value) {\r\n    Object.defineProperty(target, key, {\r\n      value: value,\r\n      enumerable: true\r\n    })\r\n  }\r\n\r\n  function part(position, pattern, type) {\r\n    function method(tag) {\r\n      return match(tag)[position] || empty\r\n    }\r\n    expose(method, 'pattern', pattern)\r\n    expose(api, type, method)\r\n  }\r\n\r\n  part(1, /^[a-zA-Z]{2,3}$/, 'language')\r\n  part(2, /^[a-zA-Z]{3}$/, 'extlang')\r\n  part(3, /^[a-zA-Z]{4}$/, 'script')\r\n  part(4, /^[a-zA-Z]{2}$|^[0-9]{3}$/, 'region')\r\n\r\n  expose(api, 'split', split)\r\n\r\n  return api\r\n});\r\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","export const exceptions = {\n  'fr': {\n    'name': 'France',\n    'bbox': [[-4.59235, 41.380007], [9.560016, 51.148506]]\n  },\n  'us': {\n    'name': 'United States',\n    'bbox': [[-171.791111, 18.91619], [-66.96466, 71.357764]]\n  },\n  'ru': {\n    'name': 'Russia',\n    'bbox': [[19.66064, 41.151416], [190.10042, 81.2504]]\n  },\n  'ca': {\n    'name': 'Canada',\n    'bbox': [[-140.99778, 41.675105], [-52.648099, 83.23324]]\n  }\n};\n","/**\n * Localized values for the placeholder string\n * \n * @private\n */\nconst placeholder = {\n  // list drawn from https://docs.mapbox.com/api/search/#language-coverage\n  'de': 'Suche', // german\n  'it': 'Ricerca', //italian\n  'en': 'Search', // english\n  'nl': 'Zoeken', //dutch\n  'fr': 'Chercher', //french\n  'ca': 'Cerca', //catalan\n  'he': 'לחפש', //hebrew\n  'ja': 'サーチ', //japanese\n  'lv': 'Meklēt', //latvian\n  'pt': 'Procurar', //portuguese \n  'sr': 'Претрага', //serbian\n  'zh': '搜索', //chinese-simplified\n  'cs': 'Vyhledávání', //czech\n  'hu': 'Keresés', //hungarian\n  'ka': 'ძიება', // georgian\n  'nb': 'Søke', //norwegian\n  'sk': 'Vyhľadávanie', //slovak\n  'th': 'ค้นหา', //thai\n  'fi': 'Hae', //finnish\n  'is': 'Leita', //icelandic\n  'ko': '수색', //korean\n  'pl': 'Szukaj', //polish\n  'sl': 'Iskanje', //slovenian\n  'fa': 'جستجو', //persian(aka farsi)\n  'ru': 'Поиск', //russian,\n  'es': 'Buscar' //spanish\n}\n\nconst errorNoResults = {\n  'en': 'No results found',\n  'de': 'Keine Ergebnisse gefunden',\n  'es': 'No hay resultados',\n  'fr': 'Aucun résultat trouvé'\n}\n\nconst errorConnectionFailed = {\n  'en': 'There was an error reaching the server',\n  'de': 'Verbindung fehlgeschlagen',\n  'es': 'Error al conectarse al servidor',\n  'fr': 'Une erreur est survenue lors de la connexion au serveur'\n}\n\nexport default { placeholder, errorNoResults, errorConnectionFailed };\n","import Typeahead, { type TypeaheadOptions } from \"suggestions-list\";\nimport subtag from \"subtag\";\nimport debounce from \"lodash.debounce\";\nimport extend from \"xtend\";\nimport { EventEmitter } from \"events\";\nimport type { Marker, Popup, Map, FlyToOptions, MarkerOptions, default as MaplibreGl } from \"maplibre-gl\";\n\nimport { exceptions } from \"./exceptions\";\nimport localization from \"./localization\";\n/**\n * A regular expression to match coordinates.\n */\nconst COORDINATES_REGEXP = /(-?\\d+\\.?\\d*)[, ]+(-?\\d+\\.?\\d*)[ ]*$/;\n\n/**\n * A Carmen GeoJSON Feature.\n * @see https://web.archive.org/web/20210224184722/https://github.com/mapbox/carmen/blob/master/carmen-geojson.md\n */\nexport type CarmenGeojsonFeature = GeoJSON.Feature & {\n  /**\n   * Text representing the feature (e.g. \"Austin\").\n   */\n  text: string;\n  /**\n   * Optional. The language code of the text returned in text.\n   */\n  language?: string;\n  /**\n   * Human-readable text representing the full result hierarchy (e.g. \"Austin, Texas, United States\").\n   */\n  place_name: string;\n  /**\n   * An array of index types that this feature may be returned as. Most features have only one type matching its id.\n   */\n  place_type: string[];\n  /**\n   * Optional. Array bounding box of the form [minx,miny,maxx,maxy].\n   */\n  bbox?: [number, number, number, number];\n  /**\n   * Optional. Array center of the feature [lng, lat].\n   */\n  center?: [number, number];\n};\n\nexport type MaplibreGeocoderOptions = {\n  /**\n   * On geocoded result what zoom level should the map animate to when a `bbox` isn't found in the response. If a `bbox` is found the map will fit to the `bbox`.\n   * @default 16\n   */\n  zoom?: number;\n  /**\n   * If `false`, animating the map to a selected result is disabled. If `true`, animating the map will use the default animation parameters. If an object, it will be passed as `options` to the map [`flyTo`](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map#flyto) or [`fitBounds`](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map#map#fitbounds) method providing control over the animation of the transition.\n   * @default true\n   */\n  flyTo?: boolean | FlyToOptions;\n  /**\n   * If `true`, the geocoder proximity will automatically update based on the map view.\n   * @default true\n   */\n  trackProximity?: boolean;\n  /**\n   * If `false`, indicates that search will only occur on enter key press. If `true`, indicates that the Geocoder will search on the input box being updated above the minLength option.\n   * @default false\n   */\n  showResultsWhileTyping?: boolean;\n  /**\n   * Minimum number of characters to enter before results are shown.\n   * @default 2\n   */\n  minLength?: number;\n  /**\n   * If `true`, enable reverse geocoding mode. In reverse geocoding, search input is expected to be coordinates in the form `lat, lon`, with suggestions being the reverse geocodes.\n   * @default false\n   */\n  reverseGeocode?: boolean;\n  /**\n   * Maximum number of results to show.\n   * @default 5\n   */\n  limit?: number;\n  /**\n   * Allow Maplibre to collect anonymous usage statistics from the plugin.\n   * @default true\n   */\n  enableEventLogging?: boolean;\n  /**\n   * If `true`, a [Marker](https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/) will be added to the map at the location of the user-selected result using a default set of Marker options.  If the value is an object, the marker will be constructed using these options. If `false`, no marker will be added to the map. Requires that `options.maplibregl` also be set.\n   * @default true\n   */\n  marker?: boolean | Marker;\n  /**\n   * If `true`, a [Popup](https://maplibre.org/maplibre-gl-js/docs/API/classes/Popup) will be added to the map when clicking on a marker using a default set of popup options.  If the value is an object, the popup will be constructed using these options. If `false`, no popup will be added to the map. Requires that `options.maplibregl` also be set.\n   * @default false\n   */\n  popup?: boolean | Popup;\n  /**\n   * A [maplibre-gl](https://github.com/maplibre/maplibre-gl-js) instance to use when creating [Markers](https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/). Required if `options.marker` is `true`.\n   * @default false\n   */\n  maplibregl?: typeof MaplibreGl;\n  /**\n   * If `true`, the geocoder control will collapse until hovered or in focus.\n   * @default false\n   */\n  collapsed?: boolean;\n  /** \n   * If `true`, the geocoder control will clear it's contents and blur when user presses the escape key. \n   * @default false\n   */\n  clearAndBlurOnEsc?: boolean;\n  /**\n   * If `true`, the geocoder control will clear its value when the input blurs.\n   * @default false\n   */\n  clearOnBlur?: boolean;\n  /**\n   * If `true`, indicates that the `localGeocoder` results should be the only ones returned to the user. If `false`, indicates that the `localGeocoder` results should be combined with those from the Maplibre API with the `localGeocoder` results ranked higher.\n   * @default false\n   */\n  localGeocoderOnly?: boolean;\n  /**\n   * Sets the amount of time, in milliseconds, to wait before querying the server when a user types into the Geocoder input box. This parameter may be useful for reducing the total number of API calls made for a single query.\n   * @default 200\n   */\n  debounceSearch?: number;\n  /** \n   * If `true`, [Markers](https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/) will be added to the map at the location the top results for the query. If the value is an object, the marker will be constructed using these options. If `false`, no marker will be added to the map. Requires that `options.maplibregl` also be set.\n   * @default true\n   */\n  showResultMarkers?: boolean | MarkerOptions;\n  /**\n   * Specify the language to use for response text and query result weighting. Options are IETF language tags comprised of a mandatory ISO 639-1 language code and optionally one or more IETF subtags for country or script. More than one value can also be specified, separated by commas. Defaults to the browser's language settings.\n   */\n  language?: string;\n  /**\n   * Override the default placeholder attribute value.\n   * @default \"Search\"\n   */\n  placeholder?: string;\n  /**\n   * a proximity argument: this is a geographical point given as an object with `latitude` and `longitude` properties. \n   * Search results closer to this point will be given higher priority.\n   */\n  proximity?: { longitude: number; latitude: number };\n  /**\n   * A comma seperated list of types that filter results to match those specified. See https://docs.mapbox.com/api/search/#data-types for available types.\n   * If reverseGeocode is enabled, you should specify one type. If you configure more than one type, the first type will be used.\n   */\n  types?: string;\n  /**\n   * A comma separated list of country codes to limit results to specified country or countries.\n   */\n  countries?: string;\n  /**\n   * A bounding box argument: this is a bounding box given as an array in the format `[minX, minY, maxX, maxY]`.\n   * Search results will be limited to the bounding box.\n   */\n  bbox?: number[];\n  /**\n   * Set the factors that are used to sort nearby results.\n   */\n  reverseMode?: \"distance\" | \"score\"\n  /**\n   * If setting promiximity, this is the minimum zoom level at which to start taking it into account.\n   * @default 9\n   */\n  proximityMinZoom?: number;\n  /**\n   * A function that specifies how the selected result should be rendered in the search bar. \n   * HTML tags in the output string will not be rendered.\n   * The default function returns the items's `text` property if it exists, otherwise the items's `place_name` property\n   */\n  getItemValue?: (item: CarmenGeojsonFeature | MaplibreGeocoderSuggestion) => string;\n  /**\n   * A function that specifies how the results should be rendered in the dropdown menu. \n   * Any HTML in the returned string will be rendered.\n   */\n  render?: (item: CarmenGeojsonFeature | MaplibreGeocoderSuggestion) => string;\n  /**\n   * A function that specifies how the results should be rendered in the popup menu. Any HTML in the returned string will be rendered.\n   */\n  popupRender?: (item: CarmenGeojsonFeature) => string;\n  /**\n   * A function accepting the query string which performs local geocoding to supplement results from the Maplibre Geocoding API. Expected to return an Array of {@link CarmenGeojsonFeature}.\n   */\n  localGeocoder?: (query: string) => CarmenGeojsonFeature[];\n  /**\n   * A function accepting the query string, current features list, and geocoder options which performs geocoding to supplement results from the Maplibre Geocoding API. Expected to return a Promise which resolves to an Array of {@link CarmenGeojsonFeature}.\n   */\n  externalGeocoder?: (query: string, features: CarmenGeojsonFeature[], config: MaplibreGeocoderApiConfig) => Promise<CarmenGeojsonFeature[]>;\n  /**\n   * A function which accepts a {@link CarmenGeojsonFeature} to filter out results from the Geocoding API response before they are included in the suggestions list. Return `true` to keep the item, `false` otherwise.\n   */\n  filter?: (item: CarmenGeojsonFeature) => boolean;\n};\n\nexport type MaplibreGeocoderApiConfig = {\n  /**\n   * A comma separated list of country codes to limit results to specified country or countries.\n   */\n  countries?: string;\n  /**\n   * A comma seperated list of types that filter results to match those specified. See https://docs.mapbox.com/api/search/#data-types for available types. If reverseGeocode is enabled, you should specify one type. If you configure more than one type, the first type will be used.\n   */\n  types?: string;\n  /**\n   * Specify the language to use for response text and query result weighting. Options are IETF language tags comprised of a mandatory ISO 639-1 language code and optionally one or more IETF subtags for country or script. More than one value can also be specified, separated by commas. Defaults to the browser's language settings.\n   */\n  language?: string;\n  /**\n   * A bounding box given as an array in the format `[minX, minY, maxX, maxY]`. Search results will be limited to the bounding box.\n   */\n  bbox?: number[];\n  /**\n   * Number of results to limit by\n   */\n  limit?: number;\n  /**\n   * A geographical point given as an object with `latitude` and `longitude` properties. Search results closer to this point will be given higher priority.\n   */\n  proximity?: number[];\n  /**\n   * Set the factors that are used to sort nearby results.\n   */\n  reverseMode?: \"distance\" | \"score\"\n  /**\n   * Search query string\n   */\n  query?: string | number[];\n}\n\nexport type MaplibreGeocoderSuggestion = { text: string, placeId?: string };\n\nexport type MaplibreGeocoderFeatureResults = { type: \"FeatureCollection\", features: CarmenGeojsonFeature[] };\nexport type MaplibreGeocoderSuggestionResults = { suggestions: MaplibreGeocoderSuggestion[] };\nexport type MaplibreGeocoderPlaceResults = { place: CarmenGeojsonFeature[] };\nexport type MaplibreGeocoderResults = MaplibreGeocoderFeatureResults | MaplibreGeocoderSuggestionResults | MaplibreGeocoderPlaceResults;\n\nexport type MaplibreGeocoderResultsEvent = MaplibreGeocoderResults & { config?: MaplibreGeocoderApiConfig, features?: CarmenGeojsonFeature[] };\n\nexport type TypeaheadFactory = (input: HTMLInputElement, data: (CarmenGeojsonFeature | MaplibreGeocoderSuggestion)[], options: TypeaheadOptions) => Typeahead<CarmenGeojsonFeature | MaplibreGeocoderSuggestion>;\n// Re-export\nexport type { TypeaheadOptions, default as Typeahead } from \"suggestions-list\";\n\n/**\n * An API which contains reverseGeocode and forwardGeocode functions to be used by this plugin\n * \n * @example\n *\n * const GeoApi = {\n *   forwardGeocode: (config) => { return { features: [] } },\n *   reverseGeocode: (config) => { return { features: [] } }\n *   getSuggestions: (config) => { return { suggestions: [{text: \"string\", placeId?: \"placeId\"}] }}\n *   searchByPlaceId: (config) => { return { place: [{type: \"Feature\", geometry: {type: \"Point\", properties: {otherOptinalFields: \"someValue\"}, coordinates: [1, 2]}}] }}\n * }\n * const geocoder = new MaplibreGeocoder(GeoApi, {});\n * map.addControl(geocoder);\n */\nexport type MaplibreGeocoderApi = {\n  /**\n   * Forward geocode function should return an object including a collection of {@link CarmenGeojsonFeature}.\n   * @param config - Query parameters\n   */\n  forwardGeocode: (config: MaplibreGeocoderApiConfig) => Promise<MaplibreGeocoderFeatureResults>;\n  /**\n   * Reverse geocode function should return an object including a collection of {@link CarmenGeojsonFeature}.\n   */\n  reverseGeocode?: (config: MaplibreGeocoderApiConfig) => Promise<MaplibreGeocoderFeatureResults>;\n  getSuggestions?: (config: MaplibreGeocoderApiConfig) => Promise<MaplibreGeocoderSuggestionResults>;\n  searchByPlaceId?: (config: MaplibreGeocoderApiConfig) => Promise<MaplibreGeocoderPlaceResults>;\n};\n\n\nexport type MaplibreGeocoderEventTypeMap = {\n  /**\n   * Fired when the input is cleared\n   */\n  clear: void;\n  /**\n   * Fired with when the geocoder is looking up a query\n   */\n  loading: { query: string };\n  /**\n   * Fired with the results data when the geocoder returns a response\n   */\n  results: MaplibreGeocoderResultsEvent;\n  /**\n   * Fired with the result data when input is set\n   */\n  result: { result: CarmenGeojsonFeature };\n  /**\n   * Fired with the error data when an error occurs\n   */\n  error: { error: Error };\n};\n\n/**\n * A geocoder component that works with maplibre\n */\nexport default class MaplibreGeocoder {\n\n  // Fill with default values\n  private options: MaplibreGeocoderOptions = {\n    zoom: 16,\n    flyTo: true,\n    trackProximity: true,\n    showResultsWhileTyping: false,\n    minLength: 2,\n    reverseGeocode: false,\n    limit: 5,\n    enableEventLogging: true,\n    marker: true,\n    popup: false,\n    maplibregl: undefined,\n    collapsed: false,\n    clearAndBlurOnEsc: false,\n    clearOnBlur: false,\n    proximityMinZoom: 9,\n\n    getItemValue: (item) => {\n      return item.text != undefined ? item.text : (item as CarmenGeojsonFeature).place_name;\n    },\n    render: (item: CarmenGeojsonFeature | MaplibreGeocoderSuggestion) => {\n      // Render as a suggestion\n      if (!('geometry' in item)) {\n        const suggestionString = item.text;\n        const indexOfMatch = suggestionString\n          .toLowerCase()\n          .indexOf(this._typeahead.query.toLowerCase());\n        const lengthOfMatch = this._typeahead.query.length;\n        const beforeMatch = suggestionString.substring(0, indexOfMatch);\n        const match = suggestionString.substring(\n          indexOfMatch,\n          indexOfMatch + lengthOfMatch\n        );\n        const afterMatch = suggestionString.substring(\n          indexOfMatch + lengthOfMatch\n        );\n\n        return (\n          '<div class=\"maplibregl-ctrl-geocoder--suggestion\">' +\n          '<svg class=\"maplibregl-ctrl-geocoder--suggestion-icon\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M22.8702 20.1258H21.4248L20.9125 19.6318C22.7055 17.546 23.785 14.8382 23.785 11.8925C23.785 5.32419 18.4608 0 11.8925 0C5.32419 0 0 5.32419 0 11.8925C0 18.4608 5.32419 23.785 11.8925 23.785C14.8382 23.785 17.546 22.7055 19.6318 20.9125L20.1258 21.4248V22.8702L29.2739 32L32 29.2739L22.8702 20.1258ZM11.8925 20.1258C7.33676 20.1258 3.65923 16.4483 3.65923 11.8925C3.65923 7.33676 7.33676 3.65923 11.8925 3.65923C16.4483 3.65923 20.1258 7.33676 20.1258 11.8925C20.1258 16.4483 16.4483 20.1258 11.8925 20.1258Z\" fill=\"#687078\"/></svg>' +\n          '<div class=\"maplibregl-ctrl-geocoder--suggestion-info\">' +\n          '<div class=\"maplibregl-ctrl-geocoder--suggestion-title\">' +\n          beforeMatch +\n          '<span class=\"maplibregl-ctrl-geocoder--suggestion-match\">' +\n          match +\n          \"</span>\" +\n          afterMatch +\n          \"</div>\" +\n          \"</div>\" +\n          \"</div>\"\n        );\n      }\n      // render as a search result\n      const placeName = item.place_name.split(\",\");\n\n      return (\n        '<div class=\"maplibregl-ctrl-geocoder--result\">' +\n        '<svg class=\"maplibregl-ctrl-geocoder--result-icon\" viewBox=\"0 0 24 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 0C5.36571 0 0 5.38676 0 12.0471C0 21.0824 12 32 12 32C12 32 24 21.0824 24 12.0471C24 5.38676 18.6343 0 12 0ZM12 16.3496C9.63428 16.3496 7.71429 14.4221 7.71429 12.0471C7.71429 9.67207 9.63428 7.74454 12 7.74454C14.3657 7.74454 16.2857 9.67207 16.2857 12.0471C16.2857 14.4221 14.3657 16.3496 12 16.3496Z\" fill=\"#687078\"/></svg>' +\n        \"<div>\" +\n        '<div class=\"maplibregl-ctrl-geocoder--result-title\">' +\n        placeName[0] +\n        \"</div>\" +\n        '<div class=\"maplibregl-ctrl-geocoder--result-address\">' +\n        placeName.splice(1, placeName.length).join(\",\") +\n        \"</div>\" +\n        \"</div>\" +\n        \"</div>\"\n      );\n    },\n    popupRender: (item) => {\n      const placeName = item.place_name.split(\",\");\n      return (\n        '<div class=\"maplibregl-ctrl-geocoder--suggestion popup-suggestion\"><div class=\"maplibregl-ctrl-geocoder--suggestion-title popup-suggestion-title\">' +\n        placeName[0] +\n        '</div><div class=\"maplibregl-ctrl-geocoder--suggestion-address popup-suggestion-address\">' +\n        placeName.splice(1, placeName.length).join(\",\") +\n        \"</div></div>\"\n      );\n    },\n    showResultMarkers: true,\n    debounceSearch: 200,\n  };\n\n  private _eventEmitter: EventEmitter;\n  private _map: Map | null;\n  private _maplibregl: typeof MaplibreGl | undefined;\n  private _inputEl: HTMLInputElement;\n  private _clearEl: HTMLButtonElement;\n  private _loadingEl: SVGElement;\n  private _typeahead: Typeahead<CarmenGeojsonFeature | MaplibreGeocoderSuggestion>;\n  private container: HTMLElement;\n  private mapMarker: Marker | null;\n  private resultMarkers: Marker[];\n  private fresh: boolean;\n  private lastSelected: string | null;\n  private geocoderApi: MaplibreGeocoderApi;\n  private typeaheadFactory: TypeaheadFactory;\n\n  constructor(geocoderApi: MaplibreGeocoderApi, options: MaplibreGeocoderOptions, typeaheadFactory: TypeaheadFactory = (input, data, options) => new Typeahead(input, data, options)) {\n    this._eventEmitter = new EventEmitter();\n    this.options = extend({}, this.options, options);\n    this.fresh = true;\n    this.lastSelected = null;\n    this.geocoderApi = geocoderApi;\n    this.typeaheadFactory = typeaheadFactory;\n  }\n\n  /**\n   * Add the geocoder to a container. The container can be either a `Map`, an `HTMLElement` or a CSS selector string.\n   *\n   * If the container is a [`Map`](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map), this function will behave identically to [`Map.addControl(geocoder)`](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map#addcontrol).\n   * If the container is an instance of [`HTMLElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement), then the geocoder will be appended as a child of that [`HTMLElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement).\n   * If the container is a [CSS selector string](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors), the geocoder will be appended to the element returned from the query.\n   *\n   * This function will throw an error if the container is none of the above.\n   * It will also throw an error if the referenced HTML element cannot be found in the `document.body`.\n   *\n   * For example, if the HTML body contains the element `<div id='geocoder-container'></div>`, the following script will append the geocoder to `#geocoder-container`:\n   * @example\n   * ```js\n   * const GeoApi = {\n   *   forwardGeocode: (config) => { return { features: [] } },\n   *   reverseGeocode: (config) => { return { features: [] } }\n   * }\n   * const geocoder = new MaplibreGeocoder(GeoAPI, {});\n   * geocoder.addTo('#geocoder-container');\n   * ```\n   * @param container - A reference to the container to which to add the geocoder\n   */\n  public addTo(container: string | HTMLElement | Map): void {\n    function addToExistingContainer(geocoder: MaplibreGeocoder, container: Element) {\n      if (!document.body.contains(container)) {\n        throw new Error(\n          \"Element provided to #addTo() exists, but is not in the DOM\"\n        );\n      }\n      const el = geocoder.onAdd(); //returns the input elements, which are then added to the requested html container\n      container.appendChild(el);\n    }\n\n    // if the container is an HTMLElement, then set the parent to be that element\n    if (container instanceof HTMLElement) {\n      addToExistingContainer(this, container);\n    }\n    // if the container is a string, treat it as a CSS query\n    else if (typeof container == \"string\") {\n      const parent = document.querySelectorAll(container);\n      if (parent.length === 0) {\n        throw new Error(\"Element \" + container + \"not found.\");\n      }\n\n      if (parent.length > 1) {\n        throw new Error(\"Geocoder can only be added to a single html element\");\n      }\n\n      addToExistingContainer(this, parent[0]);\n    }\n    // if the container is a map, add the control like normal\n    else if ('addControl' in container) {\n      //  it's a maplibre-gl map, add like normal\n      container.addControl(this);\n    } else {\n      throw new Error(\n        \"Error: addTo must be a maplibre-gl-js map, an html element, or a CSS selector query for a single html element\"\n      );\n    }\n  }\n\n  onAdd(map?: Map): HTMLElement {\n    if (map && typeof map != \"string\") {\n      this._map = map;\n    }\n\n    this.setLanguage();\n\n    if (this.options.localGeocoderOnly && !this.options.localGeocoder) {\n      throw new Error(\n        \"A localGeocoder function must be specified to use localGeocoderOnly mode\"\n      );\n    }\n\n    this._onChange = this._onChange.bind(this);\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onPaste = this._onPaste.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n    this._showButton = this._showButton.bind(this);\n    this._hideButton = this._hideButton.bind(this);\n    this._onQueryResult = this._onQueryResult.bind(this);\n    this.clear = this.clear.bind(this);\n    this._updateProximity = this._updateProximity.bind(this);\n    this._collapse = this._collapse.bind(this);\n    this._unCollapse = this._unCollapse.bind(this);\n    this._clear = this._clear.bind(this);\n    this._clearOnBlur = this._clearOnBlur.bind(this);\n\n    const el = (this.container = document.createElement(\"div\"));\n    el.className =\n      \"maplibregl-ctrl-geocoder maplibregl-ctrl maplibregl-ctrl-geocoder maplibregl-ctrl\";\n\n    const searchIcon = this.createIcon(\n      \"search\",\n      '<path d=\"M7.4 2.5c-2.7 0-4.9 2.2-4.9 4.9s2.2 4.9 4.9 4.9c1 0 1.8-.2 2.5-.8l3.7 3.7c.2.2.4.3.8.3.7 0 1.1-.4 1.1-1.1 0-.3-.1-.5-.3-.8L11.4 10c.4-.8.8-1.6.8-2.5.1-2.8-2.1-5-4.8-5zm0 1.6c1.8 0 3.2 1.4 3.2 3.2s-1.4 3.2-3.2 3.2-3.3-1.3-3.3-3.1 1.4-3.3 3.3-3.3z\"/>'\n    );\n\n    this._inputEl = document.createElement(\"input\");\n    this._inputEl.type = \"search\";\n    this._inputEl.className =\n      \"maplibregl-ctrl-geocoder--input\";\n\n    this.setPlaceholder();\n\n    if (this.options.collapsed) {\n      this._collapse();\n      this.container.addEventListener(\"mouseenter\", this._unCollapse);\n      this.container.addEventListener(\"mouseleave\", this._collapse);\n      this._inputEl.addEventListener(\"focus\", this._unCollapse);\n    }\n\n    if (this.options.collapsed || this.options.clearOnBlur) {\n      this._inputEl.addEventListener(\"blur\", this._onBlur);\n    }\n\n    this._inputEl.addEventListener(\n      \"keydown\",\n      debounce(this._onKeyDown, this.options.debounceSearch)\n    );\n    this._inputEl.addEventListener(\"paste\", this._onPaste);\n    this._inputEl.addEventListener(\"change\", this._onChange);\n    this.container.addEventListener(\"mouseenter\", this._showButton);\n    this.container.addEventListener(\"mouseleave\", this._hideButton);\n\n    const actions = document.createElement(\"div\");\n    actions.classList.add(\n      \"maplibregl-ctrl-geocoder--pin-right\"\n    );\n\n    this._clearEl = document.createElement(\"button\");\n    this._clearEl.setAttribute(\"type\", \"button\");\n    this._clearEl.setAttribute(\"aria-label\", \"Clear\");\n    this._clearEl.addEventListener(\"click\", this.clear);\n    this._clearEl.className = \"maplibregl-ctrl-geocoder--button\";\n\n    const buttonIcon = this.createIcon(\n      \"close\",\n      '<path d=\"M3.8 2.5c-.6 0-1.3.7-1.3 1.3 0 .3.2.7.5.8L7.2 9 3 13.2c-.3.3-.5.7-.5 1 0 .6.7 1.3 1.3 1.3.3 0 .7-.2 1-.5L9 10.8l4.2 4.2c.2.3.7.3 1 .3.6 0 1.3-.7 1.3-1.3 0-.3-.2-.7-.3-1l-4.4-4L15 4.6c.3-.2.5-.5.5-.8 0-.7-.7-1.3-1.3-1.3-.3 0-.7.2-1 .3L9 7.1 4.8 2.8c-.3-.1-.7-.3-1-.3z\"/>'\n    );\n    this._clearEl.appendChild(buttonIcon);\n\n    this._loadingEl = this.createIcon(\n      \"loading\",\n      '<path fill=\"#333\" d=\"M4.4 4.4l.8.8c2.1-2.1 5.5-2.1 7.6 0l.8-.8c-2.5-2.5-6.7-2.5-9.2 0z\"/><path opacity=\".1\" d=\"M12.8 12.9c-2.1 2.1-5.5 2.1-7.6 0-2.1-2.1-2.1-5.5 0-7.7l-.8-.8c-2.5 2.5-2.5 6.7 0 9.2s6.6 2.5 9.2 0 2.5-6.6 0-9.2l-.8.8c2.2 2.1 2.2 5.6 0 7.7z\"/>'\n    );\n\n    actions.appendChild(this._clearEl);\n    actions.appendChild(this._loadingEl);\n\n    el.appendChild(searchIcon);\n    el.appendChild(this._inputEl);\n    el.appendChild(actions);\n\n    this._typeahead = this.typeaheadFactory(this._inputEl, [], {\n      filter: false,\n      minLength: this.options.minLength,\n      limit: this.options.limit,\n      noInitialSelection: true,\n    });\n\n    this.container.addEventListener(\"click\", () => {\n      this._typeahead.update(this._typeahead.data);\n    });\n\n    this.setRenderFunction(this.options.render);\n    this._typeahead.getItemValue = this.options.getItemValue;\n\n    this.mapMarker = null;\n    this.resultMarkers = [];\n    this._handleMarker = this._handleMarker.bind(this);\n    this._handleResultMarkers = this._handleResultMarkers.bind(this);\n    if (this._map) {\n      if (this.options.trackProximity) {\n        this._updateProximity();\n        this._map.on(\"moveend\", this._updateProximity);\n      }\n      this._maplibregl = this.options.maplibregl;\n      if (!this._maplibregl && this.options.marker) {\n\n        console.error(\n          \"No maplibregl detected in options. Map markers are disabled. Please set options.maplibregl.\"\n        );\n        this.options.marker = false;\n      }\n    }\n    return el;\n  }\n\n  createIcon(name: string, path: string) {\n    const icon = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    icon.setAttribute(\n      \"class\",\n      \"maplibregl-ctrl-geocoder--icon maplibregl-ctrl-geocoder--icon-\" + name\n    );\n    icon.setAttribute(\"viewBox\", \"0 0 18 18\");\n    icon.setAttribute(\"xml:space\", \"preserve\");\n    icon.setAttribute(\"width\", \"18\");\n    icon.setAttribute(\"height\", \"18\");\n    // IE does not have innerHTML for SVG nodes\n    if (!(\"innerHTML\" in icon)) {\n      const SVGNodeContainer = document.createElement(\"div\");\n      SVGNodeContainer.innerHTML =\n        \"<svg>\" + path.valueOf().toString() + \"</svg>\";\n      const SVGNode = SVGNodeContainer.firstChild,\n        SVGPath = SVGNode.firstChild;\n      (icon as any).appendChild(SVGPath);\n    } else {\n      icon.innerHTML = path;\n    }\n    return icon;\n  }\n\n  onRemove() {\n    this.container.remove();\n\n    if (this.options.trackProximity && this._map) {\n      this._map.off(\"moveend\", this._updateProximity);\n    }\n\n    this._removeMarker();\n\n    this._map = null;\n\n    return this;\n  }\n\n  _onPaste(e: ClipboardEvent): void {\n    const value = (e.clipboardData || (window as any).clipboardData).getData(\"text\");\n    if (\n      value.length >= this.options.minLength &&\n      this.options.showResultsWhileTyping\n    ) {\n      this._geocode(value);\n    }\n  }\n\n  _onKeyDown(e: KeyboardEvent): void {\n    if (e.key === 'Escape' && this.options.clearAndBlurOnEsc) {\n      this._clear(e);\n      this._inputEl.blur();\n      return;\n    }\n\n    const value = this._inputEl.value;\n\n    if (!value) {\n      this.fresh = true;\n      // the user has removed all the text\n      if (e.key !== 'Tab') this.clear(e);\n      this._clearEl.style.display = \"none\";\n      return;\n    }\n\n    if (\n      e.metaKey ||\n      e.key === 'Tab' ||\n      e.key === 'Escape' ||\n      e.key === 'ArrowLeft' ||\n      e.key === 'ArrowRight' ||\n      e.key === 'ArrowUp' ||\n      e.key === 'ArrowDown'\n    )\n      return;\n\n    if (e.key === 'Enter') {\n      if (!this.options.showResultsWhileTyping) {\n        if (!this._typeahead.selected) {\n          this._geocode(value);\n        }\n      } else {\n        // Pressing enter on the search box will do a search for the currently string input\n        if (\n          this._typeahead.selected == null &&\n          this.geocoderApi.getSuggestions\n        ) {\n          this._geocode(value, true);\n\n          // If suggestions API is not defined pressing enter while the input box is selected will try to fit the results into the current map view\n        } else if (this._typeahead.selected == null) {\n          if (this.options.showResultMarkers) {\n            this._fitBoundsForMarkers();\n          }\n        }\n        return;\n      }\n    }\n\n    // Show results while typing and greater than min length\n    if (\n      value.length >= this.options.minLength &&\n      this.options.showResultsWhileTyping\n    ) {\n      this._geocode(value);\n    }\n  }\n\n  _showButton() {\n    if (this._inputEl.value.length > 0) this._clearEl.style.display = \"block\";\n  }\n\n  _hideButton() {\n    if (this._typeahead.selected) this._clearEl.style.display = \"none\";\n  }\n\n  _onBlur(e: FocusEvent): void {\n    if (this.options.clearOnBlur) {\n      this._clearOnBlur(e);\n    }\n    if (this.options.collapsed) {\n      this._collapse();\n    }\n  }\n  // Change events are fire by suggestions library whenever the enter key is pressed or input is blurred\n  // This can sometimes cause strange behavior as this function is called before our own onKeyDown handler and thus\n  //  we cannot depend on some internal values of the suggestion state like `selected` as those will change or before\n  //  our onKeyDown handler.\n  _onChange() {\n    const selected = this._typeahead.selected;\n\n    // If a suggestion was selected\n    if (!selected) return;\n    if (!('geometry' in selected)) {\n      if (selected.placeId) this._geocode(selected.placeId, true, true);\n      else this._geocode(selected.text, true);\n      return;\n    }\n    if (JSON.stringify(selected) === this.lastSelected) {\n      return;\n    }\n    this._clearEl.style.display = \"none\";\n    if (this.options.flyTo) {\n      let flyOptions: FlyToOptions;\n      this._removeResultMarkers();\n      if (selected.properties && exceptions[selected.properties.short_code]) {\n        // Certain geocoder search results return (and therefore zoom to fit)\n        // an unexpectedly large bounding box: for example, both Russia and the\n        // USA span both sides of -180/180, or France includes the island of\n        // Reunion in the Indian Ocean. An incomplete list of these exceptions\n        // at ./exceptions.json provides \"reasonable\" bounding boxes as a\n        // short-term solution; this may be amended as necessary.\n        flyOptions = extend({}, this.options.flyTo as any);\n        if (this._map) {\n          this._map.fitBounds(\n            exceptions[selected.properties.short_code].bbox,\n            flyOptions\n          );\n        }\n      } else if (selected.bbox) {\n        const bbox = selected.bbox;\n        flyOptions = extend({}, this.options.flyTo as any);\n        if (this._map) {\n          this._map.fitBounds(\n            [\n              [bbox[0], bbox[1]],\n              [bbox[2], bbox[3]],\n            ],\n            flyOptions\n          );\n        }\n      } else {\n        const defaultFlyOptions = {\n          zoom: this.options.zoom,\n        };\n        flyOptions = extend({}, defaultFlyOptions, this.options.flyTo as any);\n        //  ensure that center is not overriden by custom options\n        if (selected.center) {\n          flyOptions.center = selected.center;\n        } else if (\n          selected.geometry?.type === \"Point\" &&\n          selected.geometry.coordinates\n        ) {\n          flyOptions.center = selected.geometry.coordinates as [number, number];\n        }\n\n        if (this._map) {\n          this._map.flyTo(flyOptions);\n        }\n      }\n    }\n    if (this.options.marker && this._maplibregl) {\n      this._handleMarker(selected);\n    }\n\n    // After selecting a feature, re-focus the textarea and set\n    // cursor at start, and reset the selected feature.\n    this._inputEl.focus();\n    this._inputEl.scrollLeft = 0;\n    this._inputEl.setSelectionRange(0, 0);\n    this.lastSelected = JSON.stringify(selected);\n    this._typeahead.selected = null; // reset selection current selection value and set it to last selected\n    this._eventEmitter.emit(\"result\", { result: selected });\n  }\n\n  _getConfigForRequest(): MaplibreGeocoderApiConfig {\n    // Possible config proprerties to pass to client\n    const keys = [\n      \"bbox\",\n      \"limit\",\n      \"proximity\",\n      \"countries\",\n      \"types\",\n      \"language\",\n      \"reverseMode\",\n    ];\n    // Create config object\n    const config: MaplibreGeocoderApiConfig = keys.reduce((config, key) => {\n      if (this.options[key]) {\n        if ([\"countries\", \"types\", \"language\"].indexOf(key) > -1) {\n          (config[key] = this.options[key].split(/[\\s,]+/));\n        } else {\n          (config[key] = this.options[key]);\n        }\n\n        if (\n          key === \"proximity\" &&\n          this.options[key] &&\n          typeof this.options[key].longitude === \"number\" &&\n          typeof this.options[key].latitude === \"number\"\n        ) {\n          config[key] = [\n            this.options[key].longitude,\n            this.options[key].latitude,\n          ];\n        }\n      }\n      return config;\n    }, {});\n\n    return config;\n  }\n\n  async _geocode(searchInput: string, isSuggestion = false, isPlaceId = false): Promise<MaplibreGeocoderResults> {\n    this._loadingEl.style.display = \"block\";\n    this._eventEmitter.emit(\"loading\", { query: searchInput });\n\n    const config = this._getConfigForRequest();\n    const request = this._createGeocodeRequest(config, searchInput, isSuggestion, isPlaceId);\n\n    const localGeocoderResults = this.options.localGeocoder\n      ? (this.options.localGeocoder(searchInput) || [])\n      : [];\n    try {\n      const response = await request;\n      await this._handleGeocodeResponse(\n        response,\n        config,\n        searchInput,\n        isSuggestion,\n        localGeocoderResults);\n    } catch (err) {\n      this._handleGeocodeErrorResponse(err, localGeocoderResults);\n    }\n    return request;\n  }\n\n  private _createGeocodeRequest(config: MaplibreGeocoderApiConfig, searchInput: string, isSuggestion: boolean, isPlaceId: boolean): Promise<MaplibreGeocoderResults> {\n    if (this.options.localGeocoderOnly) {\n      return Promise.resolve({} as any);\n    }\n    if (this.options.reverseGeocode && COORDINATES_REGEXP.test(searchInput)) {\n      // searchInput resembles coordinates, make the request a reverseGeocode\n      return this._createReverseGeocodeRequest(searchInput, config);\n    }\n    config.query = searchInput;\n    if (!this.geocoderApi.getSuggestions) {\n      return this.geocoderApi.forwardGeocode(config);\n    }\n    if (!isSuggestion) {\n      // user typed in text and should receive suggestions\n      return this.geocoderApi.getSuggestions(config);\n    }\n    // user clicked on a suggestion\n    if (this.geocoderApi.searchByPlaceId && isPlaceId) {\n      // suggestion has place Id\n      return this.geocoderApi.searchByPlaceId(config);\n    }\n    return this.geocoderApi.forwardGeocode(config);\n  }\n\n  private _createReverseGeocodeRequest(searchInput: string, config: MaplibreGeocoderApiConfig) {\n    // parse coordinates\n    const coords = searchInput\n      .split(/[\\s(,)?]+/)\n      .map((c) => parseFloat(c))\n      .reverse();\n\n    // client only accepts one type for reverseGeocode, so\n    // use first config type if one, if not default to poi\n    config.query = coords;\n    config.limit = 1;\n\n    // drop proximity which may have been set by trackProximity since it's not supported by the reverseGeocoder\n    if (\"proximity\" in config) {\n      delete config.proximity;\n    }\n\n    return this.geocoderApi.reverseGeocode(config);\n  }\n\n  private async _handleGeocodeResponse(\n    response: MaplibreGeocoderResults,\n    config: MaplibreGeocoderApiConfig,\n    searchInput: string,\n    isSuggestion: boolean,\n    localGeocoderResults: CarmenGeojsonFeature[]\n  ) {\n    this._loadingEl.style.display = \"none\";\n\n    let res = {} as MaplibreGeocoderResultsEvent;\n\n    if (!response) {\n      res = {\n        type: \"FeatureCollection\",\n        features: [],\n      };\n    } else {\n      res = response;\n    }\n\n    res.config = config;\n    if (this.fresh) {\n      this.fresh = false;\n    }\n\n    // supplement Maplibre Geocoding API results with locally populated results\n    res.features = res.features\n      ? localGeocoderResults.concat(res.features)\n      : localGeocoderResults;\n\n    const externalGeocoderResultsPromise = this.options.externalGeocoder\n      ? (this.options.externalGeocoder(searchInput, res.features, config) || Promise.resolve([]))\n      : Promise.resolve([]);\n    // supplement Geocoding API results with features returned by a promise\n    try {\n      const features = await externalGeocoderResultsPromise;\n      res.features = res.features\n        ? features.concat(res.features)\n        : features;\n    } catch {\n      // on error, display the original result\n    }\n    // apply results filter if provided\n    if (this.options.filter && res.features.length) {\n      res.features = res.features.filter(this.options.filter);\n    }\n\n    let typeaheadData: CarmenGeojsonFeature[] | MaplibreGeocoderSuggestion[] = [];\n    if ('suggestions' in res) {\n      typeaheadData = res.suggestions;\n    } else if ('place' in res) {\n      typeaheadData = Array.isArray(res.place) ? res.place : [res.place];\n    } else {\n      typeaheadData = res.features;\n    }\n\n    if (typeaheadData.length) {\n      this._clearEl.style.display = \"block\";\n      this._typeahead.update(typeaheadData);\n      if (\n        (!this.options.showResultsWhileTyping || isSuggestion) &&\n        this.options.showResultMarkers &&\n        (res.features.length > 0 || 'place' in res)\n      ) {\n        this._fitBoundsForMarkers();\n      }\n\n      this._eventEmitter.emit(\"results\", res);\n    } else {\n      this._clearEl.style.display = \"none\";\n      this._typeahead.selected = null;\n      this._renderNoResults();\n\n      this._eventEmitter.emit(\"results\", res);\n    }\n  }\n\n  private _handleGeocodeErrorResponse(error: Error, localGeocoderResults: CarmenGeojsonFeature[]) {\n    this._loadingEl.style.display = \"none\";\n\n    // in the event of an error in the Geocoding API still display results from the localGeocoder\n    if (localGeocoderResults.length && this.options.localGeocoder) {\n      this._clearEl.style.display = \"block\";\n      this._typeahead.update(localGeocoderResults);\n    } else {\n      this._clearEl.style.display = \"none\";\n      this._typeahead.selected = null;\n      this._renderError();\n    }\n\n    this._eventEmitter.emit(\"results\", { features: localGeocoderResults });\n    this._eventEmitter.emit(\"error\", { error });\n  }\n\n  /**\n   * Shared logic for clearing input\n   * @param ev - the event that triggered the clear, if available\n   */\n  private _clear(ev?: Event) {\n    if (ev) ev.preventDefault();\n    this._inputEl.value = \"\";\n    this._typeahead.selected = null;\n    this._typeahead.clear();\n    this._onChange();\n    this._clearEl.style.display = \"none\";\n    this._removeMarker();\n    this._removeResultMarkers();\n    this.lastSelected = null;\n    this._eventEmitter.emit(\"clear\");\n    this.fresh = true;\n  }\n\n  /**\n   * Clear and then focus the input.\n   * @param ev - the event that triggered the clear, if available\n   *\n   */\n  clear(ev?: Event) {\n    this._clear(ev);\n    this._inputEl.focus();\n  }\n\n  /**\n   * Clear the input, without refocusing it. Used to implement clearOnBlur\n   * constructor option.\n   * @param ev - the blur event\n   */\n  private _clearOnBlur(ev: FocusEvent): void {\n    /*\n     * If relatedTarget is not found, assume user targeted the suggestions list.\n     * In that case, do not clear on blur. There are other edge cases where\n     * ev.relatedTarget could be null. Clicking on list always results in null\n     * relatedtarget because of upstream behavior in `suggestions`.\n     *\n     * The ideal solution would be to check if ev.relatedTarget is a child of\n     * the list. See issue #258 for details on why we can't do that yet.\n     */\n    if (ev.relatedTarget) {\n      this._clear(ev);\n    }\n  }\n\n  _onQueryResult(results: MaplibreGeocoderResults) {\n    if (!('features' in results)) {\n      return;\n    }\n    if (!results.features.length) return;\n    const result = results.features[0];\n    this._typeahead.selected = result;\n    this._inputEl.value = result.place_name;\n    this._onChange();\n  }\n\n  _updateProximity() {\n    // proximity is designed for local scale, if the user is looking at the whole world,\n    // it doesn't make sense to factor in the arbitrary centre of the map\n    if (!this._map) {\n      return;\n    }\n    if (this._map.getZoom() > this.options.proximityMinZoom) {\n      const center = this._map.getCenter().wrap();\n      this.setProximity({ longitude: center.lng, latitude: center.lat });\n    } else {\n      this.setProximity(null);\n    }\n  }\n\n  _collapse() {\n    // do not collapse if input is in focus\n    if (!this._inputEl.value && this._inputEl !== document.activeElement)\n      this.container.classList.add(\n        \"maplibregl-ctrl-geocoder--collapsed\"\n      );\n  }\n\n  _unCollapse() {\n    this.container.classList.remove(\n      \"maplibregl-ctrl-geocoder--collapsed\"\n    );\n  }\n\n  /**\n   * Set & query the input\n   * @param searchInput - location name or other search input\n   */\n  async query(searchInput: string) {\n    const results = await this._geocode(searchInput);\n    this._onQueryResult(results);\n  }\n\n  _renderError() {\n    const errorMessage =\n      `<div class='maplibre-gl-geocoder--error'>${this._localize(\"errorConnectionFailed\")}</div>`;\n    this._renderMessage(errorMessage);\n  }\n\n  _renderNoResults() {\n    const errorMessage =\n      `<div class='maplibre-gl-geocoder--error maplibre-gl-geocoder--no-results'>\n        ${this._localize(\"errorNoResults\")}</div>`;\n    this._renderMessage(errorMessage);\n  }\n\n  _renderMessage(msg: string) {\n    this._typeahead.update([]);\n    this._typeahead.selected = null;\n    this._typeahead.clear();\n    this._typeahead.renderError(msg);\n  }\n\n  /**\n   * Get a localised string for a given key\n   *\n   * If language is provided in options, attempt to return localized string (defaults to English)\n   * @param key - key in the localization object\n   * @returns localized string\n   */\n  private _localize(key: keyof typeof localization): string {\n    const language = subtag.language(this.options.language.split(',')[0]);\n    return this.options.language && localization?.[key][language] ? localization[key][language] : localization[key]['en']\n  }\n\n  /**\n   * Fits the map to the current bounds for the searched results\n   */\n  private _fitBoundsForMarkers(): this {\n    if (this._typeahead.data.length < 1) return;\n\n    // Filter out suggestions and restrict to limit\n    const results = this._typeahead.data\n      .filter((result) => {\n        return typeof result === \"string\" ? false : true;\n      })\n      .slice(0, this.options.limit);\n\n    this._clearEl.style.display = \"none\";\n\n    if (this.options.flyTo && this._maplibregl) {\n      if (this._map) {\n        const defaultFlyOptions = { padding: 100 };\n        const flyOptions = extend({}, defaultFlyOptions, this.options.flyTo as any);\n        const bounds = new this._maplibregl.LngLatBounds();\n        for (const feature of results) {\n          if (('geometry' in feature) && (feature.geometry?.type === \"Point\")) {\n            bounds.extend(feature.geometry.coordinates as [number, number]);\n          }\n        }\n        this._map.fitBounds(bounds, flyOptions);\n      }\n    }\n\n    if (results.length > 0 && this._maplibregl) {\n      this._handleResultMarkers(results);\n    }\n\n    return this;\n  }\n\n  /**\n   * Set input\n   * @param searchInput - location name or other search input\n   */\n  setInput(searchInput: string): this {\n    // Set input value to passed value and clear everything else.\n    this._inputEl.value = searchInput;\n    this._typeahead.selected = null;\n    this._typeahead.clear();\n    if (\n      searchInput.length >= this.options.minLength &&\n      this.options.showResultsWhileTyping\n    ) {\n      this._geocode(searchInput);\n    }\n    return this;\n  }\n\n  /**\n   * Set proximity\n   * @param proximity - The new `options.proximity` value. This is a geographical point given as an object with `latitude` and `longitude` properties.\n   */\n  setProximity(proximity: { longitude: number; latitude: number }): this {\n    this.options.proximity = proximity;\n    return this;\n  }\n\n  /**\n   * Get proximity\n   * @returns The geocoder proximity\n   */\n  getProximity(): { longitude: number; latitude: number } {\n    return this.options.proximity;\n  }\n\n  /**\n   * Set the render function used in the results dropdown\n   * @param fn - The function to use as a render function. This function accepts a single {@link CarmenGeojsonFeature} object as input and returns a string.\n   */\n  setRenderFunction(fn?: (feature: CarmenGeojsonFeature) => string): this {\n    if (fn && typeof fn == \"function\") {\n      this._typeahead.render = fn;\n    }\n    return this;\n  }\n\n  /**\n   * Get the function used to render the results dropdown\n   *\n   * @returns the render function\n   */\n  getRenderFunction(): (feature: CarmenGeojsonFeature) => string {\n    return this._typeahead.render;\n  }\n\n  /**\n   * Get the language to use in UI elements and when making search requests\n   *\n   * Look first at the explicitly set options otherwise use the browser's language settings\n   * @param language - Specify the language to use for response text and query result weighting. Options are IETF language tags comprised of a mandatory ISO 639-1 language code and optionally one or more IETF subtags for country or script. More than one value can also be specified, separated by commas.\n   */\n  setLanguage(language?: string): this {\n    this.options.language = language || this.options.language || navigator.language;;\n    return this;\n  }\n\n  /**\n   * Get the language to use in UI elements and when making search requests\n   * @returns The language(s) used by the plugin, if any\n   */\n  getLanguage(): string {\n    return this.options.language;\n  }\n\n  /**\n   * Get the zoom level the map will move to when there is no bounding box on the selected result\n   * @returns the map zoom\n   */\n  getZoom(): number {\n    return this.options.zoom;\n  }\n\n  /**\n   * Set the zoom level\n   * @param zoom - The zoom level that the map should animate to when a `bbox` isn't found in the response. If a `bbox` is found the map will fit to the `bbox`.\n   * @returns this\n   */\n  setZoom(zoom: number): this {\n    this.options.zoom = zoom;\n    return this;\n  }\n\n  /**\n   * Get the parameters used to fly to the selected response, if any\n   * @returns The `flyTo` option\n   */\n  getFlyTo(): boolean | FlyToOptions {\n    return this.options.flyTo;\n  }\n\n  /**\n   * Set the flyTo options\n   * @param flyTo - If false, animating the map to a selected result is disabled. If true, animating the map will use the default animation parameters. If an object, it will be passed as `options` to the map [`flyTo`](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map#flyto) or [`fitBounds`](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map#fitbounds) method providing control over the animation of the transition.\n   */\n  setFlyTo(flyTo: boolean | FlyToOptions): this {\n    this.options.flyTo = flyTo;\n    return this;\n  }\n\n  /**\n   * Get the value of the placeholder string\n   * @returns The input element's placeholder value\n   */\n  getPlaceholder(): string {\n    return this.options.placeholder;\n  }\n\n  /**\n   * Set the value of the input element's placeholder\n   * @param placeholder - the text to use as the input element's placeholder\n   */\n  setPlaceholder(placeholder?: string): this {\n    this.options.placeholder = placeholder ? placeholder : this.options.placeholder || this._localize(\"placeholder\");\n    this._inputEl.placeholder = this.options.placeholder;\n    this._inputEl.setAttribute(\"aria-label\", this.options.placeholder);\n    return this;\n  }\n\n  /**\n   * Get the bounding box used by the plugin\n   * @returns the bounding box, if any\n   */\n  getBbox(): number[] {\n    return this.options.bbox;\n  }\n\n  /**\n   * Set the bounding box to limit search results to\n   * @param bbox - a bounding box given as an array in the format [minX, minY, maxX, maxY].\n   */\n  setBbox(bbox: [number, number, number, number]): this {\n    this.options.bbox = bbox;\n    return this;\n  }\n\n  /**\n   * Get a list of the countries to limit search results to\n   * @returns a comma separated list of countries to limit to, if any\n   */\n  getCountries(): string {\n    return this.options.countries;\n  }\n\n  /**\n   * Set the countries to limit search results to\n   * @param countries - a comma separated list of countries to limit to\n   */\n  setCountries(countries: string): this {\n    this.options.countries = countries;\n    return this;\n  }\n\n  /**\n   * Get a list of the types to limit search results to\n   * @returns a comma separated list of types to limit to\n   */\n  getTypes(): string {\n    return this.options.types;\n  }\n\n  /**\n   * Set the types to limit search results to\n   * @param types - a comma separated list of types to limit to\n   */\n  setTypes(types: string): this {\n    this.options.types = types;\n    return this;\n  }\n\n  /**\n   * Get the minimum number of characters typed to trigger results used in the plugin\n   * @returns The minimum length in characters before a search is triggered\n   */\n  getMinLength(): number {\n    return this.options.minLength;\n  }\n\n  /**\n   * Set the minimum number of characters typed to trigger results used by the plugin\n   * @param minLength - the minimum length in characters\n   */\n  setMinLength(minLength: number): this {\n    this.options.minLength = minLength;\n    if (this._typeahead) this._typeahead.options.minLength = minLength;\n    return this;\n  }\n\n  /**\n   * Get the limit value for the number of results to display used by the plugin\n   * @returns The limit value for the number of results to display used by the plugin\n   */\n  getLimit(): number {\n    return this.options.limit;\n  }\n\n  /**\n   * Set the limit value for the number of results to display used by the plugin\n   * @param limit - the number of search results to return\n   */\n  setLimit(limit: number): this {\n    this.options.limit = limit;\n    if (this._typeahead) this._typeahead.options.limit = limit;\n    return this;\n  }\n\n  /**\n   * Get the filter function used by the plugin\n   * @returns the filter function\n   */\n  getFilter(): (feature: CarmenGeojsonFeature) => boolean {\n    return this.options.filter;\n  }\n\n  /**\n   * Set the filter function used by the plugin.\n   * @param filter - A function which accepts a {@link CarmenGeojsonFeature} to filter out results from the Geocoding API response before they are included in the suggestions list. Return `true` to keep the item, `false` otherwise.\n   */\n  setFilter(filter: (feature: CarmenGeojsonFeature) => boolean): this {\n    this.options.filter = filter;\n    return this;\n  }\n\n  /**\n   * Set the geocoding api used by the plugin.\n   */\n  setGeocoderApi(geocoderApi: MaplibreGeocoderApi): this {\n    this.geocoderApi = geocoderApi;\n    return this;\n  }\n\n  /**\n   * Get the geocoding endpoint the plugin is currently set to\n   * @returns the geocoding API\n   */\n  getGeocoderApi(): MaplibreGeocoderApi {\n    return this.geocoderApi;\n  }\n\n  /**\n   * Handle the placement of a result marking the selected result\n   * @param selected - the selected geojson feature\n   */\n  private _handleMarker(selected: any): this {\n    // clean up any old marker that might be present\n    if (!this._map) {\n      return;\n    }\n    this._removeMarker();\n    const defaultMarkerOptions = {\n      color: \"#4668F2\",\n    };\n    const markerOptions = extend({}, defaultMarkerOptions, this.options.marker as any);\n    this.mapMarker = new this._maplibregl.Marker(markerOptions);\n\n    let popup: Popup | null = null;\n    if (this.options.popup) {\n      const defaultPopupOptions = {};\n      const popupOptions = extend({}, defaultPopupOptions, this.options.popup as any);\n      popup = new this._maplibregl.Popup(popupOptions).setHTML(\n        this.options.popupRender(selected)\n      );\n    }\n\n    if (selected.center) {\n      this.mapMarker.setLngLat(selected.center).addTo(this._map);\n\n      if (this.options.popup) this.mapMarker.setPopup(popup);\n    } else if (\n      selected.geometry?.type === \"Point\" &&\n      selected.geometry.coordinates\n    ) {\n      this.mapMarker.setLngLat(selected.geometry.coordinates).addTo(this._map);\n\n      if (this.options.popup) this.mapMarker.setPopup(popup);\n    }\n    return this;\n  }\n\n  /**\n   * Handle the removal of a result marker\n   */\n  private _removeMarker() {\n    if (this.mapMarker) {\n      this.mapMarker.remove();\n      this.mapMarker = null;\n    }\n  }\n\n  /**\n   * Handle the placement of a result marking the selected result\n   * @param results - the top results to display on the map\n   */\n  private _handleResultMarkers(results: any[]): this {\n    // clean up any old marker that might be present\n    if (!this._map) {\n      return;\n    }\n    this._removeResultMarkers();\n    const defaultMarkerOptions = {\n      color: \"#4668F2\",\n    };\n    let markerOptions = extend(\n      {},\n      defaultMarkerOptions,\n      this.options.showResultMarkers as any\n    );\n\n    for (const result of results) {\n      let el: Node;\n      if (this.options.showResultMarkers) {\n        if (\n          this.options.showResultMarkers &&\n          (this.options.showResultMarkers as MarkerOptions).element\n        ) {\n          el = (this.options.showResultMarkers as MarkerOptions).element.cloneNode(true);\n          markerOptions = extend(markerOptions, { element: el });\n        }\n\n        const marker = new this._maplibregl.Marker(\n          extend({}, markerOptions, { element: el })\n        );\n\n        let popup;\n        if (this.options.popup) {\n          const defaultPopupOptions = {};\n          const popupOptions = extend(\n            {},\n            defaultPopupOptions,\n            this.options.popup as any\n          );\n          popup = new this._maplibregl.Popup(popupOptions).setHTML(\n            this.options.popupRender(result)\n          );\n        }\n        if (result.center) {\n          marker.setLngLat(result.center).addTo(this._map);\n          if (this.options.popup) marker.setPopup(popup);\n        } else if (\n          result.geometry &&\n          result.geometry.type &&\n          result.geometry.type === \"Point\" &&\n          result.geometry.coordinates\n        ) {\n          marker.setLngLat(result.geometry.coordinates).addTo(this._map);\n          if (this.options.popup) marker.setPopup(popup);\n        }\n        this.resultMarkers.push(marker);\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Handle the removal of a result marker\n   */\n  private _removeResultMarkers() {\n    if (this.resultMarkers && this.resultMarkers.length > 0) {\n      this.resultMarkers.forEach(function (marker) {\n        marker.remove();\n      });\n      this.resultMarkers = [];\n    }\n  }\n\n  /**\n   * Subscribe to events that happen within the plugin.\n   * @param type - name of event. Check out the {@link MaplibreGeocoderEventTypeMap} for a list of available events.\n   * @param fn - function that's called when the event is emitted.\n   */\n  on<T extends keyof MaplibreGeocoderEventTypeMap>(type: T, fn: (e: MaplibreGeocoderEventTypeMap[T]) => void): this {\n    this._eventEmitter.on(type, fn);\n    return this;\n  }\n\n  /**\n   * Subscribe to events that happen within the plugin only once.\n   * @param type - Event name. Check out the {@link MaplibreGeocoderEventTypeMap} for a list of available events.\n   * @returns a Promise that resolves when the event is emitted.\n   */\n  once<T extends keyof MaplibreGeocoderEventTypeMap>(type: T): Promise<MaplibreGeocoderEventTypeMap[T]> {\n    return new Promise((resolve) => {\n      this._eventEmitter.once(type, resolve);\n    });\n  }\n\n  /**\n   * Remove an event\n   * @param type - Event name.\n   * @param fn - Function that should unsubscribe to the event emitted.\n   */\n  off(type: string, fn: (e: any) => void): this {\n    this._eventEmitter.removeListener(type, fn);\n    return this;\n  }\n}\n"],"names":["require$$0","require$$1","require$$2","this","global","eventsModule","EventEmitter"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}