Server IP : 103.191.208.50 / Your IP : 216.73.216.53 Web Server : LiteSpeed System : Linux orion.herosite.pro 4.18.0-553.53.1.lve.el8.x86_64 #1 SMP Wed May 28 17:01:02 UTC 2025 x86_64 User : celkcksm ( 1031) PHP Version : 7.4.33 Disable Function : show_source, system, shell_exec, passthru, popen, exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/celkcksm/gtsgmbh.ncriptech.com/../royalrasoi.ncriptech.com/js/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
/* Mapbox GL JS is Copyright © 2020 Mapbox and subject to the Mapbox Terms of Service ((https://www.mapbox.com/legal/tos/). */ (function(global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.mapboxgl = factory()); })(this, (function() { 'use strict'; /* eslint-disable */ var shared, worker, mapboxgl; // define gets called three times: one for each chunk. we rely on the order // they're imported to know which is which function define(_, chunk) { if (!shared) { shared = chunk; } else if (!worker) { worker = chunk; } else { var workerBundleString = "self.onerror = function() { console.error('An error occurred while parsing the WebWorker bundle. This is most likely due to improper transpilation by Babel; please see https://docs.mapbox.com/mapbox-gl-js/guides/install/#transpiling'); }; var sharedChunk = {}; (" + shared + ")(sharedChunk); (" + worker + ")(sharedChunk); self.onerror = null;" var sharedChunk = {}; shared(sharedChunk); mapboxgl = chunk(sharedChunk); if (typeof window !== 'undefined' && window && window.URL && window.URL.createObjectURL) { mapboxgl.workerUrl = window.URL.createObjectURL(new Blob([workerBundleString], { type: 'text/javascript' })); } } } define(["exports"], (function(t) { "use strict"; var e = "undefined" != typeof self ? self : {}, r = "2.14.1"; let n; const i = { API_URL: "https://api.mapbox.com", get API_URL_REGEX() { if (null == n) { const t = /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/|\?|$)/i; try { n = null != process.env.API_URL_REGEX ? new RegExp(process.env.API_URL_REGEX) : t; } catch (e) { n = t; } } return n }, get API_TILEJSON_REGEX() { return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/v[0-9]*\/.*\.json.*$)/i }, get API_SPRITE_REGEX() { return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/styles\/v[0-9]*\/)(.*\/sprite.*\..*$)/i }, get API_FONTS_REGEX() { return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/fonts\/v[0-9]*\/)(.*\.pbf.*$)/i }, get API_STYLE_REGEX() { return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/styles\/v[0-9]*\/)(.*$)/i }, get API_CDN_URL_REGEX() { return /^((https?:)?\/\/)?api\.mapbox\.c(n|om)(\/mapbox-gl-js\/)(.*$)/i }, get EVENTS_URL() { if (!i.API_URL) return null; try { const t = new URL(i.API_URL); return "api.mapbox.cn" === t.hostname ? "https://events.mapbox.cn/events/v2" : "api.mapbox.com" === t.hostname ? "https://events.mapbox.com/events/v2" : null } catch (t) { return null } }, SESSION_PATH: "/map-sessions/v1", FEEDBACK_URL: "https://apps.mapbox.com/feedback", TILE_URL_VERSION: "v4", RASTER_URL_PREFIX: "raster/v1", REQUIRE_ACCESS_TOKEN: !0, ACCESS_TOKEN: null, MAX_PARALLEL_IMAGE_REQUESTS: 16 }, s = { supported: !1, testSupport: function(t) { !l && o && (u ? c(t) : a = t); } }; let a, o, l = !1, u = !1; function c(t) { const e = t.createTexture(); t.bindTexture(t.TEXTURE_2D, e); try { if (t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, o), t.isContextLost()) return; s.supported = !0; } catch (t) {} t.deleteTexture(e), l = !0; } e.document && (o = e.document.createElement("img"), o.onload = function() { a && c(a), a = null, u = !0; }, o.onerror = function() { l = !0, a = null; }, o.src = "data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA="); const h = "01"; var p = f; function f(t, e, r, n) { this.cx = 3 * t, this.bx = 3 * (r - t) - this.cx, this.ax = 1 - this.cx - this.bx, this.cy = 3 * e, this.by = 3 * (n - e) - this.cy, this.ay = 1 - this.cy - this.by, this.p1x = t, this.p1y = e, this.p2x = r, this.p2y = n; } f.prototype = { sampleCurveX: function(t) { return ((this.ax * t + this.bx) * t + this.cx) * t }, sampleCurveY: function(t) { return ((this.ay * t + this.by) * t + this.cy) * t }, sampleCurveDerivativeX: function(t) { return (3 * this.ax * t + 2 * this.bx) * t + this.cx }, solveCurveX: function(t, e) { if (void 0 === e && (e = 1e-6), t < 0) return 0; if (t > 1) return 1; for (var r = t, n = 0; n < 8; n++) { var i = this.sampleCurveX(r) - t; if (Math.abs(i) < e) return r; var s = this.sampleCurveDerivativeX(r); if (Math.abs(s) < 1e-6) break; r -= i / s; } var a = 0, o = 1; for (r = t, n = 0; n < 20 && (i = this.sampleCurveX(r), !(Math.abs(i - t) < e)); n++) t > i ? a = r : o = r, r = .5 * (o - a) + a; return r }, solve: function(t, e) { return this.sampleCurveY(this.solveCurveX(t, e)) } }; var d = y; function y(t, e) { this.x = t, this.y = e; } y.prototype = { clone: function() { return new y(this.x, this.y) }, add: function(t) { return this.clone()._add(t) }, sub: function(t) { return this.clone()._sub(t) }, multByPoint: function(t) { return this.clone()._multByPoint(t) }, divByPoint: function(t) { return this.clone()._divByPoint(t) }, mult: function(t) { return this.clone()._mult(t) }, div: function(t) { return this.clone()._div(t) }, rotate: function(t) { return this.clone()._rotate(t) }, rotateAround: function(t, e) { return this.clone()._rotateAround(t, e) }, matMult: function(t) { return this.clone()._matMult(t) }, unit: function() { return this.clone()._unit() }, perp: function() { return this.clone()._perp() }, round: function() { return this.clone()._round() }, mag: function() { return Math.sqrt(this.x * this.x + this.y * this.y) }, equals: function(t) { return this.x === t.x && this.y === t.y }, dist: function(t) { return Math.sqrt(this.distSqr(t)) }, distSqr: function(t) { var e = t.x - this.x, r = t.y - this.y; return e * e + r * r }, angle: function() { return Math.atan2(this.y, this.x) }, angleTo: function(t) { return Math.atan2(this.y - t.y, this.x - t.x) }, angleWith: function(t) { return this.angleWithSep(t.x, t.y) }, angleWithSep: function(t, e) { return Math.atan2(this.x * e - this.y * t, this.x * t + this.y * e) }, _matMult: function(t) { var e = t[2] * this.x + t[3] * this.y; return this.x = t[0] * this.x + t[1] * this.y, this.y = e, this }, _add: function(t) { return this.x += t.x, this.y += t.y, this }, _sub: function(t) { return this.x -= t.x, this.y -= t.y, this }, _mult: function(t) { return this.x *= t, this.y *= t, this }, _div: function(t) { return this.x /= t, this.y /= t, this }, _multByPoint: function(t) { return this.x *= t.x, this.y *= t.y, this }, _divByPoint: function(t) { return this.x /= t.x, this.y /= t.y, this }, _unit: function() { return this._div(this.mag()), this }, _perp: function() { var t = this.y; return this.y = this.x, this.x = -t, this }, _rotate: function(t) { var e = Math.cos(t), r = Math.sin(t), n = r * this.x + e * this.y; return this.x = e * this.x - r * this.y, this.y = n, this }, _rotateAround: function(t, e) { var r = Math.cos(t), n = Math.sin(t), i = e.y + n * (this.x - e.x) + r * (this.y - e.y); return this.x = e.x + r * (this.x - e.x) - n * (this.y - e.y), this.y = i, this }, _round: function() { return this.x = Math.round(this.x), this.y = Math.round(this.y), this } }, y.convert = function(t) { return t instanceof y ? t : Array.isArray(t) ? new y(t[0], t[1]) : t }; const m = Math.PI / 180, g = 180 / Math.PI; function x(t) { return t * m } function v(t) { return t * g } const b = [ [0, 0], [1, 0], [1, 1], [0, 1] ]; function w(t) { if (t <= 0) return 0; if (t >= 1) return 1; const e = t * t, r = e * t; return 4 * (t < .5 ? r : 3 * (t - e) + r - .75) } function _(t, e, r, n) { const i = new p(t, e, r, n); return function(t) { return i.solve(t) } } const A = _(.25, .1, .25, 1); function S(t, e, r) { return Math.min(r, Math.max(e, t)) } function k(t, e, r) { return (r = S((r - t) / (e - t), 0, 1)) * r * (3 - 2 * r) } function I(t, e, r) { const n = r - e, i = ((t - e) % n + n) % n + e; return i === e ? r : i } function M(t, e, r) { if (!t.length) return r(null, []); let n = t.length; const i = new Array(t.length); let s = null; t.forEach(((t, a) => { e(t, ((t, e) => { t && (s = t), i[a] = e, 0 == --n && r(s, i); })); })); } function T(t) { const e = []; for (const r in t) e.push(t[r]); return e } function z(t, ...e) { for (const r of e) for (const e in r) t[e] = r[e]; return t } let B = 1; function E() { return B++ } function C() { return function t(e) { return e ? (e ^ Math.random() * (16 >> e / 4)).toString(16) : ([1e7] + -[1e3] + -4e3 + -8e3 + -1e11).replace(/[018]/g, t) }() } function P(t) { return t <= 1 ? 1 : Math.pow(2, Math.ceil(Math.log(t) / Math.LN2)) } function D(t) { return !!t && /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t) } function V(t, e) { t.forEach((t => { e[t] && (e[t] = e[t].bind(e)); })); } function L(t, e) { return -1 !== t.indexOf(e, t.length - e.length) } function F(t, e, r) { const n = {}; for (const i in t) n[i] = e.call(r || this, t[i], i, t); return n } function R(t, e, r) { const n = {}; for (const i in t) e.call(r || this, t[i], i, t) && (n[i] = t[i]); return n } function j(t) { return Array.isArray(t) ? t.map(j) : "object" == typeof t && t ? F(t, j) : t } const $ = {}; function U(t) { $[t] || ("undefined" != typeof console && console.warn(t), $[t] = !0); } function O(t, e, r) { return (r.y - t.y) * (e.x - t.x) > (e.y - t.y) * (r.x - t.x) } function q(t) { let e = 0; for (let r, n, i = 0, s = t.length, a = s - 1; i < s; a = i++) r = t[i], n = t[a], e += (n.x - r.x) * (r.y + n.y); return e } function N() { return "undefined" != typeof WorkerGlobalScope && "undefined" != typeof self && self instanceof WorkerGlobalScope } function G(t) { const e = {}; if (t.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g, ((t, r, n, i) => { const s = n || i; return e[r] = !s || s.toLowerCase(), "" })), e["max-age"]) { const t = parseInt(e["max-age"], 10); isNaN(t) ? delete e["max-age"] : e["max-age"] = t; } return e } let Z = null; function X(t) { if (null == Z) { const e = t.navigator ? t.navigator.userAgent : null; Z = !!t.safari || !(!e || !(/\b(iPad|iPhone|iPod)\b/.test(e) || e.match("Safari") && !e.match("Chrome"))); } return Z } function K(t) { try { const r = e[t]; return r.setItem("_mapbox_test_", 1), r.removeItem("_mapbox_test_"), !0 } catch (t) { return !1 } } function Y(t, e) { return [t[4 * e], t[4 * e + 1], t[4 * e + 2], t[4 * e + 3]] } const H = "mapbox-tiles"; let W, J, Q = 500, tt = 50; function et() { try { return e.caches } catch (t) {} } function rt() { et() && !W && (W = e.caches.open(H)); } function nt(t) { const e = t.indexOf("?"); if (e < 0) return t; const r = function(t) { const e = t.indexOf("?"); return e > 0 ? t.slice(e + 1).split("&") : [] }(t), n = r.filter((t => { const e = t.split("="); return "language" === e[0] || "worldview" === e[0] })); return n.length ? `${t.slice(0,e)}?${n.join("&")}` : t.slice(0, e) } let it = 1 / 0; const st = { Unknown: "Unknown", Style: "Style", Source: "Source", Tile: "Tile", Glyphs: "Glyphs", SpriteImage: "SpriteImage", SpriteJSON: "SpriteJSON", Image: "Image" }; "function" == typeof Object.freeze && Object.freeze(st); class at extends Error { constructor(t, e, r) { 401 === e && gt(r) && (t += ": you may have provided an invalid Mapbox access token. See https://docs.mapbox.com/api/overview/#access-tokens-and-token-scopes"), super(t), this.status = e, this.url = r; } toString() { return `${this.name}: ${this.message} (${this.status}): ${this.url}` } } const ot = N() ? () => self.worker && self.worker.referrer : () => ("blob:" === e.location.protocol ? e.parent : e).location.href; const lt = function(t, r) { if (!(/^file:/.test(n = t.url) || /^file:/.test(ot()) && !/^\w+:/.test(n))) { if (e.fetch && e.Request && e.AbortController && e.Request.prototype.hasOwnProperty("signal")) return function(t, r) { const n = new e.AbortController, i = new e.Request(t.url, { method: t.method || "GET", body: t.body, credentials: t.credentials, headers: t.headers, referrer: ot(), referrerPolicy: t.referrerPolicy, signal: n.signal }); let s = !1, a = !1; const o = (l = i.url).indexOf("sku=") > 0 && gt(l); var l; "json" === t.type && i.headers.set("Accept", "application/json"); const u = (n, s, l) => { if (a) return; if (n && "SecurityError" !== n.message && U(n), s && l) return c(s); const u = Date.now(); e.fetch(i).then((e => { if (e.ok) { const t = o ? e.clone() : null; return c(e, t, u) } return r(new at(e.statusText, e.status, t.url)) })).catch((e => { "AbortError" !== e.name && r(new Error(`${e.message} ${t.url}`)); })); }, c = (n, o, l) => { ("arrayBuffer" === t.type ? n.arrayBuffer() : "json" === t.type ? n.json() : n.text()).then((t => { a || (o && l && function(t, r, n) { if (rt(), !W) return; const i = { status: r.status, statusText: r.statusText, headers: new e.Headers }; r.headers.forEach(((t, e) => i.headers.set(e, t))); const s = G(r.headers.get("Cache-Control") || ""); if (s["no-store"]) return; s["max-age"] && i.headers.set("Expires", new Date(n + 1e3 * s["max-age"]).toUTCString()); const a = i.headers.get("Expires"); a && (new Date(a).getTime() - n < 42e4 || function(t, e) { if (void 0 === J) try { new Response(new ReadableStream), J = !0; } catch (t) { J = !1; } J ? e(t.body) : t.blob().then(e); }(r, (r => { const n = new e.Response(r, i); rt(), W && W.then((e => e.put(nt(t.url), n))).catch((t => U(t.message))); }))); }(i, o, l), s = !0, r(null, t, n.headers.get("Cache-Control"), n.headers.get("Expires"))); })).catch((t => { a || r(new Error(t.message)); })); }; return o ? function(t, e) { if (rt(), !W) return e(null); const r = nt(t.url); W.then((t => { t.match(r).then((n => { const i = function(t) { if (!t) return !1; const e = new Date(t.headers.get("Expires") || 0), r = G(t.headers.get("Cache-Control") || ""); return e > Date.now() && !r["no-cache"] }(n); t.delete(r), i && t.put(r, n.clone()), e(null, n, i); })).catch(e); })).catch(e); }(i, u) : u(null, null), { cancel: () => { a = !0, s || n.abort(); } } }(t, r); if (N() && self.worker && self.worker.actor) return self.worker.actor.send("getResource", t, r, void 0, !0) } var n; return function(t, r) { const n = new e.XMLHttpRequest; n.open(t.method || "GET", t.url, !0), "arrayBuffer" === t.type && (n.responseType = "arraybuffer"); for (const e in t.headers) n.setRequestHeader(e, t.headers[e]); return "json" === t.type && (n.responseType = "text", n.setRequestHeader("Accept", "application/json")), n.withCredentials = "include" === t.credentials, n.onerror = () => { r(new Error(n.statusText)); }, n.onload = () => { if ((n.status >= 200 && n.status < 300 || 0 === n.status) && null !== n.response) { let e = n.response; if ("json" === t.type) try { e = JSON.parse(n.response); } catch (t) { return r(t) } r(null, e, n.getResponseHeader("Cache-Control"), n.getResponseHeader("Expires")); } else r(new at(n.statusText, n.status, t.url)); }, n.send(t.body), { cancel: () => n.abort() } }(t, r) }, ut = function(t, e) { return lt(z(t, { type: "arrayBuffer" }), e) }; function ct(t) { const r = e.document.createElement("a"); return r.href = t, r.protocol === e.document.location.protocol && r.host === e.document.location.host } const ht = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="; let pt, ft; pt = [], ft = 0; const dt = function(t, r) { if (s.supported && (t.headers || (t.headers = {}), t.headers.accept = "image/webp,*/*"), ft >= i.MAX_PARALLEL_IMAGE_REQUESTS) { const e = { requestParameters: t, callback: r, cancelled: !1, cancel() { this.cancelled = !0; } }; return pt.push(e), e } ft++; let n = !1; const a = () => { if (!n) for (n = !0, ft--; pt.length && ft < i.MAX_PARALLEL_IMAGE_REQUESTS;) { const t = pt.shift(), { requestParameters: e, callback: r, cancelled: n } = t; n || (t.cancel = dt(e, r).cancel); } }, o = ut(t, ((t, n, i, s) => { a(), t ? r(t) : n && (e.createImageBitmap ? function(t, r) { const n = new e.Blob([new Uint8Array(t)], { type: "image/png" }); e.createImageBitmap(n).then((t => { r(null, t); })).catch((t => { r(new Error(`Could not load image because of ${t.message}. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.`)); })); }(n, ((t, e) => r(t, e, i, s))) : function(t, r) { const n = new e.Image, i = e.URL; n.onload = () => { r(null, n), i.revokeObjectURL(n.src), n.onload = null, e.requestAnimationFrame((() => { n.src = ht; })); }, n.onerror = () => r(new Error("Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.")); const s = new e.Blob([new Uint8Array(t)], { type: "image/png" }); n.src = t.byteLength ? i.createObjectURL(s) : ht; }(n, ((t, e) => r(t, e, i, s)))); })); return { cancel: () => { o.cancel(), a(); } } }, yt = "NO_ACCESS_TOKEN"; function mt(t) { return 0 === t.indexOf("mapbox:") } function gt(t) { return i.API_URL_REGEX.test(t) } function xt(t) { return i.API_CDN_URL_REGEX.test(t) } function vt(t) { return i.API_STYLE_REGEX.test(t) && !bt(t) } function bt(t) { return i.API_SPRITE_REGEX.test(t) } const wt = /^(\w+):\/\/([^/?]*)(\/[^?]+)?\??(.+)?/; function _t(t) { const e = t.match(wt); if (!e) throw new Error("Unable to parse URL object"); return { protocol: e[1], authority: e[2], path: e[3] || "/", params: e[4] ? e[4].split("&") : [] } } function At(t) { const e = t.params.length ? `?${t.params.join("&")}` : ""; return `${t.protocol}://${t.authority}${t.path}${e}` } function St(t) { if (!t) return null; const r = t.split("."); if (!r || 3 !== r.length) return null; try { return JSON.parse(decodeURIComponent(e.atob(r[1]).split("").map((t => "%" + ("00" + t.charCodeAt(0).toString(16)).slice(-2))).join(""))) } catch (t) { return null } } class kt { constructor(t) { this.type = t, this.anonId = null, this.eventData = {}, this.queue = [], this.pendingRequest = null; } getStorageKey(t) { const r = St(i.ACCESS_TOKEN); let n = ""; return n = r && r.u ? e.btoa(encodeURIComponent(r.u).replace(/%([0-9A-F]{2})/g, ((t, e) => String.fromCharCode(Number("0x" + e))))) : i.ACCESS_TOKEN || "", t ? `mapbox.eventData.${t}:${n}` : `mapbox.eventData:${n}` } fetchEventData() { const t = K("localStorage"), r = this.getStorageKey(), n = this.getStorageKey("uuid"); if (t) try { const t = e.localStorage.getItem(r); t && (this.eventData = JSON.parse(t)); const i = e.localStorage.getItem(n); i && (this.anonId = i); } catch (t) { U("Unable to read from LocalStorage"); } } saveEventData() { const t = K("localStorage"), r = this.getStorageKey(), n = this.getStorageKey("uuid"); if (t) try { e.localStorage.setItem(n, this.anonId), Object.keys(this.eventData).length >= 1 && e.localStorage.setItem(r, JSON.stringify(this.eventData)); } catch (t) { U("Unable to write to LocalStorage"); } } processRequests(t) {} postEvent(t, e, r, n) { if (!i.EVENTS_URL) return; const s = _t(i.EVENTS_URL); s.params.push(`access_token=${n||i.ACCESS_TOKEN||""}`); const a = { event: this.type, created: new Date(t).toISOString() }, o = e ? z(a, e) : a, l = { url: At(s), headers: { "Content-Type": "text/plain" }, body: JSON.stringify([o]) }; this.pendingRequest = function(t, e) { return lt(z(t, { method: "POST" }), e) }(l, (t => { this.pendingRequest = null, r(t), this.saveEventData(), this.processRequests(n); })); } queueRequest(t, e) { this.queue.push(t), this.processRequests(e); } } const It = new class extends kt { constructor(t) { super("appUserTurnstile"), this._customAccessToken = t; } postTurnstileEvent(t, e) { i.EVENTS_URL && i.ACCESS_TOKEN && Array.isArray(t) && t.some((t => mt(t) || gt(t))) && this.queueRequest(Date.now(), e); } processRequests(t) { if (this.pendingRequest || 0 === this.queue.length) return; this.anonId && this.eventData.lastSuccess && this.eventData.tokenU || this.fetchEventData(); const e = St(i.ACCESS_TOKEN), n = e ? e.u : i.ACCESS_TOKEN; let s = n !== this.eventData.tokenU; D(this.anonId) || (this.anonId = C(), s = !0); const a = this.queue.shift(); if (this.eventData.lastSuccess) { const t = new Date(this.eventData.lastSuccess), e = new Date(a), r = (a - this.eventData.lastSuccess) / 864e5; s = s || r >= 1 || r < -1 || t.getDate() !== e.getDate(); } else s = !0; s ? this.postEvent(a, { sdkIdentifier: "mapbox-gl-js", sdkVersion: r, skuId: h, "enabled.telemetry": !1, userId: this.anonId }, (t => { t || (this.eventData.lastSuccess = a, this.eventData.tokenU = n); }), t) : this.processRequests(); } }, Mt = It.postTurnstileEvent.bind(It), Tt = new class extends kt { constructor() { super("map.load"), this.success = {}, this.skuToken = ""; } postMapLoadEvent(t, e, r, n) { this.skuToken = e, this.errorCb = n, i.EVENTS_URL && (r || i.ACCESS_TOKEN ? this.queueRequest({ id: t, timestamp: Date.now() }, r) : this.errorCb(new Error(yt))); } processRequests(t) { if (this.pendingRequest || 0 === this.queue.length) return; const { id: e, timestamp: n } = this.queue.shift(); e && this.success[e] || (this.anonId || this.fetchEventData(), D(this.anonId) || (this.anonId = C()), this.postEvent(n, { sdkIdentifier: "mapbox-gl-js", sdkVersion: r, skuId: h, skuToken: this.skuToken, userId: this.anonId }, (t => { t ? this.errorCb(t) : e && (this.success[e] = !0); }), t)); } }, zt = Tt.postMapLoadEvent.bind(Tt), Bt = new class extends kt { constructor() { super("gljs.performance"); } postPerformanceEvent(t, e) { i.EVENTS_URL && (t || i.ACCESS_TOKEN) && this.queueRequest({ timestamp: Date.now(), performanceData: e }, t); } processRequests(t) { if (this.pendingRequest || 0 === this.queue.length) return; const { timestamp: n, performanceData: i } = this.queue.shift(), s = function(t) { const n = e.performance.getEntriesByType("resource"), i = e.performance.getEntriesByType("mark"), s = function(t) { const e = {}; if (t) for (const r in t) if ("other" !== r) for (const n of t[r]) { const t = `${r}ResolveRangeMin`, i = `${r}ResolveRangeMax`, s = `${r}RequestCount`, a = `${r}RequestCachedCount`; e[t] = Math.min(e[t] || 1 / 0, n.startTime), e[i] = Math.max(e[i] || -1 / 0, n.responseEnd); const o = t => { void 0 === e[t] && (e[t] = 0), ++e[t]; }; void 0 !== n.transferSize && 0 === n.transferSize && o(a), o(s); } return e }(function(t, e) { const r = {}; if (t) for (const n of t) { const t = e(n); void 0 === r[t] && (r[t] = []), r[t].push(n); } return r }(n, Ft)), a = e.devicePixelRatio, o = e.navigator.connection || e.navigator.mozConnection || e.navigator.webkitConnection, l = { counters: [], metadata: [], attributes: [] }, u = (t, e, r) => { null != r && t.push({ name: e, value: r.toString() }); }; for (const t in s) u(l.counters, t, s[t]); if (t.interactionRange[0] !== 1 / 0 && t.interactionRange[1] !== -1 / 0 && (u(l.counters, "interactionRangeMin", t.interactionRange[0]), u(l.counters, "interactionRangeMax", t.interactionRange[1])), i) for (const t of Object.keys(Vt)) { const e = Vt[t], r = i.find((t => t.name === e)); r && u(l.counters, e, r.startTime); } return u(l.counters, "visibilityHidden", t.visibilityHidden), u(l.attributes, "style", function(t) { if (t) for (const e of t) { const t = e.name.split("?")[0]; if (vt(t)) { const e = t.split("/").slice(-2); if (2 === e.length) return `mapbox://styles/${e[0]}/${e[1]}` } } }(n)), u(l.attributes, "terrainEnabled", t.terrainEnabled ? "true" : "false"), u(l.attributes, "fogEnabled", t.fogEnabled ? "true" : "false"), u(l.attributes, "projection", t.projection), u(l.attributes, "zoom", t.zoom), u(l.metadata, "devicePixelRatio", a), u(l.metadata, "connectionEffectiveType", o ? o.effectiveType : void 0), u(l.metadata, "navigatorUserAgent", e.navigator.userAgent), u(l.metadata, "screenWidth", e.screen.width), u(l.metadata, "screenHeight", e.screen.height), u(l.metadata, "windowWidth", e.innerWidth), u(l.metadata, "windowHeight", e.innerHeight), u(l.metadata, "mapWidth", t.width / a), u(l.metadata, "mapHeight", t.height / a), u(l.metadata, "webglRenderer", t.renderer), u(l.metadata, "webglVendor", t.vendor), u(l.metadata, "sdkVersion", r), u(l.metadata, "sdkIdentifier", "mapbox-gl-js"), l }(i); for (const t of s.metadata); for (const t of s.counters); for (const t of s.attributes); this.postEvent(n, s, (() => {}), t); } }, Et = Bt.postPerformanceEvent.bind(Bt), Ct = new class extends kt { constructor() { super("map.auth"), this.success = {}, this.skuToken = ""; } getSession(t, e, r, n) { if (!i.API_URL || !i.SESSION_PATH) return; const s = _t(i.API_URL + i.SESSION_PATH); s.params.push(`sku=${e||""}`), s.params.push(`access_token=${n||i.ACCESS_TOKEN||""}`); const a = { url: At(s), headers: { "Content-Type": "text/plain" } }; this.pendingRequest = function(t, e) { return lt(z(t, { method: "GET" }), e) }(a, (t => { this.pendingRequest = null, r(t), this.saveEventData(), this.processRequests(n); })); } getSessionAPI(t, e, r, n) { this.skuToken = e, this.errorCb = n, i.SESSION_PATH && i.API_URL && (r || i.ACCESS_TOKEN ? this.queueRequest({ id: t, timestamp: Date.now() }, r) : this.errorCb(new Error(yt))); } processRequests(t) { if (this.pendingRequest || 0 === this.queue.length) return; const { id: e, timestamp: r } = this.queue.shift(); e && this.success[e] || this.getSession(r, this.skuToken, (t => { t ? this.errorCb(t) : e && (this.success[e] = !0); }), t); } }, Pt = Ct.getSessionAPI.bind(Ct), Dt = new Set, Vt = { create: "create", load: "load", fullLoad: "fullLoad" }, Lt = { mark(t) { e.performance.mark(t); }, measure(t, r, n) { e.performance.measure(t, r, n); } }; function Ft(t) { const e = t.name.split("?")[0]; return xt(e) && e.includes("mapbox-gl.js") ? "javascript" : xt(e) && e.includes("mapbox-gl.css") ? "css" : function(t) { return i.API_FONTS_REGEX.test(t) }(e) ? "fontRange" : bt(e) ? "sprite" : vt(e) ? "style" : function(t) { return i.API_TILEJSON_REGEX.test(t) }(e) ? "tilejson" : "other" } const Rt = e.performance; function jt(t) { const e = t ? t.url.toString() : void 0; return Rt.getEntriesByName(e) } let $t, Ut, Ot, qt; const Nt = { now: () => void 0 !== Ot ? Ot : e.performance.now(), setNow(t) { Ot = t; }, restoreNow() { Ot = void 0; }, frame(t) { const r = e.requestAnimationFrame(t); return { cancel: () => e.cancelAnimationFrame(r) } }, getImageData(t, r = 0) { const { width: n, height: i } = t; qt || (qt = e.document.createElement("canvas")); const s = qt.getContext("2d", { willReadFrequently: !0 }); if (!s) throw new Error("failed to create canvas 2d context"); return (n > qt.width || i > qt.height) && (qt.width = n, qt.height = i), s.clearRect(-r, -r, n + 2 * r, i + 2 * r), s.drawImage(t, 0, 0, n, i), s.getImageData(-r, -r, n + 2 * r, i + 2 * r) }, resolveURL: t => ($t || ($t = e.document.createElement("a")), $t.href = t, $t.href), get devicePixelRatio() { return e.devicePixelRatio }, get prefersReducedMotion() { return !!e.matchMedia && (null == Ut && (Ut = e.matchMedia("(prefers-reduced-motion: reduce)")), Ut.matches) } }; function Gt(t, e, r) { r[t] && -1 !== r[t].indexOf(e) || (r[t] = r[t] || [], r[t].push(e)); } function Zt(t, e, r) { if (r && r[t]) { const n = r[t].indexOf(e); - 1 !== n && r[t].splice(n, 1); } } class Xt { constructor(t, e = {}) { z(this, e), this.type = t; } } class Kt extends Xt { constructor(t, e = {}) { super("error", z({ error: t }, e)); } } class Yt { on(t, e) { return this._listeners = this._listeners || {}, Gt(t, e, this._listeners), this } off(t, e) { return Zt(t, e, this._listeners), Zt(t, e, this._oneTimeListeners), this } once(t, e) { return e ? (this._oneTimeListeners = this._oneTimeListeners || {}, Gt(t, e, this._oneTimeListeners), this) : new Promise((e => this.once(t, e))) } fire(t, e) { "string" == typeof t && (t = new Xt(t, e || {})); const r = t.type; if (this.listens(r)) { t.target = this; const e = this._listeners && this._listeners[r] ? this._listeners[r].slice() : []; for (const r of e) r.call(this, t); const n = this._oneTimeListeners && this._oneTimeListeners[r] ? this._oneTimeListeners[r].slice() : []; for (const e of n) Zt(r, e, this._oneTimeListeners), e.call(this, t); const i = this._eventedParent; i && (z(t, "function" == typeof this._eventedParentData ? this._eventedParentData() : this._eventedParentData), i.fire(t)); } else t instanceof Kt && console.error(t.error); return this } listens(t) { return !!(this._listeners && this._listeners[t] && this._listeners[t].length > 0 || this._oneTimeListeners && this._oneTimeListeners[t] && this._oneTimeListeners[t].length > 0 || this._eventedParent && this._eventedParent.listens(t)) } setEventedParent(t, e) { return this._eventedParent = t, this._eventedParentData = e, this } } var Ht = JSON.parse('{"$version":8,"$root":{"version":{"required":true,"type":"enum","values":[8]},"name":{"type":"string"},"metadata":{"type":"*"},"center":{"type":"array","value":"number"},"zoom":{"type":"number"},"bearing":{"type":"number","default":0,"period":360,"units":"degrees"},"pitch":{"type":"number","default":0,"units":"degrees"},"light":{"type":"light"},"terrain":{"type":"terrain"},"fog":{"type":"fog"},"sources":{"required":true,"type":"sources"},"sprite":{"type":"string"},"glyphs":{"type":"string"},"transition":{"type":"transition"},"projection":{"type":"projection"},"layers":{"required":true,"type":"array","value":"layer"}},"sources":{"*":{"type":"source"}},"source":["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],"source_vector":{"type":{"required":true,"type":"enum","values":{"vector":{}}},"url":{"type":"string"},"tiles":{"type":"array","value":"string"},"bounds":{"type":"array","value":"number","length":4,"default":[-180,-85.051129,180,85.051129]},"scheme":{"type":"enum","values":{"xyz":{},"tms":{}},"default":"xyz"},"minzoom":{"type":"number","default":0},"maxzoom":{"type":"number","default":22},"attribution":{"type":"string"},"promoteId":{"type":"promoteId"},"volatile":{"type":"boolean","default":false},"*":{"type":"*"}},"source_raster":{"type":{"required":true,"type":"enum","values":{"raster":{}}},"url":{"type":"string"},"tiles":{"type":"array","value":"string"},"bounds":{"type":"array","value":"number","length":4,"default":[-180,-85.051129,180,85.051129]},"minzoom":{"type":"number","default":0},"maxzoom":{"type":"number","default":22},"tileSize":{"type":"number","default":512,"units":"pixels"},"scheme":{"type":"enum","values":{"xyz":{},"tms":{}},"default":"xyz"},"attribution":{"type":"string"},"volatile":{"type":"boolean","default":false},"*":{"type":"*"}},"source_raster_dem":{"type":{"required":true,"type":"enum","values":{"raster-dem":{}}},"url":{"type":"string"},"tiles":{"type":"array","value":"string"},"bounds":{"type":"array","value":"number","length":4,"default":[-180,-85.051129,180,85.051129]},"minzoom":{"type":"number","default":0},"maxzoom":{"type":"number","default":22},"tileSize":{"type":"number","default":512,"units":"pixels"},"attribution":{"type":"string"},"encoding":{"type":"enum","values":{"terrarium":{},"mapbox":{}},"default":"mapbox"},"volatile":{"type":"boolean","default":false},"*":{"type":"*"}},"source_geojson":{"type":{"required":true,"type":"enum","values":{"geojson":{}}},"data":{"type":"*"},"maxzoom":{"type":"number","default":18},"attribution":{"type":"string"},"buffer":{"type":"number","default":128,"maximum":512,"minimum":0},"filter":{"type":"*"},"tolerance":{"type":"number","default":0.375},"cluster":{"type":"boolean","default":false},"clusterRadius":{"type":"number","default":50,"minimum":0},"clusterMaxZoom":{"type":"number"},"clusterMinPoints":{"type":"number"},"clusterProperties":{"type":"*"},"lineMetrics":{"type":"boolean","default":false},"generateId":{"type":"boolean","default":false},"promoteId":{"type":"promoteId"}},"source_video":{"type":{"required":true,"type":"enum","values":{"video":{}}},"urls":{"required":true,"type":"array","value":"string"},"coordinates":{"required":true,"type":"array","length":4,"value":{"type":"array","length":2,"value":"number"}}},"source_image":{"type":{"required":true,"type":"enum","values":{"image":{}}},"url":{"required":true,"type":"string"},"coordinates":{"required":true,"type":"array","length":4,"value":{"type":"array","length":2,"value":"number"}}},"layer":{"id":{"type":"string","required":true},"type":{"type":"enum","values":{"fill":{},"line":{},"symbol":{},"circle":{},"heatmap":{},"fill-extrusion":{},"raster":{},"hillshade":{},"background":{},"sky":{}},"required":true},"metadata":{"type":"*"},"source":{"type":"string"},"source-layer":{"type":"string"},"minzoom":{"type":"number","minimum":0,"maximum":24},"maxzoom":{"type":"number","minimum":0,"maximum":24},"filter":{"type":"filter"},"layout":{"type":"layout"},"paint":{"type":"paint"}},"layout":["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background","layout_sky"],"layout_background":{"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"layout_sky":{"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"layout_fill":{"fill-sort-key":{"type":"number","expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"layout_circle":{"circle-sort-key":{"type":"number","expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"layout_heatmap":{"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"layout_fill-extrusion":{"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"},"fill-extrusion-edge-radius":{"type":"number","private":true,"default":0,"minimum":0,"maximum":1,"property-type":"constant"}},"layout_line":{"line-cap":{"type":"enum","values":{"butt":{},"round":{},"square":{}},"default":"butt","expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-join":{"type":"enum","values":{"bevel":{},"round":{},"miter":{}},"default":"miter","expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{"type":"number","default":2,"requires":[{"line-join":"miter"}],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"line-round-limit":{"type":"number","default":1.05,"requires":[{"line-join":"round"}],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"line-sort-key":{"type":"number","expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"layout_symbol":{"symbol-placement":{"type":"enum","values":{"point":{},"line":{},"line-center":{}},"default":"point","expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"symbol-spacing":{"type":"number","default":250,"minimum":1,"units":"pixels","requires":[{"symbol-placement":"line"}],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{"type":"boolean","default":false,"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{"type":"number","expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{"type":"enum","values":{"auto":{},"viewport-y":{},"source":{}},"default":"auto","expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{"type":"boolean","default":false,"requires":["icon-image"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{"type":"boolean","default":false,"requires":["icon-image"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"icon-optional":{"type":"boolean","default":false,"requires":["icon-image","text-field"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{"type":"enum","values":{"map":{},"viewport":{},"auto":{}},"default":"auto","requires":["icon-image"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"icon-size":{"type":"number","default":1,"minimum":0,"units":"factor of the original icon size","requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{"type":"enum","values":{"none":{},"width":{},"height":{},"both":{}},"default":"none","requires":["icon-image","text-field"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{"type":"array","value":"number","length":4,"default":[0,0,0,0],"units":"pixels","requires":["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"icon-image":{"type":"resolvedImage","tokens":true,"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{"type":"number","default":0,"period":360,"units":"degrees","requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{"type":"number","default":2,"minimum":0,"units":"pixels","requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{"type":"boolean","default":false,"requires":["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"icon-offset":{"type":"array","value":"number","length":2,"default":[0,0],"requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{"type":"enum","values":{"center":{},"left":{},"right":{},"top":{},"bottom":{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},"default":"center","requires":["icon-image"],"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{"type":"enum","values":{"map":{},"viewport":{},"auto":{}},"default":"auto","requires":["icon-image"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{"type":"enum","values":{"map":{},"viewport":{},"auto":{}},"default":"auto","requires":["text-field"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{"type":"enum","values":{"map":{},"viewport":{},"auto":{}},"default":"auto","requires":["text-field"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-field":{"type":"formatted","default":"","tokens":true,"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-font":{"type":"array","value":"string","default":["Open Sans Regular","Arial Unicode MS Regular"],"requires":["text-field"],"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-size":{"type":"number","default":16,"minimum":0,"units":"pixels","requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{"type":"number","default":10,"minimum":0,"units":"ems","requires":["text-field",{"symbol-placement":["point"]}],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{"type":"number","default":1.2,"units":"ems","requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{"type":"number","default":0,"units":"ems","requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-justify":{"type":"enum","values":{"auto":{},"left":{},"center":{},"right":{}},"default":"center","requires":["text-field"],"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{"type":"number","units":"ems","default":0,"requires":["text-field"],"property-type":"data-driven","expression":{"interpolated":true,"parameters":["zoom","feature"]}},"text-variable-anchor":{"type":"array","value":"enum","values":{"center":{},"left":{},"right":{},"top":{},"bottom":{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},"requires":["text-field",{"symbol-placement":["point"]}],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-anchor":{"type":"enum","values":{"center":{},"left":{},"right":{},"top":{},"bottom":{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},"default":"center","requires":["text-field",{"!":"text-variable-anchor"}],"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{"type":"number","default":45,"units":"degrees","requires":["text-field",{"symbol-placement":["line","line-center"]}],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"text-writing-mode":{"type":"array","value":"enum","values":{"horizontal":{},"vertical":{}},"requires":["text-field"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-rotate":{"type":"number","default":0,"period":360,"units":"degrees","requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-padding":{"type":"number","default":2,"minimum":0,"units":"pixels","requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"text-keep-upright":{"type":"boolean","default":true,"requires":["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-transform":{"type":"enum","values":{"none":{},"uppercase":{},"lowercase":{}},"default":"none","requires":["text-field"],"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-offset":{"type":"array","value":"number","units":"ems","length":2,"default":[0,0],"requires":["text-field",{"!":"text-radial-offset"}],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{"type":"boolean","default":false,"requires":["text-field"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{"type":"boolean","default":false,"requires":["text-field"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-optional":{"type":"boolean","default":false,"requires":["text-field","icon-image"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"layout_raster":{"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"layout_hillshade":{"visibility":{"type":"enum","values":{"visible":{},"none":{}},"default":"visible","property-type":"constant"}},"filter":{"type":"array","value":"*"},"filter_symbol":{"type":"boolean","default":false,"transition":false,"property-type":"data-driven","expression":{"interpolated":false,"parameters":["zoom","feature","pitch","distance-from-center"]}},"filter_fill":{"type":"boolean","default":false,"transition":false,"property-type":"data-driven","expression":{"interpolated":false,"parameters":["zoom","feature"]}},"filter_line":{"type":"boolean","default":false,"transition":false,"property-type":"data-driven","expression":{"interpolated":false,"parameters":["zoom","feature"]}},"filter_circle":{"type":"boolean","default":false,"transition":false,"property-type":"data-driven","expression":{"interpolated":false,"parameters":["zoom","feature"]}},"filter_fill-extrusion":{"type":"boolean","default":false,"transition":false,"property-type":"data-driven","expression":{"interpolated":false,"parameters":["zoom","feature"]}},"filter_heatmap":{"type":"boolean","default":false,"transition":false,"property-type":"data-driven","expression":{"interpolated":false,"parameters":["zoom","feature"]}},"filter_operator":{"type":"enum","values":{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},"in":{},"!in":{},"all":{},"any":{},"none":{},"has":{},"!has":{},"within":{}}},"geometry_type":{"type":"enum","values":{"Point":{},"LineString":{},"Polygon":{}}},"function":{"expression":{"type":"expression"},"stops":{"type":"array","value":"function_stop"},"base":{"type":"number","default":1,"minimum":0},"property":{"type":"string","default":"$zoom"},"type":{"type":"enum","values":{"identity":{},"exponential":{},"interval":{},"categorical":{}},"default":"exponential"},"colorSpace":{"type":"enum","values":{"rgb":{},"lab":{},"hcl":{}},"default":"rgb"},"default":{"type":"*","required":false}},"function_stop":{"type":"array","minimum":0,"maximum":24,"value":["number","color"],"length":2},"expression":{"type":"array","value":"*","minimum":1},"fog":{"range":{"type":"array","default":[0.5,10],"minimum":-20,"maximum":20,"length":2,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"color":{"type":"color","property-type":"data-constant","default":"#ffffff","expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"high-color":{"type":"color","property-type":"data-constant","default":"#245cdf","expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"space-color":{"type":"color","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"horizon-blend":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],4,0.2,7,0.1],"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"star-intensity":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],5,0.35,6,0],"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true}},"light":{"anchor":{"type":"enum","default":"viewport","values":{"map":{},"viewport":{}},"property-type":"data-constant","transition":false,"expression":{"interpolated":false,"parameters":["zoom"]}},"position":{"type":"array","default":[1.15,210,30],"length":3,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"color":{"type":"color","property-type":"data-constant","default":"#ffffff","expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"intensity":{"type":"number","property-type":"data-constant","default":0.5,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true}},"projection":{"name":{"type":"enum","values":{"albers":{},"equalEarth":{},"equirectangular":{},"lambertConformalConic":{},"mercator":{},"naturalEarth":{},"winkelTripel":{},"globe":{}},"default":"mercator","required":true},"center":{"type":"array","length":2,"value":"number","property-type":"data-constant","minimum":[-180,-90],"maximum":[180,90],"transition":false,"requires":[{"name":["albers","lambertConformalConic"]}]},"parallels":{"type":"array","length":2,"value":"number","property-type":"data-constant","minimum":[-90,-90],"maximum":[90,90],"transition":false,"requires":[{"name":["albers","lambertConformalConic"]}]}},"terrain":{"source":{"type":"string","required":true},"exaggeration":{"type":"number","property-type":"data-constant","default":1,"minimum":0,"maximum":1000,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true,"requires":["source"]}},"paint":["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background","paint_sky"],"paint_fill":{"fill-antialias":{"type":"boolean","default":true,"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"fill-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{"type":"color","default":"#000000","transition":true,"requires":[{"!":"fill-pattern"}],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{"type":"color","transition":true,"requires":[{"!":"fill-pattern"},{"fill-antialias":true}],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{"type":"enum","values":{"map":{},"viewport":{}},"default":"map","requires":["fill-translate"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"fill-pattern":{"type":"resolvedImage","transition":false,"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{"type":"color","default":"#000000","transition":true,"requires":[{"!":"fill-extrusion-pattern"}],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{"type":"enum","values":{"map":{},"viewport":{}},"default":"map","requires":["fill-extrusion-translate"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{"type":"resolvedImage","transition":false,"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{"type":"number","default":0,"minimum":0,"units":"meters","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{"type":"number","default":0,"minimum":0,"units":"meters","transition":true,"requires":["fill-extrusion-height"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{"type":"boolean","default":true,"transition":false,"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant","type":"number","private":true,"default":0,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant","type":"number","private":true,"default":3,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true,"requires":["fill-extrusion-edge-radius"]}},"paint_line":{"line-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{"type":"color","default":"#000000","transition":true,"requires":[{"!":"line-pattern"}],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{"type":"enum","values":{"map":{},"viewport":{}},"default":"map","requires":["line-translate"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"line-width":{"type":"number","default":1,"minimum":0,"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{"type":"number","default":0,"minimum":0,"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{"type":"number","default":0,"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{"type":"number","default":0,"minimum":0,"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{"type":"array","value":"number","minimum":0,"transition":false,"units":"line widths","requires":[{"!":"line-pattern"}],"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{"type":"resolvedImage","transition":false,"expression":{"interpolated":false,"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{"type":"color","transition":false,"requires":[{"!":"line-pattern"},{"source":"geojson","has":{"lineMetrics":true}}],"expression":{"interpolated":true,"parameters":["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{"type":"array","value":"number","length":2,"default":[0,0],"minimum":[0,0],"maximum":[1,1],"transition":false,"requires":[{"source":"geojson","has":{"lineMetrics":true}}],"property-type":"constant"}},"paint_circle":{"circle-radius":{"type":"number","default":5,"minimum":0,"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{"type":"number","default":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{"type":"enum","values":{"map":{},"viewport":{}},"default":"map","requires":["circle-translate"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{"type":"enum","values":{"map":{},"viewport":{}},"default":"map","expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{"type":"enum","values":{"map":{},"viewport":{}},"default":"viewport","expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{"type":"number","default":0,"minimum":0,"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"}},"paint_heatmap":{"heatmap-radius":{"type":"number","default":30,"minimum":1,"transition":true,"units":"pixels","expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{"type":"number","default":1,"minimum":0,"transition":false,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{"type":"number","default":1,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"heatmap-color":{"type":"color","default":["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",0.1,"royalblue",0.3,"cyan",0.5,"lime",0.7,"yellow",1,"red"],"transition":false,"expression":{"interpolated":true,"parameters":["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_symbol":{"icon-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{"type":"color","default":"#000000","transition":true,"requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{"type":"color","default":"rgba(0, 0, 0, 0)","transition":true,"requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{"type":"number","default":0,"minimum":0,"transition":true,"units":"pixels","requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{"type":"number","default":0,"minimum":0,"transition":true,"units":"pixels","requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"units":"pixels","requires":["icon-image"],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{"type":"enum","values":{"map":{},"viewport":{}},"default":"map","requires":["icon-image","icon-translate"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"text-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{"type":"color","default":"#000000","transition":true,"overridable":true,"requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{"type":"color","default":"rgba(0, 0, 0, 0)","transition":true,"requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{"type":"number","default":0,"minimum":0,"transition":true,"units":"pixels","requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{"type":"number","default":0,"minimum":0,"transition":true,"units":"pixels","requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"units":"pixels","requires":["text-field"],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{"type":"enum","values":{"map":{},"viewport":{}},"default":"map","requires":["text-field","text-translate"],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_raster":{"raster-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{"type":"number","default":0,"period":360,"transition":true,"units":"degrees","expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{"type":"number","default":0,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-saturation":{"type":"number","default":0,"minimum":-1,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-contrast":{"type":"number","default":0,"minimum":-1,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-resampling":{"type":"enum","values":{"linear":{},"nearest":{}},"default":"linear","expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{"type":"number","default":300,"minimum":0,"transition":false,"units":"milliseconds","expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_hillshade":{"hillshade-illumination-direction":{"type":"number","default":335,"minimum":0,"maximum":359,"transition":false,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{"type":"enum","values":{"map":{},"viewport":{}},"default":"viewport","expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{"type":"number","default":0.5,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{"type":"color","default":"#FFFFFF","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_background":{"background-color":{"type":"color","default":"#000000","transition":true,"requires":[{"!":"background-pattern"}],"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"background-pattern":{"type":"resolvedImage","transition":false,"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"background-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_sky":{"sky-type":{"type":"enum","values":{"gradient":{},"atmosphere":{}},"default":"atmosphere","expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{"type":"array","value":"number","length":2,"units":"degrees","minimum":[0,0],"maximum":[360,180],"transition":false,"requires":[{"sky-type":"atmosphere"}],"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{"type":"number","requires":[{"sky-type":"atmosphere"}],"default":10,"minimum":0,"maximum":100,"transition":false,"property-type":"data-constant"},"sky-gradient-center":{"type":"array","requires":[{"sky-type":"gradient"}],"value":"number","default":[0,0],"length":2,"units":"degrees","minimum":[0,0],"maximum":[360,180],"transition":false,"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{"type":"number","requires":[{"sky-type":"gradient"}],"default":90,"minimum":0,"maximum":180,"transition":false,"expression":{"interpolated":false,"parameters":["zoom"]},"property-type":"data-constant"},"sky-gradient":{"type":"color","default":["interpolate",["linear"],["sky-radial-progress"],0.8,"#87ceeb",1,"white"],"transition":false,"requires":[{"sky-type":"gradient"}],"expression":{"interpolated":true,"parameters":["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{"type":"color","default":"white","transition":false,"requires":[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-atmosphere-color":{"type":"color","default":"white","transition":false,"requires":[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"transition":{"duration":{"type":"number","default":300,"minimum":0,"units":"milliseconds"},"delay":{"type":"number","default":0,"minimum":0,"units":"milliseconds"}},"property-type":{"data-driven":{"type":"property-type"},"color-ramp":{"type":"property-type"},"data-constant":{"type":"property-type"},"constant":{"type":"property-type"}},"promoteId":{"*":{"type":"string"}}}'); function Wt(t, ...e) { for (const r of e) for (const e in r) t[e] = r[e]; return t } function Jt(t) { return t instanceof Number || t instanceof String || t instanceof Boolean ? t.valueOf() : t } function Qt(t) { if (Array.isArray(t)) return t.map(Qt); if (t instanceof Object && !(t instanceof Number || t instanceof String || t instanceof Boolean)) { const e = {}; for (const r in t) e[r] = Qt(t[r]); return e } return Jt(t) } class te extends Error { constructor(t, e) { super(e), this.message = e, this.key = t; } } var ee = te; class re { constructor(t, e = []) { this.parent = t, this.bindings = {}; for (const [t, r] of e) this.bindings[t] = r; } concat(t) { return new re(this, t) } get(t) { if (this.bindings[t]) return this.bindings[t]; if (this.parent) return this.parent.get(t); throw new Error(`${t} not found in scope.`) } has(t) { return !!this.bindings[t] || !!this.parent && this.parent.has(t) } } var ne = re; const ie = { kind: "null" }, se = { kind: "number" }, ae = { kind: "string" }, oe = { kind: "boolean" }, le = { kind: "color" }, ue = { kind: "object" }, ce = { kind: "value" }, he = { kind: "collator" }, pe = { kind: "formatted" }, fe = { kind: "resolvedImage" }; function de(t, e) { return { kind: "array", itemType: t, N: e } } function ye(t) { if ("array" === t.kind) { const e = ye(t.itemType); return "number" == typeof t.N ? `array<${e}, ${t.N}>` : "value" === t.itemType.kind ? "array" : `array<${e}>` } return t.kind } const me = [ie, se, ae, oe, le, pe, ue, de(ce), fe]; function ge(t, e) { if ("error" === e.kind) return null; if ("array" === t.kind) { if ("array" === e.kind && (0 === e.N && "value" === e.itemType.kind || !ge(t.itemType, e.itemType)) && ("number" != typeof t.N || t.N === e.N)) return null } else { if (t.kind === e.kind) return null; if ("value" === t.kind) for (const t of me) if (!ge(t, e)) return null } return `Expected ${ye(t)} but found ${ye(e)} instead.` } function xe(t, e) { return e.some((e => e.kind === t.kind)) } function ve(t, e) { return e.some((e => "null" === e ? null === t : "array" === e ? Array.isArray(t) : "object" === e ? t && !Array.isArray(t) && "object" == typeof t : e === typeof t)) } var be, we = { transparent: [0, 0, 0, 0], aliceblue: [240, 248, 255, 1], antiquewhite: [250, 235, 215, 1], aqua: [0, 255, 255, 1], aquamarine: [127, 255, 212, 1], azure: [240, 255, 255, 1], beige: [245, 245, 220, 1], bisque: [255, 228, 196, 1], black: [0, 0, 0, 1], blanchedalmond: [255, 235, 205, 1], blue: [0, 0, 255, 1], blueviolet: [138, 43, 226, 1], brown: [165, 42, 42, 1], burlywood: [222, 184, 135, 1], cadetblue: [95, 158, 160, 1], chartreuse: [127, 255, 0, 1], chocolate: [210, 105, 30, 1], coral: [255, 127, 80, 1], cornflowerblue: [100, 149, 237, 1], cornsilk: [255, 248, 220, 1], crimson: [220, 20, 60, 1], cyan: [0, 255, 255, 1], darkblue: [0, 0, 139, 1], darkcyan: [0, 139, 139, 1], darkgoldenrod: [184, 134, 11, 1], darkgray: [169, 169, 169, 1], darkgreen: [0, 100, 0, 1], darkgrey: [169, 169, 169, 1], darkkhaki: [189, 183, 107, 1], darkmagenta: [139, 0, 139, 1], darkolivegreen: [85, 107, 47, 1], darkorange: [255, 140, 0, 1], darkorchid: [153, 50, 204, 1], darkred: [139, 0, 0, 1], darksalmon: [233, 150, 122, 1], darkseagreen: [143, 188, 143, 1], darkslateblue: [72, 61, 139, 1], darkslategray: [47, 79, 79, 1], darkslategrey: [47, 79, 79, 1], darkturquoise: [0, 206, 209, 1], darkviolet: [148, 0, 211, 1], deeppink: [255, 20, 147, 1], deepskyblue: [0, 191, 255, 1], dimgray: [105, 105, 105, 1], dimgrey: [105, 105, 105, 1], dodgerblue: [30, 144, 255, 1], firebrick: [178, 34, 34, 1], floralwhite: [255, 250, 240, 1], forestgreen: [34, 139, 34, 1], fuchsia: [255, 0, 255, 1], gainsboro: [220, 220, 220, 1], ghostwhite: [248, 248, 255, 1], gold: [255, 215, 0, 1], goldenrod: [218, 165, 32, 1], gray: [128, 128, 128, 1], green: [0, 128, 0, 1], greenyellow: [173, 255, 47, 1], grey: [128, 128, 128, 1], honeydew: [240, 255, 240, 1], hotpink: [255, 105, 180, 1], indianred: [205, 92, 92, 1], indigo: [75, 0, 130, 1], ivory: [255, 255, 240, 1], khaki: [240, 230, 140, 1], lavender: [230, 230, 250, 1], lavenderblush: [255, 240, 245, 1], lawngreen: [124, 252, 0, 1], lemonchiffon: [255, 250, 205, 1], lightblue: [173, 216, 230, 1], lightcoral: [240, 128, 128, 1], lightcyan: [224, 255, 255, 1], lightgoldenrodyellow: [250, 250, 210, 1], lightgray: [211, 211, 211, 1], lightgreen: [144, 238, 144, 1], lightgrey: [211, 211, 211, 1], lightpink: [255, 182, 193, 1], lightsalmon: [255, 160, 122, 1], lightseagreen: [32, 178, 170, 1], lightskyblue: [135, 206, 250, 1], lightslategray: [119, 136, 153, 1], lightslategrey: [119, 136, 153, 1], lightsteelblue: [176, 196, 222, 1], lightyellow: [255, 255, 224, 1], lime: [0, 255, 0, 1], limegreen: [50, 205, 50, 1], linen: [250, 240, 230, 1], magenta: [255, 0, 255, 1], maroon: [128, 0, 0, 1], mediumaquamarine: [102, 205, 170, 1], mediumblue: [0, 0, 205, 1], mediumorchid: [186, 85, 211, 1], mediumpurple: [147, 112, 219, 1], mediumseagreen: [60, 179, 113, 1], mediumslateblue: [123, 104, 238, 1], mediumspringgreen: [0, 250, 154, 1], mediumturquoise: [72, 209, 204, 1], mediumvioletred: [199, 21, 133, 1], midnightblue: [25, 25, 112, 1], mintcream: [245, 255, 250, 1], mistyrose: [255, 228, 225, 1], moccasin: [255, 228, 181, 1], navajowhite: [255, 222, 173, 1], navy: [0, 0, 128, 1], oldlace: [253, 245, 230, 1], olive: [128, 128, 0, 1], olivedrab: [107, 142, 35, 1], orange: [255, 165, 0, 1], orangered: [255, 69, 0, 1], orchid: [218, 112, 214, 1], palegoldenrod: [238, 232, 170, 1], palegreen: [152, 251, 152, 1], paleturquoise: [175, 238, 238, 1], palevioletred: [219, 112, 147, 1], papayawhip: [255, 239, 213, 1], peachpuff: [255, 218, 185, 1], peru: [205, 133, 63, 1], pink: [255, 192, 203, 1], plum: [221, 160, 221, 1], powderblue: [176, 224, 230, 1], purple: [128, 0, 128, 1], rebeccapurple: [102, 51, 153, 1], red: [255, 0, 0, 1], rosybrown: [188, 143, 143, 1], royalblue: [65, 105, 225, 1], saddlebrown: [139, 69, 19, 1], salmon: [250, 128, 114, 1], sandybrown: [244, 164, 96, 1], seagreen: [46, 139, 87, 1], seashell: [255, 245, 238, 1], sienna: [160, 82, 45, 1], silver: [192, 192, 192, 1], skyblue: [135, 206, 235, 1], slateblue: [106, 90, 205, 1], slategray: [112, 128, 144, 1], slategrey: [112, 128, 144, 1], snow: [255, 250, 250, 1], springgreen: [0, 255, 127, 1], steelblue: [70, 130, 180, 1], tan: [210, 180, 140, 1], teal: [0, 128, 128, 1], thistle: [216, 191, 216, 1], tomato: [255, 99, 71, 1], turquoise: [64, 224, 208, 1], violet: [238, 130, 238, 1], wheat: [245, 222, 179, 1], white: [255, 255, 255, 1], whitesmoke: [245, 245, 245, 1], yellow: [255, 255, 0, 1], yellowgreen: [154, 205, 50, 1] }; function _e(t) { return (t = Math.round(t)) < 0 ? 0 : t > 255 ? 255 : t } function Ae(t) { return _e("%" === t[t.length - 1] ? parseFloat(t) / 100 * 255 : parseInt(t)) } function Se(t) { return (e = "%" === t[t.length - 1] ? parseFloat(t) / 100 : parseFloat(t)) < 0 ? 0 : e > 1 ? 1 : e; var e; } function ke(t, e, r) { return r < 0 ? r += 1 : r > 1 && (r -= 1), 6 * r < 1 ? t + (e - t) * r * 6 : 2 * r < 1 ? e : 3 * r < 2 ? t + (e - t) * (2 / 3 - r) * 6 : t } try { be = {}.parseCSSColor = function(t) { var e, r = t.replace(/ /g, "").toLowerCase(); if (r in we) return we[r].slice(); if ("#" === r[0]) return 4 === r.length ? (e = parseInt(r.substr(1), 16)) >= 0 && e <= 4095 ? [(3840 & e) >> 4 | (3840 & e) >> 8, 240 & e | (240 & e) >> 4, 15 & e | (15 & e) << 4, 1] : null : 7 === r.length && (e = parseInt(r.substr(1), 16)) >= 0 && e <= 16777215 ? [(16711680 & e) >> 16, (65280 & e) >> 8, 255 & e, 1] : null; var n = r.indexOf("("), i = r.indexOf(")"); if (-1 !== n && i + 1 === r.length) { var s = r.substr(0, n), a = r.substr(n + 1, i - (n + 1)).split(","), o = 1; switch (s) { case "rgba": if (4 !== a.length) return null; o = Se(a.pop()); case "rgb": return 3 !== a.length ? null : [Ae(a[0]), Ae(a[1]), Ae(a[2]), o]; case "hsla": if (4 !== a.length) return null; o = Se(a.pop()); case "hsl": if (3 !== a.length) return null; var l = (parseFloat(a[0]) % 360 + 360) % 360 / 360, u = Se(a[1]), c = Se(a[2]), h = c <= .5 ? c * (u + 1) : c + u - c * u, p = 2 * c - h; return [_e(255 * ke(p, h, l + 1 / 3)), _e(255 * ke(p, h, l)), _e(255 * ke(p, h, l - 1 / 3)), o]; default: return null } } return null }; } catch (t) {} class Ie { constructor(t, e, r, n = 1) { this.r = t, this.g = e, this.b = r, this.a = n; } static parse(t) { if (!t) return; if (t instanceof Ie) return t; if ("string" != typeof t) return; const e = be(t); return e ? new Ie(e[0] / 255 * e[3], e[1] / 255 * e[3], e[2] / 255 * e[3], e[3]) : void 0 } toString() { const [t, e, r, n] = this.toArray(); return `rgba(${Math.round(t)},${Math.round(e)},${Math.round(r)},${n})` } toArray() { const { r: t, g: e, b: r, a: n } = this; return 0 === n ? [0, 0, 0, 0] : [255 * t / n, 255 * e / n, 255 * r / n, n] } toArray01() { const { r: t, g: e, b: r, a: n } = this; return 0 === n ? [0, 0, 0, 0] : [t / n, e / n, r / n, n] } toArray01PremultipliedAlpha() { const { r: t, g: e, b: r, a: n } = this; return [t, e, r, n] } } Ie.black = new Ie(0, 0, 0, 1), Ie.white = new Ie(1, 1, 1, 1), Ie.transparent = new Ie(0, 0, 0, 0), Ie.red = new Ie(1, 0, 0, 1), Ie.blue = new Ie(0, 0, 1, 1); var Me = Ie; class Te { constructor(t, e, r) { this.sensitivity = t ? e ? "variant" : "case" : e ? "accent" : "base", this.locale = r, this.collator = new Intl.Collator(this.locale ? this.locale : [], { sensitivity: this.sensitivity, usage: "search" }); } compare(t, e) { return this.collator.compare(t, e) } resolvedLocale() { return new Intl.Collator(this.locale ? this.locale : []).resolvedOptions().locale } } class ze { constructor(t, e, r, n, i) { this.text = t.normalize ? t.normalize() : t, this.image = e, this.scale = r, this.fontStack = n, this.textColor = i; } } class Be { constructor(t) { this.sections = t; } static fromString(t) { return new Be([new ze(t, null, null, null, null)]) } isEmpty() { return 0 === this.sections.length || !this.sections.some((t => 0 !== t.text.length || t.image && 0 !== t.image.name.length)) } static factory(t) { return t instanceof Be ? t : Be.fromString(t) } toString() { return 0 === this.sections.length ? "" : this.sections.map((t => t.text)).join("") } serialize() { const t = ["format"]; for (const e of this.sections) { if (e.image) { t.push(["image", e.image.name]); continue } t.push(e.text); const r = {}; e.fontStack && (r["text-font"] = ["literal", e.fontStack.split(",")]), e.scale && (r["font-scale"] = e.scale), e.textColor && (r["text-color"] = ["rgba"].concat(e.textColor.toArray())), t.push(r); } return t } } class Ee { constructor(t) { this.name = t.name, this.available = t.available; } toString() { return this.name } static fromString(t) { return t ? new Ee({ name: t, available: !1 }) : null } serialize() { return ["image", this.name] } } function Ce(t, e, r, n) { return "number" == typeof t && t >= 0 && t <= 255 && "number" == typeof e && e >= 0 && e <= 255 && "number" == typeof r && r >= 0 && r <= 255 ? void 0 === n || "number" == typeof n && n >= 0 && n <= 1 ? null : `Invalid rgba value [${[t,e,r,n].join(", ")}]: 'a' must be between 0 and 1.` : `Invalid rgba value [${("number"==typeof n?[t,e,r,n]:[t,e,r]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.` } function Pe(t) { if (null === t) return !0; if ("string" == typeof t) return !0; if ("boolean" == typeof t) return !0; if ("number" == typeof t) return !0; if (t instanceof Me) return !0; if (t instanceof Te) return !0; if (t instanceof Be) return !0; if (t instanceof Ee) return !0; if (Array.isArray(t)) { for (const e of t) if (!Pe(e)) return !1; return !0 } if ("object" == typeof t) { for (const e in t) if (!Pe(t[e])) return !1; return !0 } return !1 } function De(t) { if (null === t) return ie; if ("string" == typeof t) return ae; if ("boolean" == typeof t) return oe; if ("number" == typeof t) return se; if (t instanceof Me) return le; if (t instanceof Te) return he; if (t instanceof Be) return pe; if (t instanceof Ee) return fe; if (Array.isArray(t)) { const e = t.length; let r; for (const e of t) { const t = De(e); if (r) { if (r === t) continue; r = ce; break } r = t; } return de(r || ce, e) } return ue } function Ve(t) { const e = typeof t; return null === t ? "" : "string" === e || "number" === e || "boolean" === e ? String(t) : t instanceof Me || t instanceof Be || t instanceof Ee ? t.toString() : JSON.stringify(t) } class Le { constructor(t, e) { this.type = t, this.value = e; } static parse(t, e) { if (2 !== t.length) return e.error(`'literal' expression requires exactly one argument, but found ${t.length-1} instead.`); if (!Pe(t[1])) return e.error("invalid value"); const r = t[1]; let n = De(r); const i = e.expectedType; return "array" !== n.kind || 0 !== n.N || !i || "array" !== i.kind || "number" == typeof i.N && 0 !== i.N || (n = i), new Le(n, r) } evaluate() { return this.value } eachChild() {} outputDefined() { return !0 } serialize() { return "array" === this.type.kind || "object" === this.type.kind ? ["literal", this.value] : this.value instanceof Me ? ["rgba"].concat(this.value.toArray()) : this.value instanceof Be ? this.value.serialize() : this.value } } var Fe = Le, Re = class { constructor(t) { this.name = "ExpressionEvaluationError", this.message = t; } toJSON() { return this.message } }; const je = { string: ae, number: se, boolean: oe, object: ue }; class $e { constructor(t, e) { this.type = t, this.args = e; } static parse(t, e) { if (t.length < 2) return e.error("Expected at least one argument."); let r, n = 1; const i = t[0]; if ("array" === i) { let i, s; if (t.length > 2) { const r = t[1]; if ("string" != typeof r || !(r in je) || "object" === r) return e.error('The item type argument of "array" must be one of string, number, boolean', 1); i = je[r], n++; } else i = ce; if (t.length > 3) { if (null !== t[2] && ("number" != typeof t[2] || t[2] < 0 || t[2] !== Math.floor(t[2]))) return e.error('The length argument to "array" must be a positive integer literal', 2); s = t[2], n++; } r = de(i, s); } else r = je[i]; const s = []; for (; n < t.length; n++) { const r = e.parse(t[n], n, ce); if (!r) return null; s.push(r); } return new $e(r, s) } evaluate(t) { for (let e = 0; e < this.args.length; e++) { const r = this.args[e].evaluate(t); if (!ge(this.type, De(r))) return r; if (e === this.args.length - 1) throw new Re(`Expected value to be of type ${ye(this.type)}, but found ${ye(De(r))} instead.`) } return null } eachChild(t) { this.args.forEach(t); } outputDefined() { return this.args.every((t => t.outputDefined())) } serialize() { const t = this.type, e = [t.kind]; if ("array" === t.kind) { const r = t.itemType; if ("string" === r.kind || "number" === r.kind || "boolean" === r.kind) { e.push(r.kind); const n = t.N; ("number" == typeof n || this.args.length > 1) && e.push(n); } } return e.concat(this.args.map((t => t.serialize()))) } } var Ue = $e; class Oe { constructor(t) { this.type = pe, this.sections = t; } static parse(t, e) { if (t.length < 2) return e.error("Expected at least one argument."); const r = t[1]; if (!Array.isArray(r) && "object" == typeof r) return e.error("First argument must be an image or text section."); const n = []; let i = !1; for (let r = 1; r <= t.length - 1; ++r) { const s = t[r]; if (i && "object" == typeof s && !Array.isArray(s)) { i = !1; let t = null; if (s["font-scale"] && (t = e.parse(s["font-scale"], 1, se), !t)) return null; let r = null; if (s["text-font"] && (r = e.parse(s["text-font"], 1, de(ae)), !r)) return null; let a = null; if (s["text-color"] && (a = e.parse(s["text-color"], 1, le), !a)) return null; const o = n[n.length - 1]; o.scale = t, o.font = r, o.textColor = a; } else { const s = e.parse(t[r], 1, ce); if (!s) return null; const a = s.type.kind; if ("string" !== a && "value" !== a && "null" !== a && "resolvedImage" !== a) return e.error("Formatted text type must be 'string', 'value', 'image' or 'null'."); i = !0, n.push({ content: s, scale: null, font: null, textColor: null }); } } return new Oe(n) } evaluate(t) { return new Be(this.sections.map((e => { const r = e.content.evaluate(t); return De(r) === fe ? new ze("", r, null, null, null) : new ze(Ve(r), null, e.scale ? e.scale.evaluate(t) : null, e.font ? e.font.evaluate(t).join(",") : null, e.textColor ? e.textColor.evaluate(t) : null) }))) } eachChild(t) { for (const e of this.sections) t(e.content), e.scale && t(e.scale), e.font && t(e.font), e.textColor && t(e.textColor); } outputDefined() { return !1 } serialize() { const t = ["format"]; for (const e of this.sections) { t.push(e.content.serialize()); const r = {}; e.scale && (r["font-scale"] = e.scale.serialize()), e.font && (r["text-font"] = e.font.serialize()), e.textColor && (r["text-color"] = e.textColor.serialize()), t.push(r); } return t } } class qe { constructor(t) { this.type = fe, this.input = t; } static parse(t, e) { if (2 !== t.length) return e.error("Expected two arguments."); const r = e.parse(t[1], 1, ae); return r ? new qe(r) : e.error("No image name provided.") } evaluate(t) { const e = this.input.evaluate(t), r = Ee.fromString(e); return r && t.availableImages && (r.available = t.availableImages.indexOf(e) > -1), r } eachChild(t) { t(this.input); } outputDefined() { return !1 } serialize() { return ["image", this.input.serialize()] } } const Ne = { "to-boolean": oe, "to-color": le, "to-number": se, "to-string": ae }; class Ge { constructor(t, e) { this.type = t, this.args = e; } static parse(t, e) { if (t.length < 2) return e.error("Expected at least one argument."); const r = t[0]; if (("to-boolean" === r || "to-string" === r) && 2 !== t.length) return e.error("Expected one argument."); const n = Ne[r], i = []; for (let r = 1; r < t.length; r++) { const n = e.parse(t[r], r, ce); if (!n) return null; i.push(n); } return new Ge(n, i) } evaluate(t) { if ("boolean" === this.type.kind) return Boolean(this.args[0].evaluate(t)); if ("color" === this.type.kind) { let e, r; for (const n of this.args) { if (e = n.evaluate(t), r = null, e instanceof Me) return e; if ("string" == typeof e) { const r = t.parseColor(e); if (r) return r } else if (Array.isArray(e) && (r = e.length < 3 || e.length > 4 ? `Invalid rbga value ${JSON.stringify(e)}: expected an array containing either three or four numeric values.` : Ce(e[0], e[1], e[2], e[3]), !r)) return new Me(e[0] / 255, e[1] / 255, e[2] / 255, e[3]) } throw new Re(r || `Could not parse color from value '${"string"==typeof e?e:String(JSON.stringify(e))}'`) } if ("number" === this.type.kind) { let e = null; for (const r of this.args) { if (e = r.evaluate(t), null === e) return 0; const n = Number(e); if (!isNaN(n)) return n } throw new Re(`Could not convert ${JSON.stringify(e)} to number.`) } return "formatted" === this.type.kind ? Be.fromString(Ve(this.args[0].evaluate(t))) : "resolvedImage" === this.type.kind ? Ee.fromString(Ve(this.args[0].evaluate(t))) : Ve(this.args[0].evaluate(t)) } eachChild(t) { this.args.forEach(t); } outputDefined() { return this.args.every((t => t.outputDefined())) } serialize() { if ("formatted" === this.type.kind) return new Oe([{ content: this.args[0], scale: null, font: null, textColor: null }]).serialize(); if ("resolvedImage" === this.type.kind) return new qe(this.args[0]).serialize(); const t = [`to-${this.type.kind}`]; return this.eachChild((e => { t.push(e.serialize()); })), t } } var Ze = Ge; const Xe = ["Unknown", "Point", "LineString", "Polygon"]; var Ke = class { constructor() { this.globals = null, this.feature = null, this.featureState = null, this.formattedSection = null, this._parseColorCache = {}, this.availableImages = null, this.canonical = null, this.featureTileCoord = null, this.featureDistanceData = null; } id() { return this.feature && void 0 !== this.feature.id ? this.feature.id : null } geometryType() { return this.feature ? "number" == typeof this.feature.type ? Xe[this.feature.type] : this.feature.type : null } geometry() { return this.feature && "geometry" in this.feature ? this.feature.geometry : null } canonicalID() { return this.canonical } properties() { return this.feature && this.feature.properties || {} } distanceFromCenter() { if (this.featureTileCoord && this.featureDistanceData) { const t = this.featureDistanceData.center, e = this.featureDistanceData.scale, { x: r, y: n } = this.featureTileCoord; return this.featureDistanceData.bearing[0] * (r * e - t[0]) + this.featureDistanceData.bearing[1] * (n * e - t[1]) } return 0 } parseColor(t) { let e = this._parseColorCache[t]; return e || (e = this._parseColorCache[t] = Me.parse(t)), e } }; class Ye { constructor(t, e, r, n) { this.name = t, this.type = e, this._evaluate = r, this.args = n; } evaluate(t) { return this._evaluate(t, this.args) } eachChild(t) { this.args.forEach(t); } outputDefined() { return !1 } serialize() { return [this.name].concat(this.args.map((t => t.serialize()))) } static parse(t, e) { const r = t[0], n = Ye.definitions[r]; if (!n) return e.error(`Unknown expression "${r}". If you wanted a literal array, use ["literal", [...]].`, 0); const i = Array.isArray(n) ? n[0] : n.type, s = Array.isArray(n) ? [ [n[1], n[2]] ] : n.overloads, a = s.filter((([e]) => !Array.isArray(e) || e.length === t.length - 1)); let o = null; for (const [n, s] of a) { o = new _r(e.registry, e.path, null, e.scope); const a = []; let l = !1; for (let e = 1; e < t.length; e++) { const r = t[e], i = Array.isArray(n) ? n[e - 1] : n.type, s = o.parse(r, 1 + a.length, i); if (!s) { l = !0; break } a.push(s); } if (!l) if (Array.isArray(n) && n.length !== a.length) o.error(`Expected ${n.length} arguments, but found ${a.length} instead.`); else { for (let t = 0; t < a.length; t++) { const e = Array.isArray(n) ? n[t] : n.type, r = a[t]; o.concat(t + 1).checkSubtype(e, r.type); } if (0 === o.errors.length) return new Ye(r, i, s, a) } } if (1 === a.length) e.errors.push(...o.errors); else { const r = (a.length ? a : s).map((([t]) => { return e = t, Array.isArray(e) ? `(${e.map(ye).join(", ")})` : `(${ye(e.type)}...)`; var e; })).join(" | "), n = []; for (let r = 1; r < t.length; r++) { const i = e.parse(t[r], 1 + n.length); if (!i) return null; n.push(ye(i.type)); } e.error(`Expected arguments of type ${r}, but found (${n.join(", ")}) instead.`); } return null } static register(t, e) { Ye.definitions = e; for (const r in e) t[r] = Ye; } } var He = Ye; class We { constructor(t, e, r) { this.type = he, this.locale = r, this.caseSensitive = t, this.diacriticSensitive = e; } static parse(t, e) { if (2 !== t.length) return e.error("Expected one argument."); const r = t[1]; if ("object" != typeof r || Array.isArray(r)) return e.error("Collator options argument must be an object."); const n = e.parse(void 0 !== r["case-sensitive"] && r["case-sensitive"], 1, oe); if (!n) return null; const i = e.parse(void 0 !== r["diacritic-sensitive"] && r["diacritic-sensitive"], 1, oe); if (!i) return null; let s = null; return r.locale && (s = e.parse(r.locale, 1, ae), !s) ? null : new We(n, i, s) } evaluate(t) { return new Te(this.caseSensitive.evaluate(t), this.diacriticSensitive.evaluate(t), this.locale ? this.locale.evaluate(t) : null) } eachChild(t) { t(this.caseSensitive), t(this.diacriticSensitive), this.locale && t(this.locale); } outputDefined() { return !1 } serialize() { const t = {}; return t["case-sensitive"] = this.caseSensitive.serialize(), t["diacritic-sensitive"] = this.diacriticSensitive.serialize(), this.locale && (t.locale = this.locale.serialize()), ["collator", t] } } const Je = 8192; function Qe(t, e) { t[0] = Math.min(t[0], e[0]), t[1] = Math.min(t[1], e[1]), t[2] = Math.max(t[2], e[0]), t[3] = Math.max(t[3], e[1]); } function tr(t, e) { return !(t[0] <= e[0] || t[2] >= e[2] || t[1] <= e[1] || t[3] >= e[3]) } function er(t, e) { const r = (180 + t[0]) / 360, n = (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + t[1] * Math.PI / 360))) / 360, i = Math.pow(2, e.z); return [Math.round(r * i * Je), Math.round(n * i * Je)] } function rr(t, e, r) { const n = t[0] - e[0], i = t[1] - e[1], s = t[0] - r[0], a = t[1] - r[1]; return n * a - s * i == 0 && n * s <= 0 && i * a <= 0 } function nr(t, e) { let r = !1; for (let a = 0, o = e.length; a < o; a++) { const o = e[a]; for (let e = 0, a = o.length; e < a - 1; e++) { if (rr(t, o[e], o[e + 1])) return !1; (i = o[e])[1] > (n = t)[1] != (s = o[e + 1])[1] > n[1] && n[0] < (s[0] - i[0]) * (n[1] - i[1]) / (s[1] - i[1]) + i[0] && (r = !r); } } var n, i, s; return r } function ir(t, e) { for (let r = 0; r < e.length; r++) if (nr(t, e[r])) return !0; return !1 } function sr(t, e, r, n) { const i = n[0] - r[0], s = n[1] - r[1], a = (t[0] - r[0]) * s - i * (t[1] - r[1]), o = (e[0] - r[0]) * s - i * (e[1] - r[1]); return a > 0 && o < 0 || a < 0 && o > 0 } function ar(t, e, r) { for (const u of r) for (let r = 0; r < u.length - 1; ++r) if (0 != (o = [(a = u[r + 1])[0] - (s = u[r])[0], a[1] - s[1]])[0] * (l = [(i = e)[0] - (n = t)[0], i[1] - n[1]])[1] - o[1] * l[0] && sr(n, i, s, a) && sr(s, a, n, i)) return !0; var n, i, s, a, o, l; return !1 } function or(t, e) { for (let r = 0; r < t.length; ++r) if (!nr(t[r], e)) return !1; for (let r = 0; r < t.length - 1; ++r) if (ar(t[r], t[r + 1], e)) return !1; return !0 } function lr(t, e) { for (let r = 0; r < e.length; r++) if (or(t, e[r])) return !0; return !1 } function ur(t, e, r) { const n = []; for (let i = 0; i < t.length; i++) { const s = []; for (let n = 0; n < t[i].length; n++) { const a = er(t[i][n], r); Qe(e, a), s.push(a); } n.push(s); } return n } function cr(t, e, r) { const n = []; for (let i = 0; i < t.length; i++) { const s = ur(t[i], e, r); n.push(s); } return n } function hr(t, e, r, n) { if (t[0] < r[0] || t[0] > r[2]) { const e = .5 * n; let i = t[0] - r[0] > e ? -n : r[0] - t[0] > e ? n : 0; 0 === i && (i = t[0] - r[2] > e ? -n : r[2] - t[0] > e ? n : 0), t[0] += i; } Qe(e, t); } function pr(t, e, r, n) { const i = Math.pow(2, n.z) * Je, s = [n.x * Je, n.y * Je], a = []; if (!t) return a; for (const n of t) for (const t of n) { const n = [t.x + s[0], t.y + s[1]]; hr(n, e, r, i), a.push(n); } return a } function fr(t, e, r, n) { const i = Math.pow(2, n.z) * Je, s = [n.x * Je, n.y * Je], a = []; if (!t) return a; for (const r of t) { const t = []; for (const n of r) { const r = [n.x + s[0], n.y + s[1]]; Qe(e, r), t.push(r); } a.push(t); } if (e[2] - e[0] <= i / 2) { (o = e)[0] = o[1] = 1 / 0, o[2] = o[3] = -1 / 0; for (const t of a) for (const n of t) hr(n, e, r, i); } var o; return a } class dr { constructor(t, e) { this.type = oe, this.geojson = t, this.geometries = e; } static parse(t, e) { if (2 !== t.length) return e.error(`'within' expression requires exactly one argument, but found ${t.length-1} instead.`); if (Pe(t[1])) { const e = t[1]; if ("FeatureCollection" === e.type) for (let t = 0; t < e.features.length; ++t) { const r = e.features[t].geometry.type; if ("Polygon" === r || "MultiPolygon" === r) return new dr(e, e.features[t].geometry) } else if ("Feature" === e.type) { const t = e.geometry.type; if ("Polygon" === t || "MultiPolygon" === t) return new dr(e, e.geometry) } else if ("Polygon" === e.type || "MultiPolygon" === e.type) return new dr(e, e) } return e.error("'within' expression requires valid geojson object that contains polygon geometry type.") } evaluate(t) { if (null != t.geometry() && null != t.canonicalID()) { if ("Point" === t.geometryType()) return function(t, e) { const r = [1 / 0, 1 / 0, -1 / 0, -1 / 0], n = [1 / 0, 1 / 0, -1 / 0, -1 / 0], i = t.canonicalID(); if (!i) return !1; if ("Polygon" === e.type) { const s = ur(e.coordinates, n, i), a = pr(t.geometry(), r, n, i); if (!tr(r, n)) return !1; for (const t of a) if (!nr(t, s)) return !1 } if ("MultiPolygon" === e.type) { const s = cr(e.coordinates, n, i), a = pr(t.geometry(), r, n, i); if (!tr(r, n)) return !1; for (const t of a) if (!ir(t, s)) return !1 } return !0 }(t, this.geometries); if ("LineString" === t.geometryType()) return function(t, e) { const r = [1 / 0, 1 / 0, -1 / 0, -1 / 0], n = [1 / 0, 1 / 0, -1 / 0, -1 / 0], i = t.canonicalID(); if (!i) return !1; if ("Polygon" === e.type) { const s = ur(e.coordinates, n, i), a = fr(t.geometry(), r, n, i); if (!tr(r, n)) return !1; for (const t of a) if (!or(t, s)) return !1 } if ("MultiPolygon" === e.type) { const s = cr(e.coordinates, n, i), a = fr(t.geometry(), r, n, i); if (!tr(r, n)) return !1; for (const t of a) if (!lr(t, s)) return !1 } return !0 }(t, this.geometries) } return !1 } eachChild() {} outputDefined() { return !0 } serialize() { return ["within", this.geojson] } } var yr = dr; function mr(t) { if (t instanceof He) { if ("get" === t.name && 1 === t.args.length) return !1; if ("feature-state" === t.name) return !1; if ("has" === t.name && 1 === t.args.length) return !1; if ("properties" === t.name || "geometry-type" === t.name || "id" === t.name) return !1; if (/^filter-/.test(t.name)) return !1 } if (t instanceof yr) return !1; let e = !0; return t.eachChild((t => { e && !mr(t) && (e = !1); })), e } function gr(t) { if (t instanceof He && "feature-state" === t.name) return !1; let e = !0; return t.eachChild((t => { e && !gr(t) && (e = !1); })), e } function xr(t, e) { if (t instanceof He && e.indexOf(t.name) >= 0) return !1; let r = !0; return t.eachChild((t => { r && !xr(t, e) && (r = !1); })), r } class vr { constructor(t, e) { this.type = e.type, this.name = t, this.boundExpression = e; } static parse(t, e) { if (2 !== t.length || "string" != typeof t[1]) return e.error("'var' expression requires exactly one string literal argument."); const r = t[1]; return e.scope.has(r) ? new vr(r, e.scope.get(r)) : e.error(`Unknown variable "${r}". Make sure "${r}" has been bound in an enclosing "let" expression before using it.`, 1) } evaluate(t) { return this.boundExpression.evaluate(t) } eachChild() {} outputDefined() { return !1 } serialize() { return ["var", this.name] } } var br = vr; class wr { constructor(t, e = [], r, n = new ne, i = []) { this.registry = t, this.path = e, this.key = e.map((t => `[${t}]`)).join(""), this.scope = n, this.errors = i, this.expectedType = r; } parse(t, e, r, n, i = {}) { return e ? this.concat(e, r, n)._parse(t, i) : this._parse(t, i) } _parse(t, e) { function r(t, e, r) { return "assert" === r ? new Ue(e, [t]) : "coerce" === r ? new Ze(e, [t]) : t } if (null !== t && "string" != typeof t && "boolean" != typeof t && "number" != typeof t || (t = ["literal", t]), Array.isArray(t)) { if (0 === t.length) return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].'); const n = t[0]; if ("string" != typeof n) return this.error(`Expression name must be a string, but found ${typeof n} instead. If you wanted a literal array, use ["literal", [...]].`, 0), null; const i = this.registry[n]; if (i) { let n = i.parse(t, this); if (!n) return null; if (this.expectedType) { const t = this.expectedType, i = n.type; if ("string" !== t.kind && "number" !== t.kind && "boolean" !== t.kind && "object" !== t.kind && "array" !== t.kind || "value" !== i.kind) if ("color" !== t.kind && "formatted" !== t.kind && "resolvedImage" !== t.kind || "value" !== i.kind && "string" !== i.kind) { if (this.checkSubtype(t, i)) return null } else n = r(n, t, e.typeAnnotation || "coerce"); else n = r(n, t, e.typeAnnotation || "assert"); } if (!(n instanceof Fe) && "resolvedImage" !== n.type.kind && Ar(n)) { const t = new Ke; try { n = new Fe(n.type, n.evaluate(t)); } catch (t) { return this.error(t.message), null } } return n } return this.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`, 0) } return this.error(void 0 === t ? "'undefined' value invalid. Use null instead." : "object" == typeof t ? 'Bare objects invalid. Use ["literal", {...}] instead.' : `Expected an array, but found ${typeof t} instead.`) } concat(t, e, r) { const n = "number" == typeof t ? this.path.concat(t) : this.path, i = r ? this.scope.concat(r) : this.scope; return new wr(this.registry, n, e || null, i, this.errors) } error(t, ...e) { const r = `${this.key}${e.map((t=>`[${t}]`)).join("")}`; this.errors.push(new ee(r, t)); } checkSubtype(t, e) { const r = ge(t, e); return r && this.error(r), r } } var _r = wr; function Ar(t) { if (t instanceof br) return Ar(t.boundExpression); if (t instanceof He && "error" === t.name) return !1; if (t instanceof We) return !1; if (t instanceof yr) return !1; const e = t instanceof Ze || t instanceof Ue; let r = !0; return t.eachChild((t => { r = e ? r && Ar(t) : r && t instanceof Fe; })), !!r && mr(t) && xr(t, ["zoom", "heatmap-density", "line-progress", "sky-radial-progress", "accumulated", "is-supported-script", "pitch", "distance-from-center"]) } function Sr(t, e) { const r = t.length - 1; let n, i, s = 0, a = r, o = 0; for (; s <= a;) if (o = Math.floor((s + a) / 2), n = t[o], i = t[o + 1], n <= e) { if (o === r || e < i) return o; s = o + 1; } else { if (!(n > e)) throw new Re("Input is not a number."); a = o - 1; } return 0 } class kr { constructor(t, e, r) { this.type = t, this.input = e, this.labels = [], this.outputs = []; for (const [t, e] of r) this.labels.push(t), this.outputs.push(e); } static parse(t, e) { if (t.length - 1 < 4) return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`); if ((t.length - 1) % 2 != 0) return e.error("Expected an even number of arguments."); const r = e.parse(t[1], 1, se); if (!r) return null; const n = []; let i = null; e.expectedType && "value" !== e.expectedType.kind && (i = e.expectedType); for (let r = 1; r < t.length; r += 2) { const s = 1 === r ? -1 / 0 : t[r], a = t[r + 1], o = r, l = r + 1; if ("number" != typeof s) return e.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.', o); if (n.length && n[n.length - 1][0] >= s) return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.', o); const u = e.parse(a, l, i); if (!u) return null; i = i || u.type, n.push([s, u]); } return new kr(i, r, n) } evaluate(t) { const e = this.labels, r = this.outputs; if (1 === e.length) return r[0].evaluate(t); const n = this.input.evaluate(t); if (n <= e[0]) return r[0].evaluate(t); const i = e.length; return n >= e[i - 1] ? r[i - 1].evaluate(t) : r[Sr(e, n)].evaluate(t) } eachChild(t) { t(this.input); for (const e of this.outputs) t(e); } outputDefined() { return this.outputs.every((t => t.outputDefined())) } serialize() { const t = ["step", this.input.serialize()]; for (let e = 0; e < this.labels.length; e++) e > 0 && t.push(this.labels[e]), t.push(this.outputs[e].serialize()); return t } } var Ir = kr; function Mr(t, e, r) { return t * (1 - r) + e * r } var Tr = Object.freeze({ __proto__: null, number: Mr, color: function(t, e, r) { return new Me(Mr(t.r, e.r, r), Mr(t.g, e.g, r), Mr(t.b, e.b, r), Mr(t.a, e.a, r)) }, array: function(t, e, r) { return t.map(((t, n) => Mr(t, e[n], r))) } }); const zr = .95047, Br = 1.08883, Er = 4 / 29, Cr = 6 / 29, Pr = 3 * Cr * Cr, Dr = Math.PI / 180, Vr = 180 / Math.PI; function Lr(t) { return t > .008856451679035631 ? Math.pow(t, 1 / 3) : t / Pr + Er } function Fr(t) { return t > Cr ? t * t * t : Pr * (t - Er) } function Rr(t) { return 255 * (t <= .0031308 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - .055) } function jr(t) { return (t /= 255) <= .04045 ? t / 12.92 : Math.pow((t + .055) / 1.055, 2.4) } function $r(t) { const e = jr(t.r), r = jr(t.g), n = jr(t.b), i = Lr((.4124564 * e + .3575761 * r + .1804375 * n) / zr), s = Lr((.2126729 * e + .7151522 * r + .072175 * n) / 1); return { l: 116 * s - 16, a: 500 * (i - s), b: 200 * (s - Lr((.0193339 * e + .119192 * r + .9503041 * n) / Br)), alpha: t.a } } function Ur(t) { let e = (t.l + 16) / 116, r = isNaN(t.a) ? e : e + t.a / 500, n = isNaN(t.b) ? e : e - t.b / 200; return e = 1 * Fr(e), r = zr * Fr(r), n = Br * Fr(n), new Me(Rr(3.2404542 * r - 1.5371385 * e - .4985314 * n), Rr(-.969266 * r + 1.8760108 * e + .041556 * n), Rr(.0556434 * r - .2040259 * e + 1.0572252 * n), t.alpha) } function Or(t, e, r) { const n = e - t; return t + r * (n > 180 || n < -180 ? n - 360 * Math.round(n / 360) : n) } const qr = { forward: $r, reverse: Ur, interpolate: function(t, e, r) { return { l: Mr(t.l, e.l, r), a: Mr(t.a, e.a, r), b: Mr(t.b, e.b, r), alpha: Mr(t.alpha, e.alpha, r) } } }, Nr = { forward: function(t) { const { l: e, a: r, b: n } = $r(t), i = Math.atan2(n, r) * Vr; return { h: i < 0 ? i + 360 : i, c: Math.sqrt(r * r + n * n), l: e, alpha: t.a } }, reverse: function(t) { const e = t.h * Dr, r = t.c; return Ur({ l: t.l, a: Math.cos(e) * r, b: Math.sin(e) * r, alpha: t.alpha }) }, interpolate: function(t, e, r) { return { h: Or(t.h, e.h, r), c: Mr(t.c, e.c, r), l: Mr(t.l, e.l, r), alpha: Mr(t.alpha, e.alpha, r) } } }; var Gr = Object.freeze({ __proto__: null, lab: qr, hcl: Nr }); class Zr { constructor(t, e, r, n, i) { this.type = t, this.operator = e, this.interpolation = r, this.input = n, this.labels = [], this.outputs = []; for (const [t, e] of i) this.labels.push(t), this.outputs.push(e); } static interpolationFactor(t, e, r, n) { let i = 0; if ("exponential" === t.name) i = Xr(e, t.base, r, n); else if ("linear" === t.name) i = Xr(e, 1, r, n); else if ("cubic-bezier" === t.name) { const s = t.controlPoints; i = new p(s[0], s[1], s[2], s[3]).solve(Xr(e, 1, r, n)); } return i } static parse(t, e) { let [r, n, i, ...s] = t; if (!Array.isArray(n) || 0 === n.length) return e.error("Expected an interpolation type expression.", 1); if ("linear" === n[0]) n = { name: "linear" }; else if ("exponential" === n[0]) { const t = n[1]; if ("number" != typeof t) return e.error("Exponential interpolation requires a numeric base.", 1, 1); n = { name: "exponential", base: t }; } else { if ("cubic-bezier" !== n[0]) return e.error(`Unknown interpolation type ${String(n[0])}`, 1, 0); { const t = n.slice(1); if (4 !== t.length || t.some((t => "number" != typeof t || t < 0 || t > 1))) return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.", 1); n = { name: "cubic-bezier", controlPoints: t }; } } if (t.length - 1 < 4) return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`); if ((t.length - 1) % 2 != 0) return e.error("Expected an even number of arguments."); if (i = e.parse(i, 2, se), !i) return null; const a = []; let o = null; "interpolate-hcl" === r || "interpolate-lab" === r ? o = le : e.expectedType && "value" !== e.expectedType.kind && (o = e.expectedType); for (let t = 0; t < s.length; t += 2) { const r = s[t], n = s[t + 1], i = t + 3, l = t + 4; if ("number" != typeof r) return e.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.', i); if (a.length && a[a.length - 1][0] >= r) return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.', i); const u = e.parse(n, l, o); if (!u) return null; o = o || u.type, a.push([r, u]); } return "number" === o.kind || "color" === o.kind || "array" === o.kind && "number" === o.itemType.kind && "number" == typeof o.N ? new Zr(o, r, n, i, a) : e.error(`Type ${ye(o)} is not interpolatable.`) } evaluate(t) { const e = this.labels, r = this.outputs; if (1 === e.length) return r[0].evaluate(t); const n = this.input.evaluate(t); if (n <= e[0]) return r[0].evaluate(t); const i = e.length; if (n >= e[i - 1]) return r[i - 1].evaluate(t); const s = Sr(e, n), a = Zr.interpolationFactor(this.interpolation, n, e[s], e[s + 1]), o = r[s].evaluate(t), l = r[s + 1].evaluate(t); return "interpolate" === this.operator ? Tr[this.type.kind.toLowerCase()](o, l, a) : "interpolate-hcl" === this.operator ? Nr.reverse(Nr.interpolate(Nr.forward(o), Nr.forward(l), a)) : qr.reverse(qr.interpolate(qr.forward(o), qr.forward(l), a)) } eachChild(t) { t(this.input); for (const e of this.outputs) t(e); } outputDefined() { return this.outputs.every((t => t.outputDefined())) } serialize() { let t; t = "linear" === this.interpolation.name ? ["linear"] : "exponential" === this.interpolation.name ? 1 === this.interpolation.base ? ["linear"] : ["exponential", this.interpolation.base] : ["cubic-bezier"].concat(this.interpolation.controlPoints); const e = [this.operator, t, this.input.serialize()]; for (let t = 0; t < this.labels.length; t++) e.push(this.labels[t], this.outputs[t].serialize()); return e } } function Xr(t, e, r, n) { const i = n - r, s = t - r; return 0 === i ? 0 : 1 === e ? s / i : (Math.pow(e, s) - 1) / (Math.pow(e, i) - 1) } var Kr = Zr; class Yr { constructor(t, e) { this.type = t, this.args = e; } static parse(t, e) { if (t.length < 2) return e.error("Expectected at least one argument."); let r = null; const n = e.expectedType; n && "value" !== n.kind && (r = n); const i = []; for (const n of t.slice(1)) { const t = e.parse(n, 1 + i.length, r, void 0, { typeAnnotation: "omit" }); if (!t) return null; r = r || t.type, i.push(t); } const s = n && i.some((t => ge(n, t.type))); return new Yr(s ? ce : r, i) } evaluate(t) { let e, r = null, n = 0; for (const i of this.args) { if (n++, r = i.evaluate(t), r && r instanceof Ee && !r.available && (e || (e = r), r = null, n === this.args.length)) return e; if (null !== r) break } return r } eachChild(t) { this.args.forEach(t); } outputDefined() { return this.args.every((t => t.outputDefined())) } serialize() { const t = ["coalesce"]; return this.eachChild((e => { t.push(e.serialize()); })), t } } var Hr = Yr; class Wr { constructor(t, e) { this.type = e.type, this.bindings = [].concat(t), this.result = e; } evaluate(t) { return this.result.evaluate(t) } eachChild(t) { for (const e of this.bindings) t(e[1]); t(this.result); } static parse(t, e) { if (t.length < 4) return e.error(`Expected at least 3 arguments, but found ${t.length-1} instead.`); const r = []; for (let n = 1; n < t.length - 1; n += 2) { const i = t[n]; if ("string" != typeof i) return e.error(`Expected string, but found ${typeof i} instead.`, n); if (/[^a-zA-Z0-9_]/.test(i)) return e.error("Variable names must contain only alphanumeric characters or '_'.", n); const s = e.parse(t[n + 1], n + 1); if (!s) return null; r.push([i, s]); } const n = e.parse(t[t.length - 1], t.length - 1, e.expectedType, r); return n ? new Wr(r, n) : null } outputDefined() { return this.result.outputDefined() } serialize() { const t = ["let"]; for (const [e, r] of this.bindings) t.push(e, r.serialize()); return t.push(this.result.serialize()), t } } var Jr = Wr; class Qr { constructor(t, e, r) { this.type = t, this.index = e, this.input = r; } static parse(t, e) { if (3 !== t.length) return e.error(`Expected 2 arguments, but found ${t.length-1} instead.`); const r = e.parse(t[1], 1, se), n = e.parse(t[2], 2, de(e.expectedType || ce)); return r && n ? new Qr(n.type.itemType, r, n) : null } evaluate(t) { const e = this.index.evaluate(t), r = this.input.evaluate(t); if (e < 0) throw new Re(`Array index out of bounds: ${e} < 0.`); if (e >= r.length) throw new Re(`Array index out of bounds: ${e} > ${r.length-1}.`); if (e !== Math.floor(e)) throw new Re(`Array index must be an integer, but found ${e} instead.`); return r[e] } eachChild(t) { t(this.index), t(this.input); } outputDefined() { return !1 } serialize() { return ["at", this.index.serialize(), this.input.serialize()] } } var tn = Qr; class en { constructor(t, e) { this.type = oe, this.needle = t, this.haystack = e; } static parse(t, e) { if (3 !== t.length) return e.error(`Expected 2 arguments, but found ${t.length-1} instead.`); const r = e.parse(t[1], 1, ce), n = e.parse(t[2], 2, ce); return r && n ? xe(r.type, [oe, ae, se, ie, ce]) ? new en(r, n) : e.error(`Expected first argument to be of type boolean, string, number or null, but found ${ye(r.type)} instead`) : null } evaluate(t) { const e = this.needle.evaluate(t), r = this.haystack.evaluate(t); if (null == r) return !1; if (!ve(e, ["boolean", "string", "number", "null"])) throw new Re(`Expected first argument to be of type boolean, string, number or null, but found ${ye(De(e))} instead.`); if (!ve(r, ["string", "array"])) throw new Re(`Expected second argument to be of type array or string, but found ${ye(De(r))} instead.`); return r.indexOf(e) >= 0 } eachChild(t) { t(this.needle), t(this.haystack); } outputDefined() { return !0 } serialize() { return ["in", this.needle.serialize(), this.haystack.serialize()] } } var rn = en; class nn { constructor(t, e, r) { this.type = se, this.needle = t, this.haystack = e, this.fromIndex = r; } static parse(t, e) { if (t.length <= 2 || t.length >= 5) return e.error(`Expected 3 or 4 arguments, but found ${t.length-1} instead.`); const r = e.parse(t[1], 1, ce), n = e.parse(t[2], 2, ce); if (!r || !n) return null; if (!xe(r.type, [oe, ae, se, ie, ce])) return e.error(`Expected first argument to be of type boolean, string, number or null, but found ${ye(r.type)} instead`); if (4 === t.length) { const i = e.parse(t[3], 3, se); return i ? new nn(r, n, i) : null } return new nn(r, n) } evaluate(t) { const e = this.needle.evaluate(t), r = this.haystack.evaluate(t); if (!ve(e, ["boolean", "string", "number", "null"])) throw new Re(`Expected first argument to be of type boolean, string, number or null, but found ${ye(De(e))} instead.`); if (!ve(r, ["string", "array"])) throw new Re(`Expected second argument to be of type array or string, but found ${ye(De(r))} instead.`); if (this.fromIndex) { const n = this.fromIndex.evaluate(t); return r.indexOf(e, n) } return r.indexOf(e) } eachChild(t) { t(this.needle), t(this.haystack), this.fromIndex && t(this.fromIndex); } outputDefined() { return !1 } serialize() { if (null != this.fromIndex && void 0 !== this.fromIndex) { const t = this.fromIndex.serialize(); return ["index-of", this.needle.serialize(), this.haystack.serialize(), t] } return ["index-of", this.needle.serialize(), this.haystack.serialize()] } } var sn = nn; class an { constructor(t, e, r, n, i, s) { this.inputType = t, this.type = e, this.input = r, this.cases = n, this.outputs = i, this.otherwise = s; } static parse(t, e) { if (t.length < 5) return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`); if (t.length % 2 != 1) return e.error("Expected an even number of arguments."); let r, n; e.expectedType && "value" !== e.expectedType.kind && (n = e.expectedType); const i = {}, s = []; for (let a = 2; a < t.length - 1; a += 2) { let o = t[a]; const l = t[a + 1]; Array.isArray(o) || (o = [o]); const u = e.concat(a); if (0 === o.length) return u.error("Expected at least one branch label."); for (const t of o) { if ("number" != typeof t && "string" != typeof t) return u.error("Branch labels must be numbers or strings."); if ("number" == typeof t && Math.abs(t) > Number.MAX_SAFE_INTEGER) return u.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`); if ("number" == typeof t && Math.floor(t) !== t) return u.error("Numeric branch labels must be integer values."); if (r) { if (u.checkSubtype(r, De(t))) return null } else r = De(t); if (void 0 !== i[String(t)]) return u.error("Branch labels must be unique."); i[String(t)] = s.length; } const c = e.parse(l, a, n); if (!c) return null; n = n || c.type, s.push(c); } const a = e.parse(t[1], 1, ce); if (!a) return null; const o = e.parse(t[t.length - 1], t.length - 1, n); return o ? "value" !== a.type.kind && e.concat(1).checkSubtype(r, a.type) ? null : new an(r, n, a, i, s, o) : null } evaluate(t) { const e = this.input.evaluate(t); return (De(e) === this.inputType && this.outputs[this.cases[e]] || this.otherwise).evaluate(t) } eachChild(t) { t(this.input), this.outputs.forEach(t), t(this.otherwise); } outputDefined() { return this.outputs.every((t => t.outputDefined())) && this.otherwise.outputDefined() } serialize() { const t = ["match", this.input.serialize()], e = Object.keys(this.cases).sort(), r = [], n = {}; for (const t of e) { const e = n[this.cases[t]]; void 0 === e ? (n[this.cases[t]] = r.length, r.push([this.cases[t], [t] ])) : r[e][1].push(t); } const i = t => "number" === this.inputType.kind ? Number(t) : t; for (const [e, n] of r) t.push(1 === n.length ? i(n[0]) : n.map(i)), t.push(this.outputs[e].serialize()); return t.push(this.otherwise.serialize()), t } } var on = an; class ln { constructor(t, e, r) { this.type = t, this.branches = e, this.otherwise = r; } static parse(t, e) { if (t.length < 4) return e.error(`Expected at least 3 arguments, but found only ${t.length-1}.`); if (t.length % 2 != 0) return e.error("Expected an odd number of arguments."); let r; e.expectedType && "value" !== e.expectedType.kind && (r = e.expectedType); const n = []; for (let i = 1; i < t.length - 1; i += 2) { const s = e.parse(t[i], i, oe); if (!s) return null; const a = e.parse(t[i + 1], i + 1, r); if (!a) return null; n.push([s, a]), r = r || a.type; } const i = e.parse(t[t.length - 1], t.length - 1, r); return i ? new ln(r, n, i) : null } evaluate(t) { for (const [e, r] of this.branches) if (e.evaluate(t)) return r.evaluate(t); return this.otherwise.evaluate(t) } eachChild(t) { for (const [e, r] of this.branches) t(e), t(r); t(this.otherwise); } outputDefined() { return this.branches.every((([t, e]) => e.outputDefined())) && this.otherwise.outputDefined() } serialize() { const t = ["case"]; return this.eachChild((e => { t.push(e.serialize()); })), t } } var un = ln; class cn { constructor(t, e, r, n) { this.type = t, this.input = e, this.beginIndex = r, this.endIndex = n; } static parse(t, e) { if (t.length <= 2 || t.length >= 5) return e.error(`Expected 3 or 4 arguments, but found ${t.length-1} instead.`); const r = e.parse(t[1], 1, ce), n = e.parse(t[2], 2, se); if (!r || !n) return null; if (!xe(r.type, [de(ce), ae, ce])) return e.error(`Expected first argument to be of type array or string, but found ${ye(r.type)} instead`); if (4 === t.length) { const i = e.parse(t[3], 3, se); return i ? new cn(r.type, r, n, i) : null } return new cn(r.type, r, n) } evaluate(t) { const e = this.input.evaluate(t), r = this.beginIndex.evaluate(t); if (!ve(e, ["string", "array"])) throw new Re(`Expected first argument to be of type array or string, but found ${ye(De(e))} instead.`); if (this.endIndex) { const n = this.endIndex.evaluate(t); return e.slice(r, n) } return e.slice(r) } eachChild(t) { t(this.input), t(this.beginIndex), this.endIndex && t(this.endIndex); } outputDefined() { return !1 } serialize() { if (null != this.endIndex && void 0 !== this.endIndex) { const t = this.endIndex.serialize(); return ["slice", this.input.serialize(), this.beginIndex.serialize(), t] } return ["slice", this.input.serialize(), this.beginIndex.serialize()] } } var hn = cn; function pn(t, e) { return "==" === t || "!=" === t ? "boolean" === e.kind || "string" === e.kind || "number" === e.kind || "null" === e.kind || "value" === e.kind : "string" === e.kind || "number" === e.kind || "value" === e.kind } function fn(t, e, r, n) { return 0 === n.compare(e, r) } function dn(t, e, r) { const n = "==" !== t && "!=" !== t; return class i { constructor(t, e, r) { this.type = oe, this.lhs = t, this.rhs = e, this.collator = r, this.hasUntypedArgument = "value" === t.type.kind || "value" === e.type.kind; } static parse(t, e) { if (3 !== t.length && 4 !== t.length) return e.error("Expected two or three arguments."); const r = t[0]; let s = e.parse(t[1], 1, ce); if (!s) return null; if (!pn(r, s.type)) return e.concat(1).error(`"${r}" comparisons are not supported for type '${ye(s.type)}'.`); let a = e.parse(t[2], 2, ce); if (!a) return null; if (!pn(r, a.type)) return e.concat(2).error(`"${r}" comparisons are not supported for type '${ye(a.type)}'.`); if (s.type.kind !== a.type.kind && "value" !== s.type.kind && "value" !== a.type.kind) return e.error(`Cannot compare types '${ye(s.type)}' and '${ye(a.type)}'.`); n && ("value" === s.type.kind && "value" !== a.type.kind ? s = new Ue(a.type, [s]) : "value" !== s.type.kind && "value" === a.type.kind && (a = new Ue(s.type, [a]))); let o = null; if (4 === t.length) { if ("string" !== s.type.kind && "string" !== a.type.kind && "value" !== s.type.kind && "value" !== a.type.kind) return e.error("Cannot use collator to compare non-string types."); if (o = e.parse(t[3], 3, he), !o) return null } return new i(s, a, o) } evaluate(i) { const s = this.lhs.evaluate(i), a = this.rhs.evaluate(i); if (n && this.hasUntypedArgument) { const e = De(s), r = De(a); if (e.kind !== r.kind || "string" !== e.kind && "number" !== e.kind) throw new Re(`Expected arguments for "${t}" to be (string, string) or (number, number), but found (${e.kind}, ${r.kind}) instead.`) } if (this.collator && !n && this.hasUntypedArgument) { const t = De(s), r = De(a); if ("string" !== t.kind || "string" !== r.kind) return e(i, s, a) } return this.collator ? r(i, s, a, this.collator.evaluate(i)) : e(i, s, a) } eachChild(t) { t(this.lhs), t(this.rhs), this.collator && t(this.collator); } outputDefined() { return !0 } serialize() { const e = [t]; return this.eachChild((t => { e.push(t.serialize()); })), e } } } const yn = dn("==", (function(t, e, r) { return e === r }), fn), mn = dn("!=", (function(t, e, r) { return e !== r }), (function(t, e, r, n) { return !fn(0, e, r, n) })), gn = dn("<", (function(t, e, r) { return e < r }), (function(t, e, r, n) { return n.compare(e, r) < 0 })), xn = dn(">", (function(t, e, r) { return e > r }), (function(t, e, r, n) { return n.compare(e, r) > 0 })), vn = dn("<=", (function(t, e, r) { return e <= r }), (function(t, e, r, n) { return n.compare(e, r) <= 0 })), bn = dn(">=", (function(t, e, r) { return e >= r }), (function(t, e, r, n) { return n.compare(e, r) >= 0 })); class wn { constructor(t, e, r, n, i, s) { this.type = ae, this.number = t, this.locale = e, this.currency = r, this.unit = n, this.minFractionDigits = i, this.maxFractionDigits = s; } static parse(t, e) { if (3 !== t.length) return e.error("Expected two arguments."); const r = e.parse(t[1], 1, se); if (!r) return null; const n = t[2]; if ("object" != typeof n || Array.isArray(n)) return e.error("NumberFormat options argument must be an object."); let i = null; if (n.locale && (i = e.parse(n.locale, 1, ae), !i)) return null; let s = null; if (n.currency && (s = e.parse(n.currency, 1, ae), !s)) return null; let a = null; if (n.unit && (a = e.parse(n.unit, 1, ae), !a)) return null; let o = null; if (n["min-fraction-digits"] && (o = e.parse(n["min-fraction-digits"], 1, se), !o)) return null; let l = null; return n["max-fraction-digits"] && (l = e.parse(n["max-fraction-digits"], 1, se), !l) ? null : new wn(r, i, s, a, o, l) } evaluate(t) { return new Intl.NumberFormat(this.locale ? this.locale.evaluate(t) : [], { style: (this.currency ? "currency" : this.unit && "unit") || "decimal", currency: this.currency ? this.currency.evaluate(t) : void 0, unit: this.unit ? this.unit.evaluate(t) : void 0, minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(t) : void 0, maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(t) : void 0 }).format(this.number.evaluate(t)) } eachChild(t) { t(this.number), this.locale && t(this.locale), this.currency && t(this.currency), this.unit && t(this.unit), this.minFractionDigits && t(this.minFractionDigits), this.maxFractionDigits && t(this.maxFractionDigits); } outputDefined() { return !1 } serialize() { const t = {}; return this.locale && (t.locale = this.locale.serialize()), this.currency && (t.currency = this.currency.serialize()), this.unit && (t.unit = this.unit.serialize()), this.minFractionDigits && (t["min-fraction-digits"] = this.minFractionDigits.serialize()), this.maxFractionDigits && (t["max-fraction-digits"] = this.maxFractionDigits.serialize()), ["number-format", this.number.serialize(), t] } } class _n { constructor(t) { this.type = se, this.input = t; } static parse(t, e) { if (2 !== t.length) return e.error(`Expected 1 argument, but found ${t.length-1} instead.`); const r = e.parse(t[1], 1); return r ? "array" !== r.type.kind && "string" !== r.type.kind && "value" !== r.type.kind ? e.error(`Expected argument of type string or array, but found ${ye(r.type)} instead.`) : new _n(r) : null } evaluate(t) { const e = this.input.evaluate(t); if ("string" == typeof e) return e.length; if (Array.isArray(e)) return e.length; throw new Re(`Expected value to be of type string or array, but found ${ye(De(e))} instead.`) } eachChild(t) { t(this.input); } outputDefined() { return !1 } serialize() { const t = ["length"]; return this.eachChild((e => { t.push(e.serialize()); })), t } } const An = { "==": yn, "!=": mn, ">": xn, "<": gn, ">=": bn, "<=": vn, array: Ue, at: tn, boolean: Ue, case: un, coalesce: Hr, collator: We, format: Oe, image: qe, in: rn, "index-of": sn, interpolate: Kr, "interpolate-hcl": Kr, "interpolate-lab": Kr, length: _n, let: Jr, literal: Fe, match: on, number: Ue, "number-format": wn, object: Ue, slice: hn, step: Ir, string: Ue, "to-boolean": Ze, "to-color": Ze, "to-number": Ze, "to-string": Ze, var: br, within: yr }; function Sn(t, [e, r, n, i]) { e = e.evaluate(t), r = r.evaluate(t), n = n.evaluate(t); const s = i ? i.evaluate(t) : 1, a = Ce(e, r, n, s); if (a) throw new Re(a); return new Me(e / 255 * s, r / 255 * s, n / 255 * s, s) } function kn(t, e) { return t in e } function In(t, e) { const r = e[t]; return void 0 === r ? null : r } function Mn(t) { return { type: t } } He.register(An, { error: [{ kind: "error" }, [ae], (t, [e]) => { throw new Re(e.evaluate(t)) } ], typeof: [ae, [ce], (t, [e]) => ye(De(e.evaluate(t)))], "to-rgba": [de(se, 4), [le], (t, [e]) => e.evaluate(t).toArray()], rgb: [le, [se, se, se], Sn], rgba: [le, [se, se, se, se], Sn], has: { type: oe, overloads: [ [ [ae], (t, [e]) => kn(e.evaluate(t), t.properties()) ], [ [ae, ue], (t, [e, r]) => kn(e.evaluate(t), r.evaluate(t)) ] ] }, get: { type: ce, overloads: [ [ [ae], (t, [e]) => In(e.evaluate(t), t.properties()) ], [ [ae, ue], (t, [e, r]) => In(e.evaluate(t), r.evaluate(t)) ] ] }, "feature-state": [ce, [ae], (t, [e]) => In(e.evaluate(t), t.featureState || {})], properties: [ue, [], t => t.properties()], "geometry-type": [ae, [], t => t.geometryType()], id: [ce, [], t => t.id()], zoom: [se, [], t => t.globals.zoom], pitch: [se, [], t => t.globals.pitch || 0], "distance-from-center": [se, [], t => t.distanceFromCenter()], "heatmap-density": [se, [], t => t.globals.heatmapDensity || 0], "line-progress": [se, [], t => t.globals.lineProgress || 0], "sky-radial-progress": [se, [], t => t.globals.skyRadialProgress || 0], accumulated: [ce, [], t => void 0 === t.globals.accumulated ? null : t.globals.accumulated], "+": [se, Mn(se), (t, e) => { let r = 0; for (const n of e) r += n.evaluate(t); return r }], "*": [se, Mn(se), (t, e) => { let r = 1; for (const n of e) r *= n.evaluate(t); return r }], "-": { type: se, overloads: [ [ [se, se], (t, [e, r]) => e.evaluate(t) - r.evaluate(t) ], [ [se], (t, [e]) => -e.evaluate(t) ] ] }, "/": [se, [se, se], (t, [e, r]) => e.evaluate(t) / r.evaluate(t)], "%": [se, [se, se], (t, [e, r]) => e.evaluate(t) % r.evaluate(t)], ln2: [se, [], () => Math.LN2], pi: [se, [], () => Math.PI], e: [se, [], () => Math.E], "^": [se, [se, se], (t, [e, r]) => Math.pow(e.evaluate(t), r.evaluate(t))], sqrt: [se, [se], (t, [e]) => Math.sqrt(e.evaluate(t))], log10: [se, [se], (t, [e]) => Math.log(e.evaluate(t)) / Math.LN10], ln: [se, [se], (t, [e]) => Math.log(e.evaluate(t))], log2: [se, [se], (t, [e]) => Math.log(e.evaluate(t)) / Math.LN2], sin: [se, [se], (t, [e]) => Math.sin(e.evaluate(t))], cos: [se, [se], (t, [e]) => Math.cos(e.evaluate(t))], tan: [se, [se], (t, [e]) => Math.tan(e.evaluate(t))], asin: [se, [se], (t, [e]) => Math.asin(e.evaluate(t))], acos: [se, [se], (t, [e]) => Math.acos(e.evaluate(t))], atan: [se, [se], (t, [e]) => Math.atan(e.evaluate(t))], min: [se, Mn(se), (t, e) => Math.min(...e.map((e => e.evaluate(t))))], max: [se, Mn(se), (t, e) => Math.max(...e.map((e => e.evaluate(t))))], abs: [se, [se], (t, [e]) => Math.abs(e.evaluate(t))], round: [se, [se], (t, [e]) => { const r = e.evaluate(t); return r < 0 ? -Math.round(-r) : Math.round(r) }], floor: [se, [se], (t, [e]) => Math.floor(e.evaluate(t))], ceil: [se, [se], (t, [e]) => Math.ceil(e.evaluate(t))], "filter-==": [oe, [ae, ce], (t, [e, r]) => t.properties()[e.value] === r.value], "filter-id-==": [oe, [ce], (t, [e]) => t.id() === e.value], "filter-type-==": [oe, [ae], (t, [e]) => t.geometryType() === e.value], "filter-<": [oe, [ae, ce], (t, [e, r]) => { const n = t.properties()[e.value], i = r.value; return typeof n == typeof i && n < i }], "filter-id-<": [oe, [ce], (t, [e]) => { const r = t.id(), n = e.value; return typeof r == typeof n && r < n }], "filter->": [oe, [ae, ce], (t, [e, r]) => { const n = t.properties()[e.value], i = r.value; return typeof n == typeof i && n > i }], "filter-id->": [oe, [ce], (t, [e]) => { const r = t.id(), n = e.value; return typeof r == typeof n && r > n }], "filter-<=": [oe, [ae, ce], (t, [e, r]) => { const n = t.properties()[e.value], i = r.value; return typeof n == typeof i && n <= i }], "filter-id-<=": [oe, [ce], (t, [e]) => { const r = t.id(), n = e.value; return typeof r == typeof n && r <= n }], "filter->=": [oe, [ae, ce], (t, [e, r]) => { const n = t.properties()[e.value], i = r.value; return typeof n == typeof i && n >= i }], "filter-id->=": [oe, [ce], (t, [e]) => { const r = t.id(), n = e.value; return typeof r == typeof n && r >= n }], "filter-has": [oe, [ce], (t, [e]) => e.value in t.properties()], "filter-has-id": [oe, [], t => null !== t.id() && void 0 !== t.id()], "filter-type-in": [oe, [de(ae)], (t, [e]) => e.value.indexOf(t.geometryType()) >= 0], "filter-id-in": [oe, [de(ce)], (t, [e]) => e.value.indexOf(t.id()) >= 0], "filter-in-small": [oe, [ae, de(ce)], (t, [e, r]) => r.value.indexOf(t.properties()[e.value]) >= 0], "filter-in-large": [oe, [ae, de(ce)], (t, [e, r]) => function(t, e, r, n) { for (; r <= n;) { const i = r + n >> 1; if (e[i] === t) return !0; e[i] > t ? n = i - 1 : r = i + 1; } return !1 }(t.properties()[e.value], r.value, 0, r.value.length - 1)], all: { type: oe, overloads: [ [ [oe, oe], (t, [e, r]) => e.evaluate(t) && r.evaluate(t) ], [Mn(oe), (t, e) => { for (const r of e) if (!r.evaluate(t)) return !1; return !0 }] ] }, any: { type: oe, overloads: [ [ [oe, oe], (t, [e, r]) => e.evaluate(t) || r.evaluate(t) ], [Mn(oe), (t, e) => { for (const r of e) if (r.evaluate(t)) return !0; return !1 }] ] }, "!": [oe, [oe], (t, [e]) => !e.evaluate(t)], "is-supported-script": [oe, [ae], (t, [e]) => { const r = t.globals && t.globals.isSupportedScript; return !r || r(e.evaluate(t)) }], upcase: [ae, [ae], (t, [e]) => e.evaluate(t).toUpperCase()], downcase: [ae, [ae], (t, [e]) => e.evaluate(t).toLowerCase()], concat: [ae, Mn(ce), (t, e) => e.map((e => Ve(e.evaluate(t)))).join("")], "resolved-locale": [ae, [he], (t, [e]) => e.evaluate(t).resolvedLocale()] }); var Tn = An; function zn(t) { return { result: "success", value: t } } function Bn(t) { return { result: "error", value: t } } function En(t) { return "data-driven" === t["property-type"] } function Cn(t) { return !!t.expression && t.expression.parameters.indexOf("zoom") > -1 } function Pn(t) { return !!t.expression && t.expression.interpolated } function Dn(t) { return t instanceof Number ? "number" : t instanceof String ? "string" : t instanceof Boolean ? "boolean" : Array.isArray(t) ? "array" : null === t ? "null" : typeof t } function Vn(t) { return "object" == typeof t && null !== t && !Array.isArray(t) } function Ln(t) { return t } function Fn(t, e) { const r = "color" === e.type, n = t.stops && "object" == typeof t.stops[0][0], i = n || !(n || void 0 !== t.property), s = t.type || (Pn(e) ? "exponential" : "interval"); if (r && ((t = Wt({}, t)).stops && (t.stops = t.stops.map((t => [t[0], Me.parse(t[1])]))), t.default = Me.parse(t.default ? t.default : e.default)), t.colorSpace && "rgb" !== t.colorSpace && !Gr[t.colorSpace]) throw new Error(`Unknown color space: ${t.colorSpace}`); let a, o, l; if ("exponential" === s) a = Un; else if ("interval" === s) a = $n; else if ("categorical" === s) { a = jn, o = Object.create(null); for (const e of t.stops) o[e[0]] = e[1]; l = typeof t.stops[0][0]; } else { if ("identity" !== s) throw new Error(`Unknown function type "${s}"`); a = On; } if (n) { const r = {}, n = []; for (let e = 0; e < t.stops.length; e++) { const i = t.stops[e], s = i[0].zoom; void 0 === r[s] && (r[s] = { zoom: s, type: t.type, property: t.property, default: t.default, stops: [] }, n.push(s)), r[s].stops.push([i[0].value, i[1]]); } const i = []; for (const t of n) i.push([r[t].zoom, Fn(r[t], e)]); const s = { name: "linear" }; return { kind: "composite", interpolationType: s, interpolationFactor: Kr.interpolationFactor.bind(void 0, s), zoomStops: i.map((t => t[0])), evaluate: ({ zoom: r }, n) => Un({ stops: i, base: t.base }, e, r).evaluate(r, n) } } if (i) { const r = "exponential" === s ? { name: "exponential", base: void 0 !== t.base ? t.base : 1 } : null; return { kind: "camera", interpolationType: r, interpolationFactor: Kr.interpolationFactor.bind(void 0, r), zoomStops: t.stops.map((t => t[0])), evaluate: ({ zoom: r }) => a(t, e, r, o, l) } } return { kind: "source", evaluate(r, n) { const i = n && n.properties ? n.properties[t.property] : void 0; return void 0 === i ? Rn(t.default, e.default) : a(t, e, i, o, l) } } } function Rn(t, e, r) { return void 0 !== t ? t : void 0 !== e ? e : void 0 !== r ? r : void 0 } function jn(t, e, r, n, i) { return Rn(typeof r === i ? n[r] : void 0, t.default, e.default) } function $n(t, e, r) { if ("number" !== Dn(r)) return Rn(t.default, e.default); const n = t.stops.length; if (1 === n) return t.stops[0][1]; if (r <= t.stops[0][0]) return t.stops[0][1]; if (r >= t.stops[n - 1][0]) return t.stops[n - 1][1]; const i = Sr(t.stops.map((t => t[0])), r); return t.stops[i][1] } function Un(t, e, r) { const n = void 0 !== t.base ? t.base : 1; if ("number" !== Dn(r)) return Rn(t.default, e.default); const i = t.stops.length; if (1 === i) return t.stops[0][1]; if (r <= t.stops[0][0]) return t.stops[0][1]; if (r >= t.stops[i - 1][0]) return t.stops[i - 1][1]; const s = Sr(t.stops.map((t => t[0])), r), a = function(t, e, r, n) { const i = n - r, s = t - r; return 0 === i ? 0 : 1 === e ? s / i : (Math.pow(e, s) - 1) / (Math.pow(e, i) - 1) }(r, n, t.stops[s][0], t.stops[s + 1][0]), o = t.stops[s][1], l = t.stops[s + 1][1]; let u = Tr[e.type] || Ln; if (t.colorSpace && "rgb" !== t.colorSpace) { const e = Gr[t.colorSpace]; u = (t, r) => e.reverse(e.interpolate(e.forward(t), e.forward(r), a)); } return "function" == typeof o.evaluate ? { evaluate(...t) { const e = o.evaluate.apply(void 0, t), r = l.evaluate.apply(void 0, t); if (void 0 !== e && void 0 !== r) return u(e, r, a) } } : u(o, l, a) } function On(t, e, r) { return "color" === e.type ? r = Me.parse(r) : "formatted" === e.type ? r = Be.fromString(r.toString()) : "resolvedImage" === e.type ? r = Ee.fromString(r.toString()) : Dn(r) === e.type || "enum" === e.type && e.values[r] || (r = void 0), Rn(r, t.default, e.default) } class qn { constructor(t, e) { this.expression = t, this._warningHistory = {}, this._evaluator = new Ke, this._defaultValue = e ? function(t) { return "color" === t.type && (Vn(t.default) || Array.isArray(t.default)) ? new Me(0, 0, 0, 0) : "color" === t.type ? Me.parse(t.default) || null : void 0 === t.default ? null : t.default }(e) : null, this._enumValues = e && "enum" === e.type ? e.values : null; } evaluateWithoutErrorHandling(t, e, r, n, i, s, a, o) { return this._evaluator.globals = t, this._evaluator.feature = e, this._evaluator.featureState = r, this._evaluator.canonical = n || null, this._evaluator.availableImages = i || null, this._evaluator.formattedSection = s, this._evaluator.featureTileCoord = a || null, this._evaluator.featureDistanceData = o || null, this.expression.evaluate(this._evaluator) } evaluate(t, e, r, n, i, s, a, o) { this._evaluator.globals = t, this._evaluator.feature = e || null, this._evaluator.featureState = r || null, this._evaluator.canonical = n || null, this._evaluator.availableImages = i || null, this._evaluator.formattedSection = s || null, this._evaluator.featureTileCoord = a || null, this._evaluator.featureDistanceData = o || null; try { const t = this.expression.evaluate(this._evaluator); if (null == t || "number" == typeof t && t != t) return this._defaultValue; if (this._enumValues && !(t in this._enumValues)) throw new Re(`Expected value to be one of ${Object.keys(this._enumValues).map((t=>JSON.stringify(t))).join(", ")}, but found ${JSON.stringify(t)} instead.`); return t } catch (t) { return this._warningHistory[t.message] || (this._warningHistory[t.message] = !0, "undefined" != typeof console && console.warn(t.message)), this._defaultValue } } } function Nn(t) { return Array.isArray(t) && t.length > 0 && "string" == typeof t[0] && t[0] in Tn } function Gn(t, e) { const r = new _r(Tn, [], e ? function(t) { const e = { color: le, string: ae, number: se, enum: ae, boolean: oe, formatted: pe, resolvedImage: fe }; return "array" === t.type ? de(e[t.value] || ce, t.length) : e[t.type] }(e) : void 0), n = r.parse(t, void 0, void 0, void 0, e && "string" === e.type ? { typeAnnotation: "coerce" } : void 0); return n ? zn(new qn(n, e)) : Bn(r.errors) } class Zn { constructor(t, e) { this.kind = t, this._styleExpression = e, this.isStateDependent = "constant" !== t && !gr(e.expression); } evaluateWithoutErrorHandling(t, e, r, n, i, s) { return this._styleExpression.evaluateWithoutErrorHandling(t, e, r, n, i, s) } evaluate(t, e, r, n, i, s) { return this._styleExpression.evaluate(t, e, r, n, i, s) } } class Xn { constructor(t, e, r, n) { this.kind = t, this.zoomStops = r, this._styleExpression = e, this.isStateDependent = "camera" !== t && !gr(e.expression), this.interpolationType = n; } evaluateWithoutErrorHandling(t, e, r, n, i, s) { return this._styleExpression.evaluateWithoutErrorHandling(t, e, r, n, i, s) } evaluate(t, e, r, n, i, s) { return this._styleExpression.evaluate(t, e, r, n, i, s) } interpolationFactor(t, e, r) { return this.interpolationType ? Kr.interpolationFactor(this.interpolationType, t, e, r) : 0 } } function Kn(t, e) { if ("error" === (t = Gn(t, e)).result) return t; const r = t.value.expression, n = mr(r); if (!n && !En(e)) return Bn([new ee("", "data expressions not supported")]); const i = xr(r, ["zoom", "pitch", "distance-from-center"]); if (!i && !Cn(e)) return Bn([new ee("", "zoom expressions not supported")]); const s = Hn(r); return s || i ? s instanceof ee ? Bn([s]) : s instanceof Kr && !Pn(e) ? Bn([new ee("", '"interpolate" expressions cannot be used with this property')]) : zn(s ? new Xn(n ? "camera" : "composite", t.value, s.labels, s instanceof Kr ? s.interpolation : void 0) : new Zn(n ? "constant" : "source", t.value)) : Bn([new ee("", '"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]) } class Yn { constructor(t, e) { this._parameters = t, this._specification = e, Wt(this, Fn(this._parameters, this._specification)); } static deserialize(t) { return new Yn(t._parameters, t._specification) } static serialize(t) { return { _parameters: t._parameters, _specification: t._specification } } } function Hn(t) { let e = null; if (t instanceof Jr) e = Hn(t.result); else if (t instanceof Hr) { for (const r of t.args) if (e = Hn(r), e) break } else(t instanceof Ir || t instanceof Kr) && t.input instanceof He && "zoom" === t.input.name && (e = t); return e instanceof ee || t.eachChild((t => { const r = Hn(t); r instanceof ee ? e = r : !e && r ? e = new ee("", '"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.') : e && r && e !== r && (e = new ee("", 'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.')); })), e } class Wn { constructor(t, e, r, n) { this.message = (t ? `${t}: ` : "") + r, n && (this.identifier = n), null != e && e.__line__ && (this.line = e.__line__); } } function Jn(t) { const e = t.key, r = t.value, n = t.valueSpec || {}, i = t.objectElementValidators || {}, s = t.style, a = t.styleSpec; let o = []; const l = Dn(r); if ("object" !== l) return [new Wn(e, r, `object expected, ${l} found`)]; for (const t in r) { const l = t.split(".")[0], u = n[l] || n["*"]; let c; i[l] ? c = i[l] : n[l] ? c = Ci : i["*"] ? c = i["*"] : n["*"] && (c = Ci), c ? o = o.concat(c({ key: (e ? `${e}.` : e) + t, value: r[t], valueSpec: u, style: s, styleSpec: a, object: r, objectKey: t }, r)) : o.push(new Wn(e, r[t], `unknown property "${t}"`)); } for (const t in n) i[t] || n[t].required && void 0 === n[t].default && void 0 === r[t] && o.push(new Wn(e, r, `missing required property "${t}"`)); return o } function Qn(t) { const e = t.value, r = t.valueSpec, n = t.style, i = t.styleSpec, s = t.key, a = t.arrayElementValidator || Ci; if ("array" !== Dn(e)) return [new Wn(s, e, `array expected, ${Dn(e)} found`)]; if (r.length && e.length !== r.length) return [new Wn(s, e, `array length ${r.length} expected, length ${e.length} found`)]; if (r["min-length"] && e.length < r["min-length"]) return [new Wn(s, e, `array length at least ${r["min-length"]} expected, length ${e.length} found`)]; let o = { type: r.value, values: r.values, minimum: r.minimum, maximum: r.maximum, function: void 0 }; i.$version < 7 && (o.function = r.function), "object" === Dn(r.value) && (o = r.value); let l = []; for (let t = 0; t < e.length; t++) l = l.concat(a({ array: e, arrayIndex: t, value: e[t], valueSpec: o, style: n, styleSpec: i, key: `${s}[${t}]` })); return l } function ti(t) { const e = t.key, r = t.value, n = t.valueSpec; let i = Dn(r); if ("number" === i && r != r && (i = "NaN"), "number" !== i) return [new Wn(e, r, `number expected, ${i} found`)]; if ("minimum" in n) { let i = n.minimum; if ("array" === Dn(n.minimum) && (i = n.minimum[t.arrayIndex]), r < i) return [new Wn(e, r, `${r} is less than the minimum value ${i}`)] } if ("maximum" in n) { let i = n.maximum; if ("array" === Dn(n.maximum) && (i = n.maximum[t.arrayIndex]), r > i) return [new Wn(e, r, `${r} is greater than the maximum value ${i}`)] } return [] } function ei(t) { const e = t.valueSpec, r = Jt(t.value.type); let n, i, s, a = {}; const o = "categorical" !== r && void 0 === t.value.property, l = !o, u = "array" === Dn(t.value.stops) && "array" === Dn(t.value.stops[0]) && "object" === Dn(t.value.stops[0][0]), c = Jn({ key: t.key, value: t.value, valueSpec: t.styleSpec.function, style: t.style, styleSpec: t.styleSpec, objectElementValidators: { stops: function(t) { if ("identity" === r) return [new Wn(t.key, t.value, 'identity function may not have a "stops" property')]; let e = []; const n = t.value; return e = e.concat(Qn({ key: t.key, value: n, valueSpec: t.valueSpec, style: t.style, styleSpec: t.styleSpec, arrayElementValidator: h })), "array" === Dn(n) && 0 === n.length && e.push(new Wn(t.key, n, "array must have at least one stop")), e }, default: function(t) { return Ci({ key: t.key, value: t.value, valueSpec: e, style: t.style, styleSpec: t.styleSpec }) } } }); return "identity" === r && o && c.push(new Wn(t.key, t.value, 'missing required property "property"')), "identity" === r || t.value.stops || c.push(new Wn(t.key, t.value, 'missing required property "stops"')), "exponential" === r && t.valueSpec.expression && !Pn(t.valueSpec) && c.push(new Wn(t.key, t.value, "exponential functions not supported")), t.styleSpec.$version >= 8 && (l && !En(t.valueSpec) ? c.push(new Wn(t.key, t.value, "property functions not supported")) : o && !Cn(t.valueSpec) && c.push(new Wn(t.key, t.value, "zoom functions not supported"))), "categorical" !== r && !u || void 0 !== t.value.property || c.push(new Wn(t.key, t.value, '"property" property is required')), c; function h(t) { let r = []; const n = t.value, o = t.key; if ("array" !== Dn(n)) return [new Wn(o, n, `array expected, ${Dn(n)} found`)]; if (2 !== n.length) return [new Wn(o, n, `array length 2 expected, length ${n.length} found`)]; if (u) { if ("object" !== Dn(n[0])) return [new Wn(o, n, `object expected, ${Dn(n[0])} found`)]; if (void 0 === n[0].zoom) return [new Wn(o, n, "object stop key must have zoom")]; if (void 0 === n[0].value) return [new Wn(o, n, "object stop key must have value")]; const e = Jt(n[0].zoom); if ("number" != typeof e) return [new Wn(o, n[0].zoom, "stop zoom values must be numbers")]; if (s && s > e) return [new Wn(o, n[0].zoom, "stop zoom values must appear in ascending order")]; e !== s && (s = e, i = void 0, a = {}), r = r.concat(Jn({ key: `${o}[0]`, value: n[0], valueSpec: { zoom: {} }, style: t.style, styleSpec: t.styleSpec, objectElementValidators: { zoom: ti, value: p } })); } else r = r.concat(p({ key: `${o}[0]`, value: n[0], valueSpec: {}, style: t.style, styleSpec: t.styleSpec }, n)); return Nn(Qt(n[1])) ? r.concat([new Wn(`${o}[1]`, n[1], "expressions are not allowed in function stops.")]) : r.concat(Ci({ key: `${o}[1]`, value: n[1], valueSpec: e, style: t.style, styleSpec: t.styleSpec })) } function p(t, s) { const o = Dn(t.value), l = Jt(t.value), u = null !== t.value ? t.value : s; if (n) { if (o !== n) return [new Wn(t.key, u, `${o} stop domain type must match previous stop domain type ${n}`)] } else n = o; if ("number" !== o && "string" !== o && "boolean" !== o && "number" != typeof l && "string" != typeof l && "boolean" != typeof l) return [new Wn(t.key, u, "stop domain value must be a number, string, or boolean")]; if ("number" !== o && "categorical" !== r) { let n = `number expected, ${o} found`; return En(e) && void 0 === r && (n += '\nIf you intended to use a categorical function, specify `"type": "categorical"`.'), [new Wn(t.key, u, n)] } return "categorical" !== r || "number" !== o || "number" == typeof l && isFinite(l) && Math.floor(l) === l ? "categorical" !== r && "number" === o && "number" == typeof l && "number" == typeof i && void 0 !== i && l < i ? [new Wn(t.key, u, "stop domain values must appear in ascending order")] : (i = l, "categorical" === r && l in a ? [new Wn(t.key, u, "stop domain values must be unique")] : (a[l] = !0, [])) : [new Wn(t.key, u, `integer expected, found ${String(l)}`)] } } function ri(t) { const e = ("property" === t.expressionContext ? Kn : Gn)(Qt(t.value), t.valueSpec); if ("error" === e.result) return e.value.map((e => new Wn(`${t.key}${e.key}`, t.value, e.message))); const r = e.value.expression || e.value._styleExpression.expression; if ("property" === t.expressionContext && "text-font" === t.propertyKey && !r.outputDefined()) return [new Wn(t.key, t.value, `Invalid data expression for "${t.propertyKey}". Output values must be contained as literals within the expression.`)]; if ("property" === t.expressionContext && "layout" === t.propertyType && !gr(r)) return [new Wn(t.key, t.value, '"feature-state" data expressions are not supported with layout properties.')]; if ("filter" === t.expressionContext) return ni(r, t); if (t.expressionContext && 0 === t.expressionContext.indexOf("cluster")) { if (!xr(r, ["zoom", "feature-state"])) return [new Wn(t.key, t.value, '"zoom" and "feature-state" expressions are not supported with cluster properties.')]; if ("cluster-initial" === t.expressionContext && !mr(r)) return [new Wn(t.key, t.value, "Feature data expressions are not supported with initial expression part of cluster properties.")] } return [] } function ni(t, e) { const r = new Set(["zoom", "feature-state", "pitch", "distance-from-center"]); if (e.valueSpec && e.valueSpec.expression) for (const t of e.valueSpec.expression.parameters) r.delete(t); if (0 === r.size) return []; const n = []; return t instanceof He && r.has(t.name) ? [new Wn(e.key, e.value, `["${t.name}"] expression is not supported in a filter for a ${e.object.type} layer with id: ${e.object.id}`)] : (t.eachChild((t => { n.push(...ni(t, e)); })), n) } function ii(t) { const e = t.key, r = t.value, n = t.valueSpec, i = []; return Array.isArray(n.values) ? -1 === n.values.indexOf(Jt(r)) && i.push(new Wn(e, r, `expected one of [${n.values.join(", ")}], ${JSON.stringify(r)} found`)) : -1 === Object.keys(n.values).indexOf(Jt(r)) && i.push(new Wn(e, r, `expected one of [${Object.keys(n.values).join(", ")}], ${JSON.stringify(r)} found`)), i } function si(t) { if (!0 === t || !1 === t) return !0; if (!Array.isArray(t) || 0 === t.length) return !1; switch (t[0]) { case "has": return t.length >= 2 && "$id" !== t[1] && "$type" !== t[1]; case "in": return t.length >= 3 && ("string" != typeof t[1] || Array.isArray(t[2])); case "!in": case "!has": case "none": return !1; case "==": case "!=": case ">": case ">=": case "<": case "<=": return 3 !== t.length || Array.isArray(t[1]) || Array.isArray(t[2]); case "any": case "all": for (const e of t.slice(1)) if (!si(e) && "boolean" != typeof e) return !1; return !0; default: return !0 } } function ai(t, e = "fill") { if (null == t) return { filter: () => !0, needGeometry: !1, needFeature: !1 }; si(t) || (t = fi(t)); const r = t; let n = !0; try { n = function(t) { if (!ui(t)) return t; let e = Qt(t); return li(e), e = oi(e), e }(r); } catch (t) { console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(r,null,2)}\n `); } const i = Ht[`filter_${e}`], s = Gn(n, i); let a = null; if ("error" === s.result) throw new Error(s.value.map((t => `${t.key}: ${t.message}`)).join(", ")); a = (t, e, r) => s.value.evaluate(t, e, {}, r); let o = null, l = null; if (n !== r) { const t = Gn(r, i); if ("error" === t.result) throw new Error(t.value.map((t => `${t.key}: ${t.message}`)).join(", ")); o = (e, r, n, i, s) => t.value.evaluate(e, r, {}, n, void 0, void 0, i, s), l = !mr(t.value.expression); } return { filter: a, dynamicFilter: o || void 0, needGeometry: pi(n), needFeature: !!l } } function oi(t) { if (!Array.isArray(t)) return t; const e = function(t) { if (ci.has(t[0])) for (let e = 1; e < t.length; e++) if (ui(t[e])) return !0; return t }(t); return !0 === e ? e : e.map((t => oi(t))) } function li(t) { let e = !1; const r = []; if ("case" === t[0]) { for (let n = 1; n < t.length - 1; n += 2) e = e || ui(t[n]), r.push(t[n + 1]); r.push(t[t.length - 1]); } else if ("match" === t[0]) { e = e || ui(t[1]); for (let e = 2; e < t.length - 1; e += 2) r.push(t[e + 1]); r.push(t[t.length - 1]); } else if ("step" === t[0]) { e = e || ui(t[1]); for (let e = 1; e < t.length - 1; e += 2) r.push(t[e + 1]); } e && (t.length = 0, t.push("any", ...r)); for (let e = 1; e < t.length; e++) li(t[e]); } function ui(t) { if (!Array.isArray(t)) return !1; if ("pitch" === (e = t[0]) || "distance-from-center" === e) return !0; var e; for (let e = 1; e < t.length; e++) if (ui(t[e])) return !0; return !1 } const ci = new Set(["in", "==", "!=", ">", ">=", "<", "<=", "to-boolean"]); function hi(t, e) { return t < e ? -1 : t > e ? 1 : 0 } function pi(t) { if (!Array.isArray(t)) return !1; if ("within" === t[0]) return !0; for (let e = 1; e < t.length; e++) if (pi(t[e])) return !0; return !1 } function fi(t) { if (!t) return !0; const e = t[0]; return t.length <= 1 ? "any" !== e : "==" === e ? di(t[1], t[2], "==") : "!=" === e ? gi(di(t[1], t[2], "==")) : "<" === e || ">" === e || "<=" === e || ">=" === e ? di(t[1], t[2], e) : "any" === e ? (r = t.slice(1), ["any"].concat(r.map(fi))) : "all" === e ? ["all"].concat(t.slice(1).map(fi)) : "none" === e ? ["all"].concat(t.slice(1).map(fi).map(gi)) : "in" === e ? yi(t[1], t.slice(2)) : "!in" === e ? gi(yi(t[1], t.slice(2))) : "has" === e ? mi(t[1]) : "!has" === e ? gi(mi(t[1])) : "within" !== e || t; var r; } function di(t, e, r) { switch (t) { case "$type": return [`filter-type-${r}`, e]; case "$id": return [`filter-id-${r}`, e]; default: return [`filter-${r}`, t, e] } } function yi(t, e) { if (0 === e.length) return !1; switch (t) { case "$type": return ["filter-type-in", ["literal", e]]; case "$id": return ["filter-id-in", ["literal", e]]; default: return e.length > 200 && !e.some((t => typeof t != typeof e[0])) ? ["filter-in-large", t, ["literal", e.sort(hi)]] : ["filter-in-small", t, ["literal", e]] } } function mi(t) { switch (t) { case "$type": return !0; case "$id": return ["filter-has-id"]; default: return ["filter-has", t] } } function gi(t) { return ["!", t] } function xi(t) { return si(Qt(t.value)) ? ri(Wt({}, t, { expressionContext: "filter", valueSpec: t.styleSpec[`filter_${t.layerType||"fill"}`] })) : vi(t) } function vi(t) { const e = t.value, r = t.key; if ("array" !== Dn(e)) return [new Wn(r, e, `array expected, ${Dn(e)} found`)]; const n = t.styleSpec; let i, s = []; if (e.length < 1) return [new Wn(r, e, "filter array must have at least 1 element")]; switch (s = s.concat(ii({ key: `${r}[0]`, value: e[0], valueSpec: n.filter_operator, style: t.style, styleSpec: t.styleSpec })), Jt(e[0])) { case "<": case "<=": case ">": case ">=": e.length >= 2 && "$type" === Jt(e[1]) && s.push(new Wn(r, e, `"$type" cannot be use with operator "${e[0]}"`)); case "==": case "!=": 3 !== e.length && s.push(new Wn(r, e, `filter array for operator "${e[0]}" must have 3 elements`)); case "in": case "!in": e.length >= 2 && (i = Dn(e[1]), "string" !== i && s.push(new Wn(`${r}[1]`, e[1], `string expected, ${i} found`))); for (let a = 2; a < e.length; a++) i = Dn(e[a]), "$type" === Jt(e[1]) ? s = s.concat(ii({ key: `${r}[${a}]`, value: e[a], valueSpec: n.geometry_type, style: t.style, styleSpec: t.styleSpec })) : "string" !== i && "number" !== i && "boolean" !== i && s.push(new Wn(`${r}[${a}]`, e[a], `string, number, or boolean expected, ${i} found`)); break; case "any": case "all": case "none": for (let n = 1; n < e.length; n++) s = s.concat(vi({ key: `${r}[${n}]`, value: e[n], style: t.style, styleSpec: t.styleSpec })); break; case "has": case "!has": i = Dn(e[1]), 2 !== e.length ? s.push(new Wn(r, e, `filter array for "${e[0]}" operator must have 2 elements`)) : "string" !== i && s.push(new Wn(`${r}[1]`, e[1], `string expected, ${i} found`)); break; case "within": i = Dn(e[1]), 2 !== e.length ? s.push(new Wn(r, e, `filter array for "${e[0]}" operator must have 2 elements`)) : "object" !== i && s.push(new Wn(`${r}[1]`, e[1], `object expected, ${i} found`)); } return s } function bi(t, e) { const r = t.key, n = t.style, i = t.styleSpec, s = t.value, a = t.objectKey, o = i[`${e}_${t.layerType}`]; if (!o) return []; const l = a.match(/^(.*)-transition$/); if ("paint" === e && l && o[l[1]] && o[l[1]].transition) return Ci({ key: r, value: s, valueSpec: i.transition, style: n, styleSpec: i }); const u = t.valueSpec || o[a]; if (!u) return [new Wn(r, s, `unknown property "${a}"`)]; let c; if ("string" === Dn(s) && En(u) && !u.tokens && (c = /^{([^}]+)}$/.exec(s))) { const t = `\`{ "type": "identity", "property": ${c?JSON.stringify(c[1]):'"_"'} }\``; return [new Wn(r, s, `"${a}" does not support interpolation syntax\nUse an identity property function instead: ${t}.`)] } const h = []; return "symbol" === t.layerType && ("text-field" === a && n && !n.glyphs && h.push(new Wn(r, s, 'use of "text-field" requires a style "glyphs" property')), "text-font" === a && Vn(Qt(s)) && "identity" === Jt(s.type) && h.push(new Wn(r, s, '"text-font" does not support identity functions'))), h.concat(Ci({ key: t.key, value: s, valueSpec: u, style: n, styleSpec: i, expressionContext: "property", propertyType: e, propertyKey: a })) } function wi(t) { return bi(t, "paint") } function _i(t) { return bi(t, "layout") } function Ai(t) { let e = []; const r = t.value, n = t.key, i = t.style, s = t.styleSpec; r.type || r.ref || e.push(new Wn(n, r, 'either "type" or "ref" is required')); let a = Jt(r.type); const o = Jt(r.ref); if (r.id) { const s = Jt(r.id); for (let a = 0; a < t.arrayIndex; a++) { const t = i.layers[a]; Jt(t.id) === s && e.push(new Wn(n, r.id, `duplicate layer id "${r.id}", previously used at line ${t.id.__line__}`)); } } if ("ref" in r) { let t; ["type", "source", "source-layer", "filter", "layout"].forEach((t => { t in r && e.push(new Wn(n, r[t], `"${t}" is prohibited for ref layers`)); })), i.layers.forEach((e => { Jt(e.id) === o && (t = e); })), t ? t.ref ? e.push(new Wn(n, r.ref, "ref cannot reference another ref layer")) : a = Jt(t.type) : "string" == typeof o && e.push(new Wn(n, r.ref, `ref layer "${o}" not found`)); } else if ("background" !== a && "sky" !== a) if (r.source) { const t = i.sources && i.sources[r.source], s = t && Jt(t.type); t ? "vector" === s && "raster" === a ? e.push(new Wn(n, r.source, `layer "${r.id}" requires a raster source`)) : "raster" === s && "raster" !== a ? e.push(new Wn(n, r.source, `layer "${r.id}" requires a vector source`)) : "vector" !== s || r["source-layer"] ? "raster-dem" === s && "hillshade" !== a ? e.push(new Wn(n, r.source, "raster-dem source can only be used with layer type 'hillshade'.")) : "line" !== a || !r.paint || !r.paint["line-gradient"] && !r.paint["line-trim-offset"] || "geojson" === s && t.lineMetrics || e.push(new Wn(n, r, `layer "${r.id}" specifies a line-gradient, which requires a GeoJSON source with \`lineMetrics\` enabled.`)) : e.push(new Wn(n, r, `layer "${r.id}" must specify a "source-layer"`)) : e.push(new Wn(n, r.source, `source "${r.source}" not found`)); } else e.push(new Wn(n, r, 'missing required property "source"')); return e = e.concat(Jn({ key: n, value: r, valueSpec: s.layer, style: t.style, styleSpec: t.styleSpec, objectElementValidators: { "*": () => [], type: () => Ci({ key: `${n}.type`, value: r.type, valueSpec: s.layer.type, style: t.style, styleSpec: t.styleSpec, object: r, objectKey: "type" }), filter: t => xi(Wt({ layerType: a }, t)), layout: t => Jn({ layer: r, key: t.key, value: t.value, valueSpec: {}, style: t.style, styleSpec: t.styleSpec, objectElementValidators: { "*": t => _i(Wt({ layerType: a }, t)) } }), paint: t => Jn({ layer: r, key: t.key, value: t.value, valueSpec: {}, style: t.style, styleSpec: t.styleSpec, objectElementValidators: { "*": t => wi(Wt({ layerType: a }, t)) } }) } })), e } function Si(t) { const e = t.value, r = t.key, n = Dn(e); return "string" !== n ? [new Wn(r, e, `string expected, ${n} found`)] : [] } const ki = { promoteId: function({ key: t, value: e }) { if ("string" === Dn(e)) return Si({ key: t, value: e }); { const r = []; for (const n in e) r.push(...Si({ key: `${t}.${n}`, value: e[n] })); return r } } }; function Ii(t) { const e = t.value, r = t.key, n = t.styleSpec, i = t.style; if (!e.type) return [new Wn(r, e, '"type" is required')]; const s = Jt(e.type); let a; switch (s) { case "vector": case "raster": case "raster-dem": return a = Jn({ key: r, value: e, valueSpec: n[`source_${s.replace("-","_")}`], style: t.style, styleSpec: n, objectElementValidators: ki }), a; case "geojson": if (a = Jn({ key: r, value: e, valueSpec: n.source_geojson, style: i, styleSpec: n, objectElementValidators: ki }), e.cluster) for (const t in e.clusterProperties) { const [n, i] = e.clusterProperties[t], s = "string" == typeof n ? [n, ["accumulated"], ["get", t] ] : n; a.push(...ri({ key: `${r}.${t}.map`, value: i, expressionContext: "cluster-map" })), a.push(...ri({ key: `${r}.${t}.reduce`, value: s, expressionContext: "cluster-reduce" })); } return a; case "video": return Jn({ key: r, value: e, valueSpec: n.source_video, style: i, styleSpec: n }); case "image": return Jn({ key: r, value: e, valueSpec: n.source_image, style: i, styleSpec: n }); case "canvas": return [new Wn(r, null, "Please use runtime APIs to add canvas sources, rather than including them in stylesheets.", "source.canvas")]; default: return ii({ key: `${r}.type`, value: e.type, valueSpec: { values: Mi(n) }, style: i, styleSpec: n }) } } function Mi(t) { return t.source.reduce(((e, r) => { const n = t[r]; return "enum" === n.type.type && (e = e.concat(Object.keys(n.type.values))), e }), []) } function Ti(t) { const e = t.value, r = t.styleSpec, n = r.light, i = t.style; let s = []; const a = Dn(e); if (void 0 === e) return s; if ("object" !== a) return s = s.concat([new Wn("light", e, `object expected, ${a} found`)]), s; for (const t in e) { const a = t.match(/^(.*)-transition$/); s = s.concat(a && n[a[1]] && n[a[1]].transition ? Ci({ key: t, value: e[t], valueSpec: r.transition, style: i, styleSpec: r }) : n[t] ? Ci({ key: t, value: e[t], valueSpec: n[t], style: i, styleSpec: r }) : [new Wn(t, e[t], `unknown property "${t}"`)]); } return s } function zi(t) { const e = t.value, r = t.key, n = t.style, i = t.styleSpec, s = i.terrain; let a = []; const o = Dn(e); if (void 0 === e) return a; if ("object" !== o) return a = a.concat([new Wn("terrain", e, `object expected, ${o} found`)]), a; for (const t in e) { const r = t.match(/^(.*)-transition$/); a = a.concat(r && s[r[1]] && s[r[1]].transition ? Ci({ key: t, value: e[t], valueSpec: i.transition, style: n, styleSpec: i }) : s[t] ? Ci({ key: t, value: e[t], valueSpec: s[t], style: n, styleSpec: i }) : [new Wn(t, e[t], `unknown property "${t}"`)]); } if (e.source) { const t = n.sources && n.sources[e.source], i = t && Jt(t.type); t ? "raster-dem" !== i && a.push(new Wn(r, e.source, `terrain cannot be used with a source of type ${String(i)}, it only be used with a "raster-dem" source type`)) : a.push(new Wn(r, e.source, `source "${e.source}" not found`)); } else a.push(new Wn(r, e, 'terrain is missing required property "source"')); return a } function Bi(t) { const e = t.value, r = t.style, n = t.styleSpec, i = n.fog; let s = []; const a = Dn(e); if (void 0 === e) return s; if ("object" !== a) return s = s.concat([new Wn("fog", e, `object expected, ${a} found`)]), s; for (const t in e) { const a = t.match(/^(.*)-transition$/); s = s.concat(a && i[a[1]] && i[a[1]].transition ? Ci({ key: t, value: e[t], valueSpec: n.transition, style: r, styleSpec: n }) : i[t] ? Ci({ key: t, value: e[t], valueSpec: i[t], style: r, styleSpec: n }) : [new Wn(t, e[t], `unknown property "${t}"`)]); } return s } const Ei = { "*": () => [], array: Qn, boolean: function(t) { const e = t.value, r = t.key, n = Dn(e); return "boolean" !== n ? [new Wn(r, e, `boolean expected, ${n} found`)] : [] }, number: ti, color: function(t) { const e = t.key, r = t.value, n = Dn(r); return "string" !== n ? [new Wn(e, r, `color expected, ${n} found`)] : null === be(r) ? [new Wn(e, r, `color expected, "${r}" found`)] : [] }, enum: ii, filter: xi, function: ei, layer: Ai, object: Jn, source: Ii, light: Ti, terrain: zi, fog: Bi, string: Si, formatted: function(t) { return 0 === Si(t).length ? [] : ri(t) }, resolvedImage: function(t) { return 0 === Si(t).length ? [] : ri(t) }, projection: function(t) { const e = t.value, r = t.styleSpec, n = r.projection, i = t.style; let s = []; const a = Dn(e); if ("object" === a) for (const t in e) s = s.concat(Ci({ key: t, value: e[t], valueSpec: n[t], style: i, styleSpec: r })); else "string" !== a && (s = s.concat([new Wn("projection", e, `object or string expected, ${a} found`)])); return s } }; function Ci(t) { const e = t.value, r = t.valueSpec, n = t.styleSpec; return r.expression && Vn(Jt(e)) ? ei(t) : r.expression && Nn(Qt(e)) ? ri(t) : r.type && Ei[r.type] ? Ei[r.type](t) : Jn(Wt({}, t, { valueSpec: r.type ? n[r.type] : r })) } function Pi(t) { const e = t.value, r = t.key, n = Si(t); return n.length || (-1 === e.indexOf("{fontstack}") && n.push(new Wn(r, e, '"glyphs" url must include a "{fontstack}" token')), -1 === e.indexOf("{range}") && n.push(new Wn(r, e, '"glyphs" url must include a "{range}" token'))), n } function Di(t, e = Ht) { return Fi(Ci({ key: "", value: t, valueSpec: e.$root, styleSpec: e, style: t, objectElementValidators: { glyphs: Pi, "*": () => [] } })) } const Vi = t => Fi(wi(t)), Li = t => Fi(_i(t)); function Fi(t) { return t.slice().sort(((t, e) => t.line && e.line ? t.line - e.line : 0)) } function Ri(t, e) { let r = !1; if (e && e.length) for (const n of e) t.fire(new Kt(new Error(n.message))), r = !0; return r } var ji = $i; function $i(t, e, r) { var n = this.cells = []; if (t instanceof ArrayBuffer) { this.arrayBuffer = t; var i = new Int32Array(this.arrayBuffer); t = i[0], this.d = (e = i[1]) + 2 * (r = i[2]); for (var s = 0; s < this.d * this.d; s++) { var a = i[3 + s], o = i[3 + s + 1]; n.push(a === o ? null : i.subarray(a, o)); } var l = i[3 + n.length + 1]; this.keys = i.subarray(i[3 + n.length], l), this.bboxes = i.subarray(l), this.insert = this._insertReadonly; } else { this.d = e + 2 * r; for (var u = 0; u < this.d * this.d; u++) n.push([]); this.keys = [], this.bboxes = []; } this.n = e, this.extent = t, this.padding = r, this.scale = e / t, this.uid = 0; var c = r / e * t; this.min = -c, this.max = t + c; } $i.prototype.insert = function(t, e, r, n, i) { this._forEachCell(e, r, n, i, this._insertCell, this.uid++), this.keys.push(t), this.bboxes.push(e), this.bboxes.push(r), this.bboxes.push(n), this.bboxes.push(i); }, $i.prototype._insertReadonly = function() { throw "Cannot insert into a GridIndex created from an ArrayBuffer." }, $i.prototype._insertCell = function(t, e, r, n, i, s) { this.cells[i].push(s); }, $i.prototype.query = function(t, e, r, n, i) { var s = this.min, a = this.max; if (t <= s && e <= s && a <= r && a <= n && !i) return Array.prototype.slice.call(this.keys); var o = []; return this._forEachCell(t, e, r, n, this._queryCell, o, {}, i), o }, $i.prototype._queryCell = function(t, e, r, n, i, s, a, o) { var l = this.cells[i]; if (null !== l) for (var u = this.keys, c = this.bboxes, h = 0; h < l.length; h++) { var p = l[h]; if (void 0 === a[p]) { var f = 4 * p; (o ? o(c[f + 0], c[f + 1], c[f + 2], c[f + 3]) : t <= c[f + 2] && e <= c[f + 3] && r >= c[f + 0] && n >= c[f + 1]) ? (a[p] = !0, s.push(u[p])) : a[p] = !1; } } }, $i.prototype._forEachCell = function(t, e, r, n, i, s, a, o) { for (var l = this._convertToCellCoord(t), u = this._convertToCellCoord(e), c = this._convertToCellCoord(r), h = this._convertToCellCoord(n), p = l; p <= c; p++) for (var f = u; f <= h; f++) { var d = this.d * f + p; if ((!o || o(this._convertFromCellCoord(p), this._convertFromCellCoord(f), this._convertFromCellCoord(p + 1), this._convertFromCellCoord(f + 1))) && i.call(this, t, e, r, n, d, s, a, o)) return } }, $i.prototype._convertFromCellCoord = function(t) { return (t - this.padding) / this.scale }, $i.prototype._convertToCellCoord = function(t) { return Math.max(0, Math.min(this.d - 1, Math.floor(t * this.scale) + this.padding)) }, $i.prototype.toArrayBuffer = function() { if (this.arrayBuffer) return this.arrayBuffer; for (var t = this.cells, e = 3 + this.cells.length + 1 + 1, r = 0, n = 0; n < this.cells.length; n++) r += this.cells[n].length; var i = new Int32Array(e + r + this.keys.length + this.bboxes.length); i[0] = this.extent, i[1] = this.n, i[2] = this.padding; for (var s = e, a = 0; a < t.length; a++) { var o = t[a]; i[3 + a] = s, i.set(o, s), s += o.length; } return i[3 + t.length] = s, i.set(this.keys, s), i[3 + t.length + 1] = s += this.keys.length, i.set(this.bboxes, s), s += this.bboxes.length, i.buffer }; const Ui = {}; function Oi(t, e, r = {}) { Object.defineProperty(t, "_classRegistryKey", { value: e, writeable: !1 }), Ui[e] = { klass: t, omit: r.omit || [] }; } Oi(Object, "Object"), ji.serialize = function(t, e) { const r = t.toArrayBuffer(); return e && e.push(r), { buffer: r } }, ji.deserialize = function(t) { return new ji(t.buffer) }, Object.defineProperty(ji, "name", { value: "Grid" }), Oi(ji, "Grid"), Oi(Me, "Color"), Oi(Error, "Error"), Oi(at, "AJAXError"), Oi(Ee, "ResolvedImage"), Oi(Yn, "StylePropertyFunction"), Oi(qn, "StyleExpression", { omit: ["_evaluator"] }), Oi(Xn, "ZoomDependentExpression"), Oi(Zn, "ZoomConstantExpression"), Oi(He, "CompoundExpression", { omit: ["_evaluate"] }); for (const t in Tn) Ui[Tn[t]._classRegistryKey] || Oi(Tn[t], `Expression${t}`); function qi(t) { return t && "undefined" != typeof ArrayBuffer && (t instanceof ArrayBuffer || t.constructor && "ArrayBuffer" === t.constructor.name) } function Ni(t) { return e.ImageBitmap && t instanceof e.ImageBitmap } function Gi(t, r) { if (null == t || "boolean" == typeof t || "number" == typeof t || "string" == typeof t || t instanceof Boolean || t instanceof Number || t instanceof String || t instanceof Date || t instanceof RegExp) return t; if (qi(t) || Ni(t)) return r && r.push(t), t; if (ArrayBuffer.isView(t)) { const e = t; return r && r.push(e.buffer), e } if (t instanceof e.ImageData) return r && r.push(t.data.buffer), t; if (Array.isArray(t)) { const e = []; for (const n of t) e.push(Gi(n, r)); return e } if ("object" == typeof t) { const e = t.constructor, n = e._classRegistryKey; if (!n) throw new Error(`can't serialize object of unregistered class ${n}`); const i = e.serialize ? e.serialize(t, r) : {}; if (!e.serialize) { for (const e in t) t.hasOwnProperty(e) && (Ui[n].omit.indexOf(e) >= 0 || (i[e] = Gi(t[e], r))); t instanceof Error && (i.message = t.message); } if (i.$name) throw new Error("$name property is reserved for worker serialization logic."); return "Object" !== n && (i.$name = n), i } throw new Error("can't serialize object of type " + typeof t) } function Zi(t) { if (null == t || "boolean" == typeof t || "number" == typeof t || "string" == typeof t || t instanceof Boolean || t instanceof Number || t instanceof String || t instanceof Date || t instanceof RegExp || qi(t) || Ni(t) || ArrayBuffer.isView(t) || t instanceof e.ImageData) return t; if (Array.isArray(t)) return t.map(Zi); if ("object" == typeof t) { const e = t.$name || "Object", { klass: r } = Ui[e]; if (!r) throw new Error(`can't deserialize unregistered class ${e}`); if (r.deserialize) return r.deserialize(t); const n = Object.create(r.prototype); for (const e of Object.keys(t)) "$name" !== e && (n[e] = Zi(t[e])); return n } throw new Error("can't deserialize object of type " + typeof t) } const Xi = t => t >= 1536 && t <= 1791, Ki = t => t >= 1872 && t <= 1919, Yi = t => t >= 2208 && t <= 2303, Hi = t => t >= 11904 && t <= 12031, Wi = t => t >= 12032 && t <= 12255, Ji = t => t >= 12272 && t <= 12287, Qi = t => t >= 12288 && t <= 12351, ts = t => t >= 12352 && t <= 12447, es = t => t >= 12448 && t <= 12543, rs = t => t >= 12544 && t <= 12591, ns = t => t >= 12704 && t <= 12735, is = t => t >= 12736 && t <= 12783, ss = t => t >= 12784 && t <= 12799, as = t => t >= 12800 && t <= 13055, os = t => t >= 13056 && t <= 13311, ls = t => t >= 13312 && t <= 19903, us = t => t >= 19968 && t <= 40959, cs = t => t >= 40960 && t <= 42127, hs = t => t >= 42128 && t <= 42191, ps = t => t >= 44032 && t <= 55215, fs = t => t >= 63744 && t <= 64255, ds = t => t >= 64336 && t <= 65023, ys = t => t >= 65040 && t <= 65055, ms = t => t >= 65072 && t <= 65103, gs = t => t >= 65104 && t <= 65135, xs = t => t >= 65136 && t <= 65279, vs = t => t >= 65280 && t <= 65519; function bs(t) { for (const e of t) if (As(e.charCodeAt(0))) return !0; return !1 } function ws(t) { for (const e of t) if (!_s(e.charCodeAt(0))) return !1; return !0 } function _s(t) { return !(Xi(t) || Ki(t) || Yi(t) || ds(t) || xs(t)) } function As(t) { return !(746 !== t && 747 !== t && (t < 4352 || !(ns(t) || rs(t) || ms(t) && !(t >= 65097 && t <= 65103) || fs(t) || os(t) || Hi(t) || is(t) || !(!Qi(t) || t >= 12296 && t <= 12305 || t >= 12308 && t <= 12319 || 12336 === t) || ls(t) || us(t) || as(t) || (t => t >= 12592 && t <= 12687)(t) || (t => t >= 43360 && t <= 43391)(t) || (t => t >= 55216 && t <= 55295)(t) || (t => t >= 4352 && t <= 4607)(t) || ps(t) || ts(t) || Ji(t) || (t => t >= 12688 && t <= 12703)(t) || Wi(t) || ss(t) || es(t) && 12540 !== t || !(!vs(t) || 65288 === t || 65289 === t || 65293 === t || t >= 65306 && t <= 65310 || 65339 === t || 65341 === t || 65343 === t || t >= 65371 && t <= 65503 || 65507 === t || t >= 65512 && t <= 65519) || !(!gs(t) || t >= 65112 && t <= 65118 || t >= 65123 && t <= 65126) || (t => t >= 5120 && t <= 5759)(t) || (t => t >= 6320 && t <= 6399)(t) || ys(t) || (t => t >= 19904 && t <= 19967)(t) || cs(t) || hs(t)))) } function Ss(t) { return !(As(t) || function(t) { return !!((t => t >= 128 && t <= 255)(t) && (167 === t || 169 === t || 174 === t || 177 === t || 188 === t || 189 === t || 190 === t || 215 === t || 247 === t) || (t => t >= 8192 && t <= 8303)(t) && (8214 === t || 8224 === t || 8225 === t || 8240 === t || 8241 === t || 8251 === t || 8252 === t || 8258 === t || 8263 === t || 8264 === t || 8265 === t || 8273 === t) || (t => t >= 8448 && t <= 8527)(t) || (t => t >= 8528 && t <= 8591)(t) || (t => t >= 8960 && t <= 9215)(t) && (t >= 8960 && t <= 8967 || t >= 8972 && t <= 8991 || t >= 8996 && t <= 9e3 || 9003 === t || t >= 9085 && t <= 9114 || t >= 9150 && t <= 9165 || 9167 === t || t >= 9169 && t <= 9179 || t >= 9186 && t <= 9215) || (t => t >= 9216 && t <= 9279)(t) && 9251 !== t || (t => t >= 9280 && t <= 9311)(t) || (t => t >= 9312 && t <= 9471)(t) || (t => t >= 9632 && t <= 9727)(t) || (t => t >= 9728 && t <= 9983)(t) && !(t >= 9754 && t <= 9759) || (t => t >= 11008 && t <= 11263)(t) && (t >= 11026 && t <= 11055 || t >= 11088 && t <= 11097 || t >= 11192 && t <= 11243) || Qi(t) || es(t) || (t => t >= 57344 && t <= 63743)(t) || ms(t) || gs(t) || vs(t) || 8734 === t || 8756 === t || 8757 === t || t >= 9984 && t <= 10087 || t >= 10102 && t <= 10131 || 65532 === t || 65533 === t) }(t)) } function ks(t) { return t >= 1424 && t <= 2303 || ds(t) || xs(t) } function Is(t, e) { return !(!e && ks(t) || t >= 2304 && t <= 3583 || t >= 3840 && t <= 4255 || (t => t >= 6016 && t <= 6143)(t)) } function Ms(t) { for (const e of t) if (ks(e.charCodeAt(0))) return !0; return !1 } const Ts = "deferred", zs = "loading", Bs = "loaded"; let Es = null, Cs = "unavailable", Ps = null; const Ds = function(t) { t && "string" == typeof t && t.indexOf("NetworkError") > -1 && (Cs = "error"), Es && Es(t); }; function Vs() { Ls.fire(new Xt("pluginStateChange", { pluginStatus: Cs, pluginURL: Ps })); } const Ls = new Yt, Fs = function() { return Cs }, Rs = function() { if (Cs !== Ts || !Ps) throw new Error("rtl-text-plugin cannot be downloaded unless a pluginURL is specified"); Cs = zs, Vs(), Ps && ut({ url: Ps }, (t => { t ? Ds(t) : (Cs = Bs, Vs()); })); }, js = { applyArabicShaping: null, processBidirectionalText: null, processStyledBidirectionalText: null, isLoaded: () => Cs === Bs || null != js.applyArabicShaping, isLoading: () => Cs === zs, setState(t) { Cs = t.pluginStatus, Ps = t.pluginURL; }, isParsed: () => null != js.applyArabicShaping && null != js.processBidirectionalText && null != js.processStyledBidirectionalText, getPluginURL: () => Ps }; class $s { constructor(t, e) { this.zoom = t, e ? (this.now = e.now, this.fadeDuration = e.fadeDuration, this.transition = e.transition, this.pitch = e.pitch) : (this.now = 0, this.fadeDuration = 0, this.transition = {}, this.pitch = 0); } isSupportedScript(t) { return function(t, e) { for (const r of t) if (!Is(r.charCodeAt(0), e)) return !1; return !0 }(t, js.isLoaded()) } } class Us { constructor(t, e) { this.property = t, this.value = e, this.expression = function(t, e) { if (Vn(t)) return new Yn(t, e); if (Nn(t)) { const r = Kn(t, e); if ("error" === r.result) throw new Error(r.value.map((t => `${t.key}: ${t.message}`)).join(", ")); return r.value } { let r = t; return "string" == typeof t && "color" === e.type && (r = Me.parse(t)), { kind: "constant", evaluate: () => r } } }(void 0 === e ? t.specification.default : e, t.specification); } isDataDriven() { return "source" === this.expression.kind || "composite" === this.expression.kind } possiblyEvaluate(t, e, r) { return this.property.possiblyEvaluate(this, t, e, r) } } class Os { constructor(t) { this.property = t, this.value = new Us(t, void 0); } transitioned(t, e) { return new Ns(this.property, this.value, e, z({}, t.transition, this.transition), t.now) } untransitioned() { return new Ns(this.property, this.value, null, {}, 0) } } class qs { constructor(t) { this._properties = t, this._values = Object.create(t.defaultTransitionablePropertyValues); } getValue(t) { return j(this._values[t].value.value) } setValue(t, e) { this._values.hasOwnProperty(t) || (this._values[t] = new Os(this._values[t].property)), this._values[t].value = new Us(this._values[t].property, null === e ? void 0 : j(e)); } getTransition(t) { return j(this._values[t].transition) } setTransition(t, e) { this._values.hasOwnProperty(t) || (this._values[t] = new Os(this._values[t].property)), this._values[t].transition = j(e) || void 0; } serialize() { const t = {}; for (const e of Object.keys(this._values)) { const r = this.getValue(e); void 0 !== r && (t[e] = r); const n = this.getTransition(e); void 0 !== n && (t[`${e}-transition`] = n); } return t } transitioned(t, e) { const r = new Gs(this._properties); for (const n of Object.keys(this._values)) r._values[n] = this._values[n].transitioned(t, e._values[n]); return r } untransitioned() { const t = new Gs(this._properties); for (const e of Object.keys(this._values)) t._values[e] = this._values[e].untransitioned(); return t } } class Ns { constructor(t, e, r, n, i) { const s = n.delay || 0, a = n.duration || 0; i = i || 0, this.property = t, this.value = e, this.begin = i + s, this.end = this.begin + a, t.specification.transition && (n.delay || n.duration) && (this.prior = r); } possiblyEvaluate(t, e, r) { const n = t.now || 0, i = this.value.possiblyEvaluate(t, e, r), s = this.prior; if (s) { if (n > this.end) return this.prior = null, i; if (this.value.isDataDriven()) return this.prior = null, i; if (n < this.begin) return s.possiblyEvaluate(t, e, r); { const a = (n - this.begin) / (this.end - this.begin); return this.property.interpolate(s.possiblyEvaluate(t, e, r), i, w(a)) } } return i } } class Gs { constructor(t) { this._properties = t, this._values = Object.create(t.defaultTransitioningPropertyValues); } possiblyEvaluate(t, e, r) { const n = new Ks(this._properties); for (const i of Object.keys(this._values)) n._values[i] = this._values[i].possiblyEvaluate(t, e, r); return n } hasTransition() { for (const t of Object.keys(this._values)) if (this._values[t].prior) return !0; return !1 } } class Zs { constructor(t) { this._properties = t, this._values = Object.create(t.defaultPropertyValues); } getValue(t) { return j(this._values[t].value) } setValue(t, e) { this._values[t] = new Us(this._values[t].property, null === e ? void 0 : j(e)); } serialize() { const t = {}; for (const e of Object.keys(this._values)) { const r = this.getValue(e); void 0 !== r && (t[e] = r); } return t } possiblyEvaluate(t, e, r) { const n = new Ks(this._properties); for (const i of Object.keys(this._values)) n._values[i] = this._values[i].possiblyEvaluate(t, e, r); return n } } class Xs { constructor(t, e, r) { this.property = t, this.value = e, this.parameters = r; } isConstant() { return "constant" === this.value.kind } constantOr(t) { return "constant" === this.value.kind ? this.value.value : t } evaluate(t, e, r, n) { return this.property.evaluate(this.value, this.parameters, t, e, r, n) } } class Ks { constructor(t) { this._properties = t, this._values = Object.create(t.defaultPossiblyEvaluatedValues); } get(t) { return this._values[t] } } class Ys { constructor(t) { this.specification = t; } possiblyEvaluate(t, e) { return t.expression.evaluate(e) } interpolate(t, e, r) { const n = Tr[this.specification.type]; return n ? n(t, e, r) : t } } class Hs { constructor(t, e) { this.specification = t, this.overrides = e; } possiblyEvaluate(t, e, r, n) { return new Xs(this, "constant" === t.expression.kind || "camera" === t.expression.kind ? { kind: "constant", value: t.expression.evaluate(e, null, {}, r, n) } : t.expression, e) } interpolate(t, e, r) { if ("constant" !== t.value.kind || "constant" !== e.value.kind) return t; if (void 0 === t.value.value || void 0 === e.value.value) return new Xs(this, { kind: "constant", value: void 0 }, t.parameters); const n = Tr[this.specification.type]; return n ? new Xs(this, { kind: "constant", value: n(t.value.value, e.value.value, r) }, t.parameters) : t } evaluate(t, e, r, n, i, s) { return "constant" === t.kind ? t.value : t.evaluate(e, r, n, i, s) } } class Ws { constructor(t) { this.specification = t; } possiblyEvaluate(t, e, r, n) { return !!t.expression.evaluate(e, null, {}, r, n) } interpolate() { return !1 } } class Js { constructor(t) { this.properties = t, this.defaultPropertyValues = {}, this.defaultTransitionablePropertyValues = {}, this.defaultTransitioningPropertyValues = {}, this.defaultPossiblyEvaluatedValues = {}, this.overridableProperties = []; const e = new $s(0, {}); for (const r in t) { const n = t[r]; n.specification.overridable && this.overridableProperties.push(r); const i = this.defaultPropertyValues[r] = new Us(n, void 0), s = this.defaultTransitionablePropertyValues[r] = new Os(n); this.defaultTransitioningPropertyValues[r] = s.untransitioned(), this.defaultPossiblyEvaluatedValues[r] = i.possiblyEvaluate(e); } } } function Qs(t, e) { return 256 * (t = S(Math.floor(t), 0, 255)) + S(Math.floor(e), 0, 255) } Oi(Hs, "DataDrivenProperty"), Oi(Ys, "DataConstantProperty"), Oi(Ws, "ColorRampProperty"); const ta = { Int8: Int8Array, Uint8: Uint8Array, Int16: Int16Array, Uint16: Uint16Array, Int32: Int32Array, Uint32: Uint32Array, Float32: Float32Array }; class ea { constructor(t, e) { this._structArray = t, this._pos1 = e * this.size, this._pos2 = this._pos1 / 2, this._pos4 = this._pos1 / 4, this._pos8 = this._pos1 / 8; } } class ra { constructor() { this.isTransferred = !1, this.capacity = -1, this.resize(0); } static serialize(t, e) { return t._trim(), e && (t.isTransferred = !0, e.push(t.arrayBuffer)), { length: t.length, arrayBuffer: t.arrayBuffer } } static deserialize(t) { const e = Object.create(this.prototype); return e.arrayBuffer = t.arrayBuffer, e.length = t.length, e.capacity = t.arrayBuffer.byteLength / e.bytesPerElement, e._refreshViews(), e } _trim() { this.length !== this.capacity && (this.capacity = this.length, this.arrayBuffer = this.arrayBuffer.slice(0, this.length * this.bytesPerElement), this._refreshViews()); } clear() { this.length = 0; } resize(t) { this.reserve(t), this.length = t; } reserve(t) { if (t > this.capacity) { this.capacity = Math.max(t, Math.floor(5 * this.capacity), 128), this.arrayBuffer = new ArrayBuffer(this.capacity * this.bytesPerElement); const e = this.uint8; this._refreshViews(), e && this.uint8.set(e); } } _refreshViews() { throw new Error("_refreshViews() must be implemented by each concrete StructArray layout") } destroy() { this.int8 = this.uint8 = this.int16 = this.uint16 = this.int32 = this.uint32 = this.float32 = null, this.arrayBuffer = null; } } function na(t, e = 1) { let r = 0, n = 0; return { members: t.map((t => { const i = ta[t.type].BYTES_PER_ELEMENT, s = r = ia(r, Math.max(e, i)), a = t.components || 1; return n = Math.max(n, i), r += i * a, { name: t.name, type: t.type, components: a, offset: s } })), size: ia(r, Math.max(n, e)), alignment: e } } function ia(t, e) { return Math.ceil(t / e) * e } class sa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer); } emplaceBack(t, e) { const r = this.length; return this.resize(r + 1), this.emplace(r, t, e) } emplace(t, e, r) { const n = 2 * t; return this.int16[n + 0] = e, this.int16[n + 1] = r, t } } sa.prototype.bytesPerElement = 4, Oi(sa, "StructArrayLayout2i4"); class aa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer); } emplaceBack(t, e, r) { const n = this.length; return this.resize(n + 1), this.emplace(n, t, e, r) } emplace(t, e, r, n) { const i = 3 * t; return this.int16[i + 0] = e, this.int16[i + 1] = r, this.int16[i + 2] = n, t } } aa.prototype.bytesPerElement = 6, Oi(aa, "StructArrayLayout3i6"); class oa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer); } emplaceBack(t, e, r, n) { const i = this.length; return this.resize(i + 1), this.emplace(i, t, e, r, n) } emplace(t, e, r, n, i) { const s = 4 * t; return this.int16[s + 0] = e, this.int16[s + 1] = r, this.int16[s + 2] = n, this.int16[s + 3] = i, t } } oa.prototype.bytesPerElement = 8, Oi(oa, "StructArrayLayout4i8"); class la extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i, s, a) { const o = this.length; return this.resize(o + 1), this.emplace(o, t, e, r, n, i, s, a) } emplace(t, e, r, n, i, s, a, o) { const l = 6 * t, u = 12 * t, c = 3 * t; return this.int16[l + 0] = e, this.int16[l + 1] = r, this.uint8[u + 4] = n, this.uint8[u + 5] = i, this.uint8[u + 6] = s, this.uint8[u + 7] = a, this.float32[c + 2] = o, t } } la.prototype.bytesPerElement = 12, Oi(la, "StructArrayLayout2i4ub1f12"); class ua extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t, e, r, n) { const i = this.length; return this.resize(i + 1), this.emplace(i, t, e, r, n) } emplace(t, e, r, n, i) { const s = 4 * t; return this.float32[s + 0] = e, this.float32[s + 1] = r, this.float32[s + 2] = n, this.float32[s + 3] = i, t } } ua.prototype.bytesPerElement = 16, Oi(ua, "StructArrayLayout4f16"); class ca extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i) { const s = this.length; return this.resize(s + 1), this.emplace(s, t, e, r, n, i) } emplace(t, e, r, n, i, s) { const a = 6 * t, o = 3 * t; return this.uint16[a + 0] = e, this.uint16[a + 1] = r, this.uint16[a + 2] = n, this.uint16[a + 3] = i, this.float32[o + 2] = s, t } } ca.prototype.bytesPerElement = 12, Oi(ca, "StructArrayLayout4ui1f12"); class ha extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer); } emplaceBack(t, e, r, n) { const i = this.length; return this.resize(i + 1), this.emplace(i, t, e, r, n) } emplace(t, e, r, n, i) { const s = 4 * t; return this.uint16[s + 0] = e, this.uint16[s + 1] = r, this.uint16[s + 2] = n, this.uint16[s + 3] = i, t } } ha.prototype.bytesPerElement = 8, Oi(ha, "StructArrayLayout4ui8"); class pa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i, s) { const a = this.length; return this.resize(a + 1), this.emplace(a, t, e, r, n, i, s) } emplace(t, e, r, n, i, s, a) { const o = 6 * t; return this.int16[o + 0] = e, this.int16[o + 1] = r, this.int16[o + 2] = n, this.int16[o + 3] = i, this.int16[o + 4] = s, this.int16[o + 5] = a, t } } pa.prototype.bytesPerElement = 12, Oi(pa, "StructArrayLayout6i12"); class fa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i, s, a, o, l, u, c, h) { const p = this.length; return this.resize(p + 1), this.emplace(p, t, e, r, n, i, s, a, o, l, u, c, h) } emplace(t, e, r, n, i, s, a, o, l, u, c, h, p) { const f = 12 * t; return this.int16[f + 0] = e, this.int16[f + 1] = r, this.int16[f + 2] = n, this.int16[f + 3] = i, this.uint16[f + 4] = s, this.uint16[f + 5] = a, this.uint16[f + 6] = o, this.uint16[f + 7] = l, this.int16[f + 8] = u, this.int16[f + 9] = c, this.int16[f + 10] = h, this.int16[f + 11] = p, t } } fa.prototype.bytesPerElement = 24, Oi(fa, "StructArrayLayout4i4ui4i24"); class da extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i, s) { const a = this.length; return this.resize(a + 1), this.emplace(a, t, e, r, n, i, s) } emplace(t, e, r, n, i, s, a) { const o = 10 * t, l = 5 * t; return this.int16[o + 0] = e, this.int16[o + 1] = r, this.int16[o + 2] = n, this.float32[l + 2] = i, this.float32[l + 3] = s, this.float32[l + 4] = a, t } } da.prototype.bytesPerElement = 20, Oi(da, "StructArrayLayout3i3f20"); class ya extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer); } emplaceBack(t) { const e = this.length; return this.resize(e + 1), this.emplace(e, t) } emplace(t, e) { return this.uint32[1 * t + 0] = e, t } } ya.prototype.bytesPerElement = 4, Oi(ya, "StructArrayLayout1ul4"); class ma extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i, s, a, o, l, u, c, h, p) { const f = this.length; return this.resize(f + 1), this.emplace(f, t, e, r, n, i, s, a, o, l, u, c, h, p) } emplace(t, e, r, n, i, s, a, o, l, u, c, h, p, f) { const d = 20 * t, y = 10 * t; return this.int16[d + 0] = e, this.int16[d + 1] = r, this.int16[d + 2] = n, this.int16[d + 3] = i, this.int16[d + 4] = s, this.float32[y + 3] = a, this.float32[y + 4] = o, this.float32[y + 5] = l, this.float32[y + 6] = u, this.int16[d + 14] = c, this.uint32[y + 8] = h, this.uint16[d + 18] = p, this.uint16[d + 19] = f, t } } ma.prototype.bytesPerElement = 40, Oi(ma, "StructArrayLayout5i4f1i1ul2ui40"); class ga extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i, s, a) { const o = this.length; return this.resize(o + 1), this.emplace(o, t, e, r, n, i, s, a) } emplace(t, e, r, n, i, s, a, o) { const l = 8 * t; return this.int16[l + 0] = e, this.int16[l + 1] = r, this.int16[l + 2] = n, this.int16[l + 4] = i, this.int16[l + 5] = s, this.int16[l + 6] = a, this.int16[l + 7] = o, t } } ga.prototype.bytesPerElement = 16, Oi(ga, "StructArrayLayout3i2i2i16"); class xa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i) { const s = this.length; return this.resize(s + 1), this.emplace(s, t, e, r, n, i) } emplace(t, e, r, n, i, s) { const a = 4 * t, o = 8 * t; return this.float32[a + 0] = e, this.float32[a + 1] = r, this.float32[a + 2] = n, this.int16[o + 6] = i, this.int16[o + 7] = s, t } } xa.prototype.bytesPerElement = 16, Oi(xa, "StructArrayLayout2f1f2i16"); class va extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t, e, r, n) { const i = this.length; return this.resize(i + 1), this.emplace(i, t, e, r, n) } emplace(t, e, r, n, i) { const s = 12 * t, a = 3 * t; return this.uint8[s + 0] = e, this.uint8[s + 1] = r, this.float32[a + 1] = n, this.float32[a + 2] = i, t } } va.prototype.bytesPerElement = 12, Oi(va, "StructArrayLayout2ub2f12"); class ba extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t, e, r) { const n = this.length; return this.resize(n + 1), this.emplace(n, t, e, r) } emplace(t, e, r, n) { const i = 3 * t; return this.float32[i + 0] = e, this.float32[i + 1] = r, this.float32[i + 2] = n, t } } ba.prototype.bytesPerElement = 12, Oi(ba, "StructArrayLayout3f12"); class wa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer); } emplaceBack(t, e, r) { const n = this.length; return this.resize(n + 1), this.emplace(n, t, e, r) } emplace(t, e, r, n) { const i = 3 * t; return this.uint16[i + 0] = e, this.uint16[i + 1] = r, this.uint16[i + 2] = n, t } } wa.prototype.bytesPerElement = 6, Oi(wa, "StructArrayLayout3ui6"); class _a extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i, s, a, o, l, u, c, h, p, f, d, y, m, g, x, v, b) { const w = this.length; return this.resize(w + 1), this.emplace(w, t, e, r, n, i, s, a, o, l, u, c, h, p, f, d, y, m, g, x, v, b) } emplace(t, e, r, n, i, s, a, o, l, u, c, h, p, f, d, y, m, g, x, v, b, w) { const _ = 30 * t, A = 15 * t, S = 60 * t; return this.int16[_ + 0] = e, this.int16[_ + 1] = r, this.int16[_ + 2] = n, this.float32[A + 2] = i, this.float32[A + 3] = s, this.uint16[_ + 8] = a, this.uint16[_ + 9] = o, this.uint32[A + 5] = l, this.uint32[A + 6] = u, this.uint32[A + 7] = c, this.uint16[_ + 16] = h, this.uint16[_ + 17] = p, this.uint16[_ + 18] = f, this.float32[A + 10] = d, this.float32[A + 11] = y, this.uint8[S + 48] = m, this.uint8[S + 49] = g, this.uint8[S + 50] = x, this.uint32[A + 13] = v, this.int16[_ + 28] = b, this.uint8[S + 58] = w, t } } _a.prototype.bytesPerElement = 60, Oi(_a, "StructArrayLayout3i2f2ui3ul3ui2f3ub1ul1i1ub60"); class Aa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i, s, a, o, l, u, c, h, p, f, d, y, m, g, x, v, b, w, _, A, S, k, I, M, T, z) { const B = this.length; return this.resize(B + 1), this.emplace(B, t, e, r, n, i, s, a, o, l, u, c, h, p, f, d, y, m, g, x, v, b, w, _, A, S, k, I, M, T, z) } emplace(t, e, r, n, i, s, a, o, l, u, c, h, p, f, d, y, m, g, x, v, b, w, _, A, S, k, I, M, T, z, B) { const E = 38 * t, C = 19 * t; return this.int16[E + 0] = e, this.int16[E + 1] = r, this.int16[E + 2] = n, this.float32[C + 2] = i, this.float32[C + 3] = s, this.int16[E + 8] = a, this.int16[E + 9] = o, this.int16[E + 10] = l, this.int16[E + 11] = u, this.int16[E + 12] = c, this.int16[E + 13] = h, this.uint16[E + 14] = p, this.uint16[E + 15] = f, this.uint16[E + 16] = d, this.uint16[E + 17] = y, this.uint16[E + 18] = m, this.uint16[E + 19] = g, this.uint16[E + 20] = x, this.uint16[E + 21] = v, this.uint16[E + 22] = b, this.uint16[E + 23] = w, this.uint16[E + 24] = _, this.uint16[E + 25] = A, this.uint16[E + 26] = S, this.uint16[E + 27] = k, this.uint16[E + 28] = I, this.uint32[C + 15] = M, this.float32[C + 16] = T, this.float32[C + 17] = z, this.float32[C + 18] = B, t } } Aa.prototype.bytesPerElement = 76, Oi(Aa, "StructArrayLayout3i2f6i15ui1ul3f76"); class Sa extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t) { const e = this.length; return this.resize(e + 1), this.emplace(e, t) } emplace(t, e) { return this.float32[1 * t + 0] = e, t } } Sa.prototype.bytesPerElement = 4, Oi(Sa, "StructArrayLayout1f4"); class ka extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t, e, r, n, i) { const s = this.length; return this.resize(s + 1), this.emplace(s, t, e, r, n, i) } emplace(t, e, r, n, i, s) { const a = 5 * t; return this.float32[a + 0] = e, this.float32[a + 1] = r, this.float32[a + 2] = n, this.float32[a + 3] = i, this.float32[a + 4] = s, t } } ka.prototype.bytesPerElement = 20, Oi(ka, "StructArrayLayout5f20"); class Ia extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer); } emplaceBack(t, e, r, n) { const i = this.length; return this.resize(i + 1), this.emplace(i, t, e, r, n) } emplace(t, e, r, n, i) { const s = 6 * t; return this.uint32[3 * t + 0] = e, this.uint16[s + 2] = r, this.uint16[s + 3] = n, this.uint16[s + 4] = i, t } } Ia.prototype.bytesPerElement = 12, Oi(Ia, "StructArrayLayout1ul3ui12"); class Ma extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer); } emplaceBack(t, e) { const r = this.length; return this.resize(r + 1), this.emplace(r, t, e) } emplace(t, e, r) { const n = 2 * t; return this.uint16[n + 0] = e, this.uint16[n + 1] = r, t } } Ma.prototype.bytesPerElement = 4, Oi(Ma, "StructArrayLayout2ui4"); class Ta extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer); } emplaceBack(t) { const e = this.length; return this.resize(e + 1), this.emplace(e, t) } emplace(t, e) { return this.uint16[1 * t + 0] = e, t } } Ta.prototype.bytesPerElement = 2, Oi(Ta, "StructArrayLayout1ui2"); class za extends ra { _refreshViews() { this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer); } emplaceBack(t, e) { const r = this.length; return this.resize(r + 1), this.emplace(r, t, e) } emplace(t, e, r) { const n = 2 * t; return this.float32[n + 0] = e, this.float32[n + 1] = r, t } } za.prototype.bytesPerElement = 8, Oi(za, "StructArrayLayout2f8"); class Ba extends ea { get projectedAnchorX() { return this._structArray.int16[this._pos2 + 0] } get projectedAnchorY() { return this._structArray.int16[this._pos2 + 1] } get projectedAnchorZ() { return this._structArray.int16[this._pos2 + 2] } get tileAnchorX() { return this._structArray.int16[this._pos2 + 3] } get tileAnchorY() { return this._structArray.int16[this._pos2 + 4] } get x1() { return this._structArray.float32[this._pos4 + 3] } get y1() { return this._structArray.float32[this._pos4 + 4] } get x2() { return this._structArray.float32[this._pos4 + 5] } get y2() { return this._structArray.float32[this._pos4 + 6] } get padding() { return this._structArray.int16[this._pos2 + 14] } get featureIndex() { return this._structArray.uint32[this._pos4 + 8] } get sourceLayerIndex() { return this._structArray.uint16[this._pos2 + 18] } get bucketIndex() { return this._structArray.uint16[this._pos2 + 19] } } Ba.prototype.size = 40; class Ea extends ma { get(t) { return new Ba(this, t) } } Oi(Ea, "CollisionBoxArray"); class Ca extends ea { get projectedAnchorX() { return this._structArray.int16[this._pos2 + 0] } get projectedAnchorY() { return this._structArray.int16[this._pos2 + 1] } get projectedAnchorZ() { return this._structArray.int16[this._pos2 + 2] } get tileAnchorX() { return this._structArray.float32[this._pos4 + 2] } get tileAnchorY() { return this._structArray.float32[this._pos4 + 3] } get glyphStartIndex() { return this._structArray.uint16[this._pos2 + 8] } get numGlyphs() { return this._structArray.uint16[this._pos2 + 9] } get vertexStartIndex() { return this._structArray.uint32[this._pos4 + 5] } get lineStartIndex() { return this._structArray.uint32[this._pos4 + 6] } get lineLength() { return this._structArray.uint32[this._pos4 + 7] } get segment() { return this._structArray.uint16[this._pos2 + 16] } get lowerSize() { return this._structArray.uint16[this._pos2 + 17] } get upperSize() { return this._structArray.uint16[this._pos2 + 18] } get lineOffsetX() { return this._structArray.float32[this._pos4 + 10] } get lineOffsetY() { return this._structArray.float32[this._pos4 + 11] } get writingMode() { return this._structArray.uint8[this._pos1 + 48] } get placedOrientation() { return this._structArray.uint8[this._pos1 + 49] } set placedOrientation(t) { this._structArray.uint8[this._pos1 + 49] = t; } get hidden() { return this._structArray.uint8[this._pos1 + 50] } set hidden(t) { this._structArray.uint8[this._pos1 + 50] = t; } get crossTileID() { return this._structArray.uint32[this._pos4 + 13] } set crossTileID(t) { this._structArray.uint32[this._pos4 + 13] = t; } get associatedIconIndex() { return this._structArray.int16[this._pos2 + 28] } get flipState() { return this._structArray.uint8[this._pos1 + 58] } set flipState(t) { this._structArray.uint8[this._pos1 + 58] = t; } } Ca.prototype.size = 60; class Pa extends _a { get(t) { return new Ca(this, t) } } Oi(Pa, "PlacedSymbolArray"); class Da extends ea { get projectedAnchorX() { return this._structArray.int16[this._pos2 + 0] } get projectedAnchorY() { return this._structArray.int16[this._pos2 + 1] } get projectedAnchorZ() { return this._structArray.int16[this._pos2 + 2] } get tileAnchorX() { return this._structArray.float32[this._pos4 + 2] } get tileAnchorY() { return this._structArray.float32[this._pos4 + 3] } get rightJustifiedTextSymbolIndex() { return this._structArray.int16[this._pos2 + 8] } get centerJustifiedTextSymbolIndex() { return this._structArray.int16[this._pos2 + 9] } get leftJustifiedTextSymbolIndex() { return this._structArray.int16[this._pos2 + 10] } get verticalPlacedTextSymbolIndex() { return this._structArray.int16[this._pos2 + 11] } get placedIconSymbolIndex() { return this._structArray.int16[this._pos2 + 12] } get verticalPlacedIconSymbolIndex() { return this._structArray.int16[this._pos2 + 13] } get key() { return this._structArray.uint16[this._pos2 + 14] } get textBoxStartIndex() { return this._structArray.uint16[this._pos2 + 15] } get textBoxEndIndex() { return this._structArray.uint16[this._pos2 + 16] } get verticalTextBoxStartIndex() { return this._structArray.uint16[this._pos2 + 17] } get verticalTextBoxEndIndex() { return this._structArray.uint16[this._pos2 + 18] } get iconBoxStartIndex() { return this._structArray.uint16[this._pos2 + 19] } get iconBoxEndIndex() { return this._structArray.uint16[this._pos2 + 20] } get verticalIconBoxStartIndex() { return this._structArray.uint16[this._pos2 + 21] } get verticalIconBoxEndIndex() { return this._structArray.uint16[this._pos2 + 22] } get featureIndex() { return this._structArray.uint16[this._pos2 + 23] } get numHorizontalGlyphVertices() { return this._structArray.uint16[this._pos2 + 24] } get numVerticalGlyphVertices() { return this._structArray.uint16[this._pos2 + 25] } get numIconVertices() { return this._structArray.uint16[this._pos2 + 26] } get numVerticalIconVertices() { return this._structArray.uint16[this._pos2 + 27] } get useRuntimeCollisionCircles() { return this._structArray.uint16[this._pos2 + 28] } get crossTileID() { return this._structArray.uint32[this._pos4 + 15] } set crossTileID(t) { this._structArray.uint32[this._pos4 + 15] = t; } get textOffset0() { return this._structArray.float32[this._pos4 + 16] } get textOffset1() { return this._structArray.float32[this._pos4 + 17] } get collisionCircleDiameter() { return this._structArray.float32[this._pos4 + 18] } } Da.prototype.size = 76; class Va extends Aa { get(t) { return new Da(this, t) } } Oi(Va, "SymbolInstanceArray"); class La extends Sa { getoffsetX(t) { return this.float32[1 * t + 0] } } Oi(La, "GlyphOffsetArray"); class Fa extends sa { getx(t) { return this.int16[2 * t + 0] } gety(t) { return this.int16[2 * t + 1] } } Oi(Fa, "SymbolLineVertexArray"); class Ra extends ea { get featureIndex() { return this._structArray.uint32[this._pos4 + 0] } get sourceLayerIndex() { return this._structArray.uint16[this._pos2 + 2] } get bucketIndex() { return this._structArray.uint16[this._pos2 + 3] } get layoutVertexArrayOffset() { return this._structArray.uint16[this._pos2 + 4] } } Ra.prototype.size = 12; class ja extends Ia { get(t) { return new Ra(this, t) } } Oi(ja, "FeatureIndexArray"); class $a extends Ma { geta_centroid_pos0(t) { return this.uint16[2 * t + 0] } geta_centroid_pos1(t) { return this.uint16[2 * t + 1] } } Oi($a, "FillExtrusionCentroidArray"); const Ua = na([{ name: "a_pattern", components: 4, type: "Uint16" }, { name: "a_pixel_ratio", components: 1, type: "Float32" }]), Oa = na([{ name: "a_dash", components: 4, type: "Uint16" }]); var qa = {}, Na = { get exports() { return qa }, set exports(t) { qa = t; } }, Ga = {}; ({ get exports() { return Ga }, set exports(t) { Ga = t; } }).exports = function(t, e) { var r, n, i, s, a, o, l, u; for (n = t.length - (r = 3 & t.length), i = e, a = 3432918353, o = 461845907, u = 0; u < n;) l = 255 & t.charCodeAt(u) | (255 & t.charCodeAt(++u)) << 8 | (255 & t.charCodeAt(++u)) << 16 | (255 & t.charCodeAt(++u)) << 24, ++u, i = 27492 + (65535 & (s = 5 * (65535 & (i = (i ^= l = (65535 & (l = (l = (65535 & l) * a + (((l >>> 16) * a & 65535) << 16) & 4294967295) << 15 | l >>> 17)) * o + (((l >>> 16) * o & 65535) << 16) & 4294967295) << 13 | i >>> 19)) + ((5 * (i >>> 16) & 65535) << 16) & 4294967295)) + ((58964 + (s >>> 16) & 65535) << 16); switch (l = 0, r) { case 3: l ^= (255 & t.charCodeAt(u + 2)) << 16; case 2: l ^= (255 & t.charCodeAt(u + 1)) << 8; case 1: i ^= l = (65535 & (l = (l = (65535 & (l ^= 255 & t.charCodeAt(u))) * a + (((l >>> 16) * a & 65535) << 16) & 4294967295) << 15 | l >>> 17)) * o + (((l >>> 16) * o & 65535) << 16) & 4294967295; } return i ^= t.length, i = 2246822507 * (65535 & (i ^= i >>> 16)) + ((2246822507 * (i >>> 16) & 65535) << 16) & 4294967295, i = 3266489909 * (65535 & (i ^= i >>> 13)) + ((3266489909 * (i >>> 16) & 65535) << 16) & 4294967295, (i ^= i >>> 16) >>> 0 }; var Za = {}; ({ get exports() { return Za }, set exports(t) { Za = t; } }).exports = function(t, e) { for (var r, n = t.length, i = e ^ n, s = 0; n >= 4;) r = 1540483477 * (65535 & (r = 255 & t.charCodeAt(s) | (255 & t.charCodeAt(++s)) << 8 | (255 & t.charCodeAt(++s)) << 16 | (255 & t.charCodeAt(++s)) << 24)) + ((1540483477 * (r >>> 16) & 65535) << 16), i = 1540483477 * (65535 & i) + ((1540483477 * (i >>> 16) & 65535) << 16) ^ (r = 1540483477 * (65535 & (r ^= r >>> 24)) + ((1540483477 * (r >>> 16) & 65535) << 16)), n -= 4, ++s; switch (n) { case 3: i ^= (255 & t.charCodeAt(s + 2)) << 16; case 2: i ^= (255 & t.charCodeAt(s + 1)) << 8; case 1: i = 1540483477 * (65535 & (i ^= 255 & t.charCodeAt(s))) + ((1540483477 * (i >>> 16) & 65535) << 16); } return i = 1540483477 * (65535 & (i ^= i >>> 13)) + ((1540483477 * (i >>> 16) & 65535) << 16), (i ^= i >>> 15) >>> 0 }; var Xa = Ga, Ka = Za; Na.exports = Xa, qa.murmur3 = Xa, qa.murmur2 = Ka; class Ya { constructor() { this.ids = [], this.positions = [], this.indexed = !1; } add(t, e, r, n) { this.ids.push(Ha(t)), this.positions.push(e, r, n); } getPositions(t) { const e = Ha(t); let r = 0, n = this.ids.length - 1; for (; r < n;) { const t = r + n >> 1; this.ids[t] >= e ? n = t : r = t + 1; } const i = []; for (; this.ids[r] === e;) i.push({ index: this.positions[3 * r], start: this.positions[3 * r + 1], end: this.positions[3 * r + 2] }), r++; return i } static serialize(t, e) { const r = new Float64Array(t.ids), n = new Uint32Array(t.positions); return Wa(r, n, 0, r.length - 1), e && e.push(r.buffer, n.buffer), { ids: r, positions: n } } static deserialize(t) { const e = new Ya; return e.ids = t.ids, e.positions = t.positions, e.indexed = !0, e } } function Ha(t) { const e = +t; return !isNaN(e) && Number.MIN_SAFE_INTEGER <= e && e <= Number.MAX_SAFE_INTEGER ? e : qa(String(t)) } function Wa(t, e, r, n) { for (; r < n;) { const i = t[r + n >> 1]; let s = r - 1, a = n + 1; for (;;) { do { s++; } while (t[s] < i); do { a--; } while (t[a] > i); if (s >= a) break; Ja(t, s, a), Ja(e, 3 * s, 3 * a), Ja(e, 3 * s + 1, 3 * a + 1), Ja(e, 3 * s + 2, 3 * a + 2); } a - r < n - a ? (Wa(t, e, r, a), r = a + 1) : (Wa(t, e, a + 1, n), n = a); } } function Ja(t, e, r) { const n = t[e]; t[e] = t[r], t[r] = n; } Oi(Ya, "FeaturePositionMap"); class Qa { constructor(t) { this.gl = t.gl, this.initialized = !1; } fetchUniformLocation(t, e) { return this.location || this.initialized || (this.location = this.gl.getUniformLocation(t, e), this.initialized = !0), !!this.location } } class to extends Qa { constructor(t) { super(t), this.current = 0; } set(t, e, r) { this.fetchUniformLocation(t, e) && this.current !== r && (this.current = r, this.gl.uniform1f(this.location, r)); } } class eo extends Qa { constructor(t) { super(t), this.current = [0, 0, 0, 0]; } set(t, e, r) { this.fetchUniformLocation(t, e) && (r[0] === this.current[0] && r[1] === this.current[1] && r[2] === this.current[2] && r[3] === this.current[3] || (this.current = r, this.gl.uniform4f(this.location, r[0], r[1], r[2], r[3]))); } } class ro extends Qa { constructor(t) { super(t), this.current = Me.transparent; } set(t, e, r) { this.fetchUniformLocation(t, e) && (r.r === this.current.r && r.g === this.current.g && r.b === this.current.b && r.a === this.current.a || (this.current = r, this.gl.uniform4f(this.location, r.r, r.g, r.b, r.a))); } } const no = new Float32Array(16), io = new Float32Array(9), so = new Float32Array(4); function ao(t) { return [Qs(255 * t.r, 255 * t.g), Qs(255 * t.b, 255 * t.a)] } class oo { constructor(t, e, r) { this.value = t, this.uniformNames = e.map((t => `u_${t}`)), this.type = r; } setUniform(t, e, r, n, i) { e.set(t, i, n.constantOr(this.value)); } getBinding(t, e) { return "color" === this.type ? new ro(t) : new to(t) } } class lo { constructor(t, e) { this.uniformNames = e.map((t => `u_${t}`)), this.pattern = null, this.pixelRatio = 1; } setConstantPatternPositions(t) { this.pixelRatio = t.pixelRatio || 1, this.pattern = t.tl.concat(t.br); } setUniform(t, e, r, n, i) { const s = "u_pattern" === i || "u_dash" === i ? this.pattern : "u_pixel_ratio" === i ? this.pixelRatio : null; s && e.set(t, i, s); } getBinding(t, e) { return "u_pattern" === e || "u_dash" === e ? new eo(t) : new to(t) } } class uo { constructor(t, e, r, n) { this.expression = t, this.type = r, this.maxValue = 0, this.paintVertexAttributes = e.map((t => ({ name: `a_${t}`, type: "Float32", components: "color" === r ? 2 : 1, offset: 0 }))), this.paintVertexArray = new n; } populatePaintArray(t, e, r, n, i, s) { const a = this.paintVertexArray.length, o = this.expression.evaluate(new $s(0), e, {}, i, n, s); this.paintVertexArray.resize(t), this._setPaintValue(a, t, o); } updatePaintArray(t, e, r, n, i) { const s = this.expression.evaluate({ zoom: 0 }, r, n, void 0, i); this._setPaintValue(t, e, s); } _setPaintValue(t, e, r) { if ("color" === this.type) { const n = ao(r); for (let r = t; r < e; r++) this.paintVertexArray.emplace(r, n[0], n[1]); } else { for (let n = t; n < e; n++) this.paintVertexArray.emplace(n, r); this.maxValue = Math.max(this.maxValue, Math.abs(r)); } } upload(t) { this.paintVertexArray && this.paintVertexArray.arrayBuffer && (this.paintVertexBuffer && this.paintVertexBuffer.buffer ? this.paintVertexBuffer.updateData(this.paintVertexArray) : this.paintVertexBuffer = t.createVertexBuffer(this.paintVertexArray, this.paintVertexAttributes, this.expression.isStateDependent)); } destroy() { this.paintVertexBuffer && this.paintVertexBuffer.destroy(); } } class co { constructor(t, e, r, n, i, s) { this.expression = t, this.uniformNames = e.map((t => `u_${t}_t`)), this.type = r, this.useIntegerZoom = n, this.zoom = i, this.maxValue = 0, this.paintVertexAttributes = e.map((t => ({ name: `a_${t}`, type: "Float32", components: "color" === r ? 4 : 2, offset: 0 }))), this.paintVertexArray = new s; } populatePaintArray(t, e, r, n, i, s) { const a = this.expression.evaluate(new $s(this.zoom), e, {}, i, n, s), o = this.expression.evaluate(new $s(this.zoom + 1), e, {}, i, n, s), l = this.paintVertexArray.length; this.paintVertexArray.resize(t), this._setPaintValue(l, t, a, o); } updatePaintArray(t, e, r, n, i) { const s = this.expression.evaluate({ zoom: this.zoom }, r, n, void 0, i), a = this.expression.evaluate({ zoom: this.zoom + 1 }, r, n, void 0, i); this._setPaintValue(t, e, s, a); } _setPaintValue(t, e, r, n) { if ("color" === this.type) { const i = ao(r), s = ao(n); for (let r = t; r < e; r++) this.paintVertexArray.emplace(r, i[0], i[1], s[0], s[1]); } else { for (let i = t; i < e; i++) this.paintVertexArray.emplace(i, r, n); this.maxValue = Math.max(this.maxValue, Math.abs(r), Math.abs(n)); } } upload(t) { this.paintVertexArray && this.paintVertexArray.arrayBuffer && (this.paintVertexBuffer && this.paintVertexBuffer.buffer ? this.paintVertexBuffer.updateData(this.paintVertexArray) : this.paintVertexBuffer = t.createVertexBuffer(this.paintVertexArray, this.paintVertexAttributes, this.expression.isStateDependent)); } destroy() { this.paintVertexBuffer && this.paintVertexBuffer.destroy(); } setUniform(t, e, r, n, i) { const s = this.useIntegerZoom ? Math.floor(r.zoom) : r.zoom, a = S(this.expression.interpolationFactor(s, this.zoom, this.zoom + 1), 0, 1); e.set(t, i, a); } getBinding(t, e) { return new to(t) } } class ho { constructor(t, e, r, n, i) { this.expression = t, this.layerId = i, this.paintVertexAttributes = ("array" === r ? Oa : Ua).members; for (let t = 0; t < e.length; ++t); this.paintVertexArray = new n; } populatePaintArray(t, e, r) { const n = this.paintVertexArray.length; this.paintVertexArray.resize(t), this._setPaintValues(n, t, e.patterns && e.patterns[this.layerId], r); } updatePaintArray(t, e, r, n, i, s) { this._setPaintValues(t, e, r.patterns && r.patterns[this.layerId], s); } _setPaintValues(t, e, r, n) { if (!n || !r) return; const i = n[r]; if (!i) return; const { tl: s, br: a, pixelRatio: o } = i; for (let r = t; r < e; r++) this.paintVertexArray.emplace(r, s[0], s[1], a[0], a[1], o); } upload(t) { this.paintVertexArray && this.paintVertexArray.arrayBuffer && (this.paintVertexBuffer = t.createVertexBuffer(this.paintVertexArray, this.paintVertexAttributes, this.expression.isStateDependent)); } destroy() { this.paintVertexBuffer && this.paintVertexBuffer.destroy(); } } class po { constructor(t, e, r = (() => !0)) { this.binders = {}, this._buffers = []; const n = []; for (const i in t.paint._values) { if (!r(i)) continue; const s = t.paint.get(i); if (!(s instanceof Xs && En(s.property.specification))) continue; const a = mo(i, t.type), o = s.value, l = s.property.specification.type, u = !!s.property.useIntegerZoom, c = "line-dasharray" === i || i.endsWith("pattern"), h = "line-dasharray" === i && "constant" !== t.layout.get("line-cap").value.kind; if ("constant" !== o.kind || h) if ("source" === o.kind || h || c) { const e = vo(i, l, "source"); this.binders[i] = c ? new ho(o, a, l, e, t.id) : new uo(o, a, l, e), n.push(`/a_${i}`); } else { const t = vo(i, l, "composite"); this.binders[i] = new co(o, a, l, u, e, t), n.push(`/z_${i}`); } else this.binders[i] = c ? new lo(o.value, a) : new oo(o.value, a, l), n.push(`/u_${i}`); } this.cacheKey = n.sort().join(""); } getMaxValue(t) { const e = this.binders[t]; return e instanceof uo || e instanceof co ? e.maxValue : 0 } populatePaintArrays(t, e, r, n, i, s) { for (const a in this.binders) { const o = this.binders[a]; (o instanceof uo || o instanceof co || o instanceof ho) && o.populatePaintArray(t, e, r, n, i, s); } } setConstantPatternPositions(t) { for (const e in this.binders) { const r = this.binders[e]; r instanceof lo && r.setConstantPatternPositions(t); } } updatePaintArrays(t, e, r, n, i, s) { let a = !1; for (const o in t) { const l = e.getPositions(o); for (const e of l) { const l = r.feature(e.index); for (const r in this.binders) { const u = this.binders[r]; if ((u instanceof uo || u instanceof co || u instanceof ho) && !0 === u.expression.isStateDependent) { const c = n.paint.get(r); u.expression = c.value, u.updatePaintArray(e.start, e.end, l, t[o], i, s), a = !0; } } } } return a } defines() { const t = []; for (const e in this.binders) { const r = this.binders[e]; (r instanceof oo || r instanceof lo) && t.push(...r.uniformNames.map((t => `#define HAS_UNIFORM_${t}`))); } return t } getBinderAttributes() { const t = []; for (const e in this.binders) { const r = this.binders[e]; if (r instanceof uo || r instanceof co || r instanceof ho) for (let e = 0; e < r.paintVertexAttributes.length; e++) t.push(r.paintVertexAttributes[e].name); } return t } getBinderUniforms() { const t = []; for (const e in this.binders) { const r = this.binders[e]; if (r instanceof oo || r instanceof lo || r instanceof co) for (const e of r.uniformNames) t.push(e); } return t } getPaintVertexBuffers() { return this._buffers } getUniforms(t) { const e = []; for (const r in this.binders) { const n = this.binders[r]; if (n instanceof oo || n instanceof lo || n instanceof co) for (const i of n.uniformNames) e.push({ name: i, property: r, binding: n.getBinding(t, i) }); } return e } setUniforms(t, e, r, n, i) { for (const { name: e, property: s, binding: a } of r) this.binders[s].setUniform(t, a, i, n.get(s), e); } updatePaintBuffers() { this._buffers = []; for (const t in this.binders) { const e = this.binders[t]; (e instanceof uo || e instanceof co || e instanceof ho) && e.paintVertexBuffer && this._buffers.push(e.paintVertexBuffer); } } upload(t) { for (const e in this.binders) { const r = this.binders[e]; (r instanceof uo || r instanceof co || r instanceof ho) && r.upload(t); } this.updatePaintBuffers(); } destroy() { for (const t in this.binders) { const e = this.binders[t]; (e instanceof uo || e instanceof co || e instanceof ho) && e.destroy(); } } } class fo { constructor(t, e, r = (() => !0)) { this.programConfigurations = {}; for (const n of t) this.programConfigurations[n.id] = new po(n, e, r); this.needsUpload = !1, this._featureMap = new Ya, this._bufferOffset = 0; } populatePaintArrays(t, e, r, n, i, s, a) { for (const r in this.programConfigurations) this.programConfigurations[r].populatePaintArrays(t, e, n, i, s, a); void 0 !== e.id && this._featureMap.add(e.id, r, this._bufferOffset, t), this._bufferOffset = t, this.needsUpload = !0; } updatePaintArrays(t, e, r, n, i) { for (const s of r) this.needsUpload = this.programConfigurations[s.id].updatePaintArrays(t, this._featureMap, e, s, n, i) || this.needsUpload; } get(t) { return this.programConfigurations[t] } upload(t) { if (this.needsUpload) { for (const e in this.programConfigurations) this.programConfigurations[e].upload(t); this.needsUpload = !1; } } destroy() { for (const t in this.programConfigurations) this.programConfigurations[t].destroy(); } } const yo = { "text-opacity": ["opacity"], "icon-opacity": ["opacity"], "text-color": ["fill_color"], "icon-color": ["fill_color"], "text-halo-color": ["halo_color"], "icon-halo-color": ["halo_color"], "text-halo-blur": ["halo_blur"], "icon-halo-blur": ["halo_blur"], "text-halo-width": ["halo_width"], "icon-halo-width": ["halo_width"], "line-gap-width": ["gapwidth"], "line-pattern": ["pattern", "pixel_ratio"], "fill-pattern": ["pattern", "pixel_ratio"], "fill-extrusion-pattern": ["pattern", "pixel_ratio"], "line-dasharray": ["dash"] }; function mo(t, e) { return yo[t] || [t.replace(`${e}-`, "").replace(/-/g, "_")] } const go = { "line-pattern": { source: ca, composite: ca }, "fill-pattern": { source: ca, composite: ca }, "fill-extrusion-pattern": { source: ca, composite: ca }, "line-dasharray": { source: ha, composite: ha } }, xo = { color: { source: za, composite: ua }, number: { source: Sa, composite: za } }; function vo(t, e, r) { const n = go[t]; return n && n[r] || xo[e][r] } Oi(oo, "ConstantBinder"), Oi(lo, "PatternConstantBinder"), Oi(uo, "SourceExpressionBinder"), Oi(ho, "PatternCompositeBinder"), Oi(co, "CompositeExpressionBinder"), Oi(po, "ProgramConfiguration", { omit: ["_buffers"] }), Oi(fo, "ProgramConfigurationSet"); const bo = "-transition"; class wo extends Yt { constructor(t, e) { if (super(), this.id = t.id, this.type = t.type, this._featureFilter = { filter: () => !0, needGeometry: !1, needFeature: !1 }, this._filterCompiled = !1, "custom" !== t.type && (this.metadata = t.metadata, this.minzoom = t.minzoom, this.maxzoom = t.maxzoom, "background" !== t.type && "sky" !== t.type && (this.source = t.source, this.sourceLayer = t["source-layer"], this.filter = t.filter), e.layout && (this._unevaluatedLayout = new Zs(e.layout)), e.paint)) { this._transitionablePaint = new qs(e.paint); for (const e in t.paint) this.setPaintProperty(e, t.paint[e], { validate: !1 }); for (const e in t.layout) this.setLayoutProperty(e, t.layout[e], { validate: !1 }); this._transitioningPaint = this._transitionablePaint.untransitioned(), this.paint = new Ks(e.paint); } } getLayoutProperty(t) { return "visibility" === t ? this.visibility : this._unevaluatedLayout.getValue(t) } setLayoutProperty(t, e, r = {}) { null != e && this._validate(Li, `layers.${this.id}.layout.${t}`, t, e, r) || ("visibility" !== t ? this._unevaluatedLayout.setValue(t, e) : this.visibility = e); } getPaintProperty(t) { return L(t, bo) ? this._transitionablePaint.getTransition(t.slice(0, -bo.length)) : this._transitionablePaint.getValue(t) } setPaintProperty(t, e, r = {}) { if (null != e && this._validate(Vi, `layers.${this.id}.paint.${t}`, t, e, r)) return !1; if (L(t, bo)) return this._transitionablePaint.setTransition(t.slice(0, -bo.length), e || void 0), !1; { const r = this._transitionablePaint._values[t], n = r.value.isDataDriven(), i = r.value; this._transitionablePaint.setValue(t, e), this._handleSpecialPaintPropertyUpdate(t); const s = this._transitionablePaint._values[t].value, a = s.isDataDriven(), o = L(t, "pattern") || "line-dasharray" === t; return a || n || o || this._handleOverridablePaintPropertyUpdate(t, i, s) } } _handleSpecialPaintPropertyUpdate(t) {} getProgramIds() { return null } getProgramConfiguration(t) { return null } _handleOverridablePaintPropertyUpdate(t, e, r) { return !1 } isHidden(t) { return !!(this.minzoom && t < this.minzoom) || !!(this.maxzoom && t >= this.maxzoom) || "none" === this.visibility } updateTransitions(t) { this._transitioningPaint = this._transitionablePaint.transitioned(t, this._transitioningPaint); } hasTransition() { return this._transitioningPaint.hasTransition() } recalculate(t, e) { this._unevaluatedLayout && (this.layout = this._unevaluatedLayout.possiblyEvaluate(t, void 0, e)), this.paint = this._transitioningPaint.possiblyEvaluate(t, void 0, e); } serialize() { const t = { id: this.id, type: this.type, source: this.source, "source-layer": this.sourceLayer, metadata: this.metadata, minzoom: this.minzoom, maxzoom: this.maxzoom, filter: this.filter, layout: this._unevaluatedLayout && this._unevaluatedLayout.serialize(), paint: this._transitionablePaint && this._transitionablePaint.serialize() }; return this.visibility && (t.layout = t.layout || {}, t.layout.visibility = this.visibility), R(t, ((t, e) => !(void 0 === t || "layout" === e && !Object.keys(t).length || "paint" === e && !Object.keys(t).length))) } _validate(t, e, r, n, i = {}) { return (!i || !1 !== i.validate) && Ri(this, t.call(Di, { key: e, layerType: this.type, objectKey: r, value: n, styleSpec: Ht, style: { glyphs: !0, sprite: !0 } })) } is3D() { return !1 } isSky() { return !1 } isTileClipped() { return !1 } hasOffscreenPass() { return !1 } resize() {} isStateDependent() { for (const t in this.paint._values) { const e = this.paint.get(t); if (e instanceof Xs && En(e.property.specification) && ("source" === e.value.kind || "composite" === e.value.kind) && e.value.isStateDependent) return !0 } return !1 } compileFilter() { this._filterCompiled || (this._featureFilter = ai(this.filter), this._filterCompiled = !0); } invalidateCompiledFilter() { this._filterCompiled = !1; } dynamicFilter() { return this._featureFilter.dynamicFilter } dynamicFilterNeedsFeature() { return this._featureFilter.needFeature } } const _o = na([{ name: "a_pos", components: 2, type: "Int16" }], 4), Ao = na([{ name: "a_pos_3", components: 3, type: "Int16" }, { name: "a_pos_normal_3", components: 3, type: "Int16" }]); class So { constructor(t = []) { this.segments = t; } prepareSegment(t, e, r, n) { let i = this.segments[this.segments.length - 1]; return t > So.MAX_VERTEX_ARRAY_LENGTH && U(`Max vertices per segment is ${So.MAX_VERTEX_ARRAY_LENGTH}: bucket requested ${t}`), (!i || i.vertexLength + t > So.MAX_VERTEX_ARRAY_LENGTH || i.sortKey !== n) && (i = { vertexOffset: e.length, primitiveOffset: r.length, vertexLength: 0, primitiveLength: 0 }, void 0 !== n && (i.sortKey = n), this.segments.push(i)), i } get() { return this.segments } destroy() { for (const t of this.segments) for (const e in t.vaos) t.vaos[e].destroy(); } static simpleSegment(t, e, r, n) { return new So([{ vertexOffset: t, primitiveOffset: e, vertexLength: r, primitiveLength: n, vaos: {}, sortKey: 0 }]) } } So.MAX_VERTEX_ARRAY_LENGTH = Math.pow(2, 16) - 1, Oi(So, "SegmentVector"); var ko = 8192; class Io { constructor(t, e) { t && (e ? this.setSouthWest(t).setNorthEast(e) : 4 === t.length ? this.setSouthWest([t[0], t[1]]).setNorthEast([t[2], t[3]]) : this.setSouthWest(t[0]).setNorthEast(t[1])); } setNorthEast(t) { return this._ne = t instanceof ru ? new ru(t.lng, t.lat) : ru.convert(t), this } setSouthWest(t) { return this._sw = t instanceof ru ? new ru(t.lng, t.lat) : ru.convert(t), this } extend(t) { const e = this._sw, r = this._ne; let n, i; if (t instanceof ru) n = t, i = t; else { if (!(t instanceof Io)) return Array.isArray(t) ? 4 === t.length || t.every(Array.isArray) ? this.extend(Io.convert(t)) : this.extend(ru.convert(t)) : "object" == typeof t && null !== t && t.hasOwnProperty("lat") && (t.hasOwnProperty("lon") || t.hasOwnProperty("lng")) ? this.extend(ru.convert(t)) : this; if (n = t._sw, i = t._ne, !n || !i) return this } return e || r ? (e.lng = Math.min(n.lng, e.lng), e.lat = Math.min(n.lat, e.lat), r.lng = Math.max(i.lng, r.lng), r.lat = Math.max(i.lat, r.lat)) : (this._sw = new ru(n.lng, n.lat), this._ne = new ru(i.lng, i.lat)), this } getCenter() { return new ru((this._sw.lng + this._ne.lng) / 2, (this._sw.lat + this._ne.lat) / 2) } getSouthWest() { return this._sw } getNorthEast() { return this._ne } getNorthWest() { return new ru(this.getWest(), this.getNorth()) } getSouthEast() { return new ru(this.getEast(), this.getSouth()) } getWest() { return this._sw.lng } getSouth() { return this._sw.lat } getEast() { return this._ne.lng } getNorth() { return this._ne.lat } toArray() { return [this._sw.toArray(), this._ne.toArray()] } toString() { return `LngLatBounds(${this._sw.toString()}, ${this._ne.toString()})` } isEmpty() { return !(this._sw && this._ne) } contains(t) { const { lng: e, lat: r } = ru.convert(t); let n = this._sw.lng <= e && e <= this._ne.lng; return this._sw.lng > this._ne.lng && (n = this._sw.lng >= e && e >= this._ne.lng), this._sw.lat <= r && r <= this._ne.lat && n } static convert(t) { return !t || t instanceof Io ? t : new Io(t) } } var Mo = 1e-6, To = "undefined" != typeof Float32Array ? Float32Array : Array; function zo() { var t = new To(9); return To != Float32Array && (t[1] = 0, t[2] = 0, t[3] = 0, t[5] = 0, t[6] = 0, t[7] = 0), t[0] = 1, t[4] = 1, t[8] = 1, t } function Bo(t, e, r) { var n = e[0], i = e[1], s = e[2], a = e[3], o = e[4], l = e[5], u = e[6], c = e[7], h = e[8], p = r[0], f = r[1], d = r[2], y = r[3], m = r[4], g = r[5], x = r[6], v = r[7], b = r[8]; return t[0] = p * n + f * a + d * u, t[1] = p * i + f * o + d * c, t[2] = p * s + f * l + d * h, t[3] = y * n + m * a + g * u, t[4] = y * i + m * o + g * c, t[5] = y * s + m * l + g * h, t[6] = x * n + v * a + b * u, t[7] = x * i + v * o + b * c, t[8] = x * s + v * l + b * h, t } function Eo(t) { return t[0] = 1, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = 1, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = 1, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, t } function Co(t, e) { var r = e[0], n = e[1], i = e[2], s = e[3], a = e[4], o = e[5], l = e[6], u = e[7], c = e[8], h = e[9], p = e[10], f = e[11], d = e[12], y = e[13], m = e[14], g = e[15], x = r * o - n * a, v = r * l - i * a, b = r * u - s * a, w = n * l - i * o, _ = n * u - s * o, A = i * u - s * l, S = c * y - h * d, k = c * m - p * d, I = c * g - f * d, M = h * m - p * y, T = h * g - f * y, z = p * g - f * m, B = x * z - v * T + b * M + w * I - _ * k + A * S; return B ? (t[0] = (o * z - l * T + u * M) * (B = 1 / B), t[1] = (i * T - n * z - s * M) * B, t[2] = (y * A - m * _ + g * w) * B, t[3] = (p * _ - h * A - f * w) * B, t[4] = (l * I - a * z - u * k) * B, t[5] = (r * z - i * I + s * k) * B, t[6] = (m * b - d * A - g * v) * B, t[7] = (c * A - p * b + f * v) * B, t[8] = (a * T - o * I + u * S) * B, t[9] = (n * I - r * T - s * S) * B, t[10] = (d * _ - y * b + g * x) * B, t[11] = (h * b - c * _ - f * x) * B, t[12] = (o * k - a * M - l * S) * B, t[13] = (r * M - n * k + i * S) * B, t[14] = (y * v - d * w - m * x) * B, t[15] = (c * w - h * v + p * x) * B, t) : null } function Po(t, e, r) { var n = e[0], i = e[1], s = e[2], a = e[3], o = e[4], l = e[5], u = e[6], c = e[7], h = e[8], p = e[9], f = e[10], d = e[11], y = e[12], m = e[13], g = e[14], x = e[15], v = r[0], b = r[1], w = r[2], _ = r[3]; return t[0] = v * n + b * o + w * h + _ * y, t[1] = v * i + b * l + w * p + _ * m, t[2] = v * s + b * u + w * f + _ * g, t[3] = v * a + b * c + w * d + _ * x, t[4] = (v = r[4]) * n + (b = r[5]) * o + (w = r[6]) * h + (_ = r[7]) * y, t[5] = v * i + b * l + w * p + _ * m, t[6] = v * s + b * u + w * f + _ * g, t[7] = v * a + b * c + w * d + _ * x, t[8] = (v = r[8]) * n + (b = r[9]) * o + (w = r[10]) * h + (_ = r[11]) * y, t[9] = v * i + b * l + w * p + _ * m, t[10] = v * s + b * u + w * f + _ * g, t[11] = v * a + b * c + w * d + _ * x, t[12] = (v = r[12]) * n + (b = r[13]) * o + (w = r[14]) * h + (_ = r[15]) * y, t[13] = v * i + b * l + w * p + _ * m, t[14] = v * s + b * u + w * f + _ * g, t[15] = v * a + b * c + w * d + _ * x, t } function Do(t, e, r) { var n, i, s, a, o, l, u, c, h, p, f, d, y = r[0], m = r[1], g = r[2]; return e === t ? (t[12] = e[0] * y + e[4] * m + e[8] * g + e[12], t[13] = e[1] * y + e[5] * m + e[9] * g + e[13], t[14] = e[2] * y + e[6] * m + e[10] * g + e[14], t[15] = e[3] * y + e[7] * m + e[11] * g + e[15]) : (i = e[1], s = e[2], a = e[3], o = e[4], l = e[5], u = e[6], c = e[7], h = e[8], p = e[9], f = e[10], d = e[11], t[0] = n = e[0], t[1] = i, t[2] = s, t[3] = a, t[4] = o, t[5] = l, t[6] = u, t[7] = c, t[8] = h, t[9] = p, t[10] = f, t[11] = d, t[12] = n * y + o * m + h * g + e[12], t[13] = i * y + l * m + p * g + e[13], t[14] = s * y + u * m + f * g + e[14], t[15] = a * y + c * m + d * g + e[15]), t } function Vo(t, e, r) { var n = r[0], i = r[1], s = r[2]; return t[0] = e[0] * n, t[1] = e[1] * n, t[2] = e[2] * n, t[3] = e[3] * n, t[4] = e[4] * i, t[5] = e[5] * i, t[6] = e[6] * i, t[7] = e[7] * i, t[8] = e[8] * s, t[9] = e[9] * s, t[10] = e[10] * s, t[11] = e[11] * s, t[12] = e[12], t[13] = e[13], t[14] = e[14], t[15] = e[15], t } function Lo(t, e, r) { var n = Math.sin(r), i = Math.cos(r), s = e[4], a = e[5], o = e[6], l = e[7], u = e[8], c = e[9], h = e[10], p = e[11]; return e !== t && (t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[12] = e[12], t[13] = e[13], t[14] = e[14], t[15] = e[15]), t[4] = s * i + u * n, t[5] = a * i + c * n, t[6] = o * i + h * n, t[7] = l * i + p * n, t[8] = u * i - s * n, t[9] = c * i - a * n, t[10] = h * i - o * n, t[11] = p * i - l * n, t } function Fo(t, e, r) { var n = Math.sin(r), i = Math.cos(r), s = e[0], a = e[1], o = e[2], l = e[3], u = e[8], c = e[9], h = e[10], p = e[11]; return e !== t && (t[4] = e[4], t[5] = e[5], t[6] = e[6], t[7] = e[7], t[12] = e[12], t[13] = e[13], t[14] = e[14], t[15] = e[15]), t[0] = s * i - u * n, t[1] = a * i - c * n, t[2] = o * i - h * n, t[3] = l * i - p * n, t[8] = s * n + u * i, t[9] = a * n + c * i, t[10] = o * n + h * i, t[11] = l * n + p * i, t } function Ro(t, e) { return t[0] = e[0], t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = e[1], t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = e[2], t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, t } function jo(t, e, r) { var n, i, s, a = r[0], o = r[1], l = r[2], u = Math.hypot(a, o, l); return u < Mo ? null : (a *= u = 1 / u, o *= u, l *= u, n = Math.sin(e), i = Math.cos(e), t[0] = a * a * (s = 1 - i) + i, t[1] = o * a * s + l * n, t[2] = l * a * s - o * n, t[3] = 0, t[4] = a * o * s - l * n, t[5] = o * o * s + i, t[6] = l * o * s + a * n, t[7] = 0, t[8] = a * l * s + o * n, t[9] = o * l * s - a * n, t[10] = l * l * s + i, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, t) } Math.hypot || (Math.hypot = function() { for (var t = 0, e = arguments.length; e--;) t += arguments[e] * arguments[e]; return Math.sqrt(t) }); var $o = Po; function Uo() { var t = new To(3); return To != Float32Array && (t[0] = 0, t[1] = 0, t[2] = 0), t } function Oo(t) { var e = new To(3); return e[0] = t[0], e[1] = t[1], e[2] = t[2], e } function qo(t) { return Math.hypot(t[0], t[1], t[2]) } function No(t, e, r) { var n = new To(3); return n[0] = t, n[1] = e, n[2] = r, n } function Go(t, e, r) { return t[0] = e[0] + r[0], t[1] = e[1] + r[1], t[2] = e[2] + r[2], t } function Zo(t, e, r) { return t[0] = e[0] - r[0], t[1] = e[1] - r[1], t[2] = e[2] - r[2], t } function Xo(t, e, r) { return t[0] = e[0] * r[0], t[1] = e[1] * r[1], t[2] = e[2] * r[2], t } function Ko(t, e, r) { return t[0] = Math.min(e[0], r[0]), t[1] = Math.min(e[1], r[1]), t[2] = Math.min(e[2], r[2]), t } function Yo(t, e, r) { return t[0] = Math.max(e[0], r[0]), t[1] = Math.max(e[1], r[1]), t[2] = Math.max(e[2], r[2]), t } function Ho(t, e, r) { return t[0] = e[0] * r, t[1] = e[1] * r, t[2] = e[2] * r, t } function Wo(t, e, r, n) { return t[0] = e[0] + r[0] * n, t[1] = e[1] + r[1] * n, t[2] = e[2] + r[2] * n, t } function Jo(t, e) { var r = e[0], n = e[1], i = e[2], s = r * r + n * n + i * i; return s > 0 && (s = 1 / Math.sqrt(s)), t[0] = e[0] * s, t[1] = e[1] * s, t[2] = e[2] * s, t } function Qo(t, e) { return t[0] * e[0] + t[1] * e[1] + t[2] * e[2] } function tl(t, e, r) { var n = e[0], i = e[1], s = e[2], a = r[0], o = r[1], l = r[2]; return t[0] = i * l - s * o, t[1] = s * a - n * l, t[2] = n * o - i * a, t } function el(t, e, r) { var n = e[0], i = e[1], s = e[2], a = r[3] * n + r[7] * i + r[11] * s + r[15]; return t[0] = (r[0] * n + r[4] * i + r[8] * s + r[12]) / (a = a || 1), t[1] = (r[1] * n + r[5] * i + r[9] * s + r[13]) / a, t[2] = (r[2] * n + r[6] * i + r[10] * s + r[14]) / a, t } function rl(t, e, r) { var n = r[0], i = r[1], s = r[2], a = e[0], o = e[1], l = e[2], u = i * l - s * o, c = s * a - n * l, h = n * o - i * a, p = i * h - s * c, f = s * u - n * h, d = n * c - i * u, y = 2 * r[3]; return c *= y, h *= y, f *= 2, d *= 2, t[0] = a + (u *= y) + (p *= 2), t[1] = o + c + f, t[2] = l + h + d, t } var nl, il = Zo, sl = Xo, al = qo; function ol(t, e, r) { return t[0] = e[0] * r, t[1] = e[1] * r, t[2] = e[2] * r, t[3] = e[3] * r, t } function ll(t, e) { var r = e[0], n = e[1], i = e[2], s = e[3], a = r * r + n * n + i * i + s * s; return a > 0 && (a = 1 / Math.sqrt(a)), t[0] = r * a, t[1] = n * a, t[2] = i * a, t[3] = s * a, t } function ul(t, e, r) { var n = e[0], i = e[1], s = e[2], a = e[3]; return t[0] = r[0] * n + r[4] * i + r[8] * s + r[12] * a, t[1] = r[1] * n + r[5] * i + r[9] * s + r[13] * a, t[2] = r[2] * n + r[6] * i + r[10] * s + r[14] * a, t[3] = r[3] * n + r[7] * i + r[11] * s + r[15] * a, t } function cl() { var t = new To(4); return To != Float32Array && (t[0] = 0, t[1] = 0, t[2] = 0), t[3] = 1, t } function hl(t) { return t[0] = 0, t[1] = 0, t[2] = 0, t[3] = 1, t } function pl(t, e, r) { r *= .5; var n = e[0], i = e[1], s = e[2], a = e[3], o = Math.sin(r), l = Math.cos(r); return t[0] = n * l + a * o, t[1] = i * l + s * o, t[2] = s * l - i * o, t[3] = a * l - n * o, t } function fl(t, e, r) { r *= .5; var n = e[0], i = e[1], s = e[2], a = e[3], o = Math.sin(r), l = Math.cos(r); return t[0] = n * l - s * o, t[1] = i * l + a * o, t[2] = s * l + n * o, t[3] = a * l - i * o, t } Uo(), nl = new To(4), To != Float32Array && (nl[0] = 0, nl[1] = 0, nl[2] = 0, nl[3] = 0); var dl = ll; Uo(), No(1, 0, 0), No(0, 1, 0), cl(), cl(), zo(); const yl = na([{ type: "Float32", name: "a_globe_pos", components: 3 }, { type: "Float32", name: "a_uv", components: 2 }]), { members: ml } = yl, gl = na([{ name: "a_pos_3", components: 3, type: "Int16" }]); var xl = na([{ name: "a_pos", type: "Int16", components: 2 }]); class vl { constructor(t, e) { this.pos = t, this.dir = e; } intersectsPlane(t, e, r) { const n = Qo(e, this.dir); if (Math.abs(n) < 1e-6) return !1; const i = ((t[0] - this.pos[0]) * e[0] + (t[1] - this.pos[1]) * e[1] + (t[2] - this.pos[2]) * e[2]) / n; return r[0] = this.pos[0] + this.dir[0] * i, r[1] = this.pos[1] + this.dir[1] * i, r[2] = this.pos[2] + this.dir[2] * i, !0 } closestPointOnSphere(t, e, r) { if (function(t, e) { var r = t[0], n = t[1], i = t[2], s = e[0], a = e[1], o = e[2]; return Math.abs(r - s) <= Mo * Math.max(1, Math.abs(r), Math.abs(s)) && Math.abs(n - a) <= Mo * Math.max(1, Math.abs(n), Math.abs(a)) && Math.abs(i - o) <= Mo * Math.max(1, Math.abs(i), Math.abs(o)) }(this.pos, t) || 0 === e) return r[0] = r[1] = r[2] = 0, !1; const [n, i, s] = this.dir, a = this.pos[0] - t[0], o = this.pos[1] - t[1], l = this.pos[2] - t[2], u = n * n + i * i + s * s, c = 2 * (a * n + o * i + l * s), h = c * c - 4 * u * (a * a + o * o + l * l - e * e); if (h < 0) { const t = Math.max(-c / 2, 0), u = a + n * t, h = o + i * t, p = l + s * t, f = Math.hypot(u, h, p); return r[0] = u * e / f, r[1] = h * e / f, r[2] = p * e / f, !1 } { const t = (-c - Math.sqrt(h)) / (2 * u); if (t < 0) { const t = Math.hypot(a, o, l); return r[0] = a * e / t, r[1] = o * e / t, r[2] = l * e / t, !1 } return r[0] = a + n * t, r[1] = o + i * t, r[2] = l + s * t, !0 } } } class bl { constructor(t, e, r, n, i) { this.TL = t, this.TR = e, this.BR = r, this.BL = n, this.horizon = i; } static fromInvProjectionMatrix(t, e, r) { const n = [-1, 1, 1], i = [1, 1, 1], s = [1, -1, 1], a = [-1, -1, 1], o = el(n, n, t), l = el(i, i, t), u = el(s, s, t), c = el(a, a, t); return new bl(o, l, u, c, e / r) } } class wl { constructor(t, e) { this.points = t, this.planes = e; } static fromInvProjectionMatrix(t, e, r, n) { const i = Math.pow(2, r), s = [ [-1, 1, -1, 1], [1, 1, -1, 1], [1, -1, -1, 1], [-1, -1, -1, 1], [-1, 1, 1, 1], [1, 1, 1, 1], [1, -1, 1, 1], [-1, -1, 1, 1] ].map((r => { const s = ul([], r, t), a = 1 / s[3] / e * i; return function(t, e, r) { return t[0] = e[0] * r[0], t[1] = e[1] * r[1], t[2] = e[2] * r[2], t[3] = e[3] * r[3], t }(s, s, [a, a, n ? 1 / s[3] : a, a]) })), a = [ [0, 1, 2], [6, 5, 4], [0, 3, 7], [2, 1, 5], [3, 2, 6], [0, 4, 5] ].map((t => { const e = Jo([], tl([], il([], s[t[0]], s[t[1]]), il([], s[t[2]], s[t[1]]))), r = -Qo(e, s[t[1]]); return e.concat(r) })); return new wl(s, a) } } class _l { static fromPoints(t) { const e = [1 / 0, 1 / 0, 1 / 0], r = [-1 / 0, -1 / 0, -1 / 0]; for (const n of t) Ko(e, e, n), Yo(r, r, n); return new _l(e, r) } static applyTransform(t, e) { const r = t.getCorners(); for (let t = 0; t < r.length; ++t) el(r[t], r[t], e); return _l.fromPoints(r) } constructor(t, e) { this.min = t, this.max = e, this.center = Ho([], Go([], this.min, this.max), .5); } quadrant(t) { const e = [t % 2 == 0, t < 2], r = Oo(this.min), n = Oo(this.max); for (let t = 0; t < e.length; t++) r[t] = e[t] ? this.min[t] : this.center[t], n[t] = e[t] ? this.center[t] : this.max[t]; return n[2] = this.max[2], new _l(r, n) } distanceX(t) { return Math.max(Math.min(this.max[0], t[0]), this.min[0]) - t[0] } distanceY(t) { return Math.max(Math.min(this.max[1], t[1]), this.min[1]) - t[1] } distanceZ(t) { return Math.max(Math.min(this.max[2], t[2]), this.min[2]) - t[2] } getCorners() { const t = this.min, e = this.max; return [ [t[0], t[1], t[2]], [e[0], t[1], t[2]], [e[0], e[1], t[2]], [t[0], e[1], t[2]], [t[0], t[1], e[2]], [e[0], t[1], e[2]], [e[0], e[1], e[2]], [t[0], e[1], e[2]] ] } intersects(t) { const e = this.getCorners(); let r = !0; for (let n = 0; n < t.planes.length; n++) { const i = t.planes[n]; let s = 0; for (let t = 0; t < e.length; t++) s += Qo(i, e[t]) + i[3] >= 0; if (0 === s) return 0; s !== e.length && (r = !1); } if (r) return 2; for (let e = 0; e < 3; e++) { let r = Number.MAX_VALUE, n = -Number.MAX_VALUE; for (let i = 0; i < t.points.length; i++) { const s = t.points[i][e] - this.min[e]; r = Math.min(r, s), n = Math.max(n, s); } if (n < 0 || r > this.max[e] - this.min[e]) return 0 } return 1 } } const Al = ko / Math.PI / 2, Sl = 64, kl = [Sl, 32, 16], Il = -Al, Ml = Al, Tl = [new _l([Il, Il, Il], [Ml, Ml, Ml]), new _l([Il, Il, Il], [0, 0, Ml]), new _l([0, Il, Il], [Ml, 0, Ml]), new _l([Il, 0, Il], [0, Ml, Ml]), new _l([0, 0, Il], [Ml, Ml, Ml])]; function zl(t) { return t * Al / tu } function Bl(t, e, r, n = !0) { const i = Ho([], t._camera.position, t.worldSize), s = [e, r, 1, 1]; ul(s, s, t.pixelMatrixInverse), ol(s, s, 1 / s[3]); const a = Jo([], il([], s, i)), o = t.globeMatrix, l = [o[12], o[13], o[14]], u = il([], l, i), c = qo(u), h = Jo([], u), p = t.worldSize / (2 * Math.PI), f = Qo(h, a), d = Math.asin(p / c); if (d < Math.acos(f)) { if (!n) return null; const t = [], e = []; Ho(t, a, c / f), Jo(e, il(e, t, u)), Jo(a, Go(a, u, Ho(a, e, Math.tan(d) * c))); } const y = []; new vl(i, a).closestPointOnSphere(l, p, y); const m = Jo([], Y(o, 0)), g = Jo([], Y(o, 1)), x = Jo([], Y(o, 2)), b = Qo(m, y), w = Qo(g, y), _ = Qo(x, y), A = v(Math.asin(-w / p)); let k = v(Math.atan2(b, _)); k = t.center.lng + function(t, e) { const r = (e - t + 180) % 360 - 180; return r < -180 ? r + 360 : r }(t.center.lng, k); const I = iu(k), M = S(su(A), 0, 1); return new pu(I, M) } class El { constructor(t, e, r) { this.a = il([], t, r), this.b = il([], e, r), this.center = r; const n = Jo([], this.a), i = Jo([], this.b); this.angle = Math.acos(Qo(n, i)); } } function Cl(t, e) { if (0 === t.angle) return null; let r; return r = 0 === t.a[e] ? 1 / t.angle * .5 * Math.PI : 1 / t.angle * Math.atan(t.b[e] / t.a[e] / Math.sin(t.angle) - 1 / Math.tan(t.angle)), r < 0 || r > 1 ? null : function(t, e, r, n) { const i = Math.sin(r); return t * (Math.sin((1 - n) * r) / i) + e * (Math.sin(n * r) / i) }(t.a[e], t.b[e], t.angle, S(r, 0, 1)) + t.center[e] } function Pl(t) { if (t.z <= 1) return Tl[t.z + 2 * t.y + t.x]; const e = jl(Rl(t)); return _l.fromPoints(e) } function Dl(t, e, r) { return Ho(t, t, 1 - r), Wo(t, t, e, r) } function Vl(t, e) { const r = Kl(e.zoom); if (0 === r) return Pl(t); const n = Rl(t), i = jl(n), s = iu(n.getWest()) * e.worldSize, a = iu(n.getEast()) * e.worldSize, o = su(n.getNorth()) * e.worldSize, l = su(n.getSouth()) * e.worldSize, u = [s, o, 0], c = [a, o, 0], h = [s, l, 0], p = [a, l, 0], f = Co([], e.globeMatrix); return el(u, u, f), el(c, c, f), el(h, h, f), el(p, p, f), i[0] = Dl(i[0], h, r), i[1] = Dl(i[1], p, r), i[2] = Dl(i[2], c, r), i[3] = Dl(i[3], u, r), _l.fromPoints(i) } function Ll(t, e, r) { for (const n of t) el(n, n, e), Ho(n, n, r); } function Fl(t, e, r) { const n = e / t.worldSize, i = t.globeMatrix; if (r.z <= 1) { const t = Pl(r).getCorners(); return Ll(t, i, n), _l.fromPoints(t) } const s = Rl(r), a = jl(s); Ll(a, i, n); const o = Number.MAX_VALUE, l = [-o, -o, -o], u = [o, o, o]; if (s.contains(t.center)) { for (const t of a) Ko(u, u, t), Yo(l, l, t); l[2] = 0; const e = t.point, r = [e.x * n, e.y * n, 0]; return Ko(u, u, r), Yo(l, l, r), new _l(u, l) } const c = [i[12] * n, i[13] * n, i[14] * n], h = s.getCenter(), p = S(t.center.lat, -cu, cu), f = S(h.lat, -cu, cu), d = iu(t.center.lng), y = su(p); let m = d - iu(h.lng); const g = y - su(f); m > .5 ? m -= 1 : m < -.5 && (m += 1); let v = 0; Math.abs(m) > Math.abs(g) ? v = m >= 0 ? 1 : 3 : (v = g >= 0 ? 0 : 2, Wo(c, c, [i[4] * n, i[5] * n, i[6] * n], -Math.sin(x(g >= 0 ? s.getSouth() : s.getNorth())) * Al)); const b = a[v], w = a[(v + 1) % 4], _ = new El(b, w, c), A = [Cl(_, 0) || b[0], Cl(_, 1) || b[1], Cl(_, 2) || b[2]], k = Kl(t.zoom); if (k > 0) { const n = function({ x: t, y: e, z: r }, n, i, s, a) { const o = 1 / (1 << r); let l = t * o, u = l + o, c = e * o, h = c + o, p = 0; const f = (l + u) / 2 - s; return f > .5 ? p = -1 : f < -.5 && (p = 1), l = ((l + p) * n - (s *= n)) * i + s, u = ((u + p) * n - s) * i + s, c = (c * n - (a *= n)) * i + a, h = (h * n - a) * i + a, [ [l, h, 0], [u, h, 0], [u, c, 0], [l, c, 0] ] }(r, e, t._pixelsPerMercatorPixel, d, y); for (let t = 0; t < a.length; t++) Dl(a[t], n[t], k); const i = Go([], n[v], n[(v + 1) % 4]); Ho(i, i, .5), Dl(A, i, k); } for (const t of a) Ko(u, u, t), Yo(l, l, t); return u[2] = Math.min(b[2], w[2]), Ko(u, u, A), Yo(l, l, A), new _l(u, l) } function Rl({ x: t, y: e, z: r }) { const n = 1 / (1 << r), i = new ru(ou(t * n), lu((e + 1) * n)), s = new ru(ou((t + 1) * n), lu(e * n)); return new Io(i, s) } function jl(t) { const e = x(t.getNorth()), r = x(t.getSouth()), n = Math.cos(e), i = Math.cos(r), s = Math.sin(e), a = Math.sin(r), o = t.getWest(), l = t.getEast(); return [$l(i, a, o), $l(i, a, l), $l(n, s, l), $l(n, s, o)] } function $l(t, e, r, n = Al) { return r = x(r), [t * Math.sin(r) * n, -e * n, t * Math.cos(r) * n] } function Ul(t, e, r) { return $l(Math.cos(x(t)), Math.sin(x(t)), e, r) } function Ol(t, e, r, n) { const i = 1 << r.z, s = (t / ko + r.x) / i; return Ul(lu((e / ko + r.y) / i), ou(s), n) } function ql({ min: t, max: e }) { return 16383 / Math.max(e[0] - t[0], e[1] - t[1], e[2] - t[2]) } const Nl = new Float64Array(16); function Gl(t) { const e = ql(t), r = Ro(Nl, [e, e, e]); return Do(r, r, ((n = [])[0] = -(i = t.min)[0], n[1] = -i[1], n[2] = -i[2], n)); var n, i; } function Zl(t) { const e = (n = t.min, (r = Nl)[0] = 1, r[1] = 0, r[2] = 0, r[3] = 0, r[4] = 0, r[5] = 1, r[6] = 0, r[7] = 0, r[8] = 0, r[9] = 0, r[10] = 1, r[11] = 0, r[12] = n[0], r[13] = n[1], r[14] = n[2], r[15] = 1, r); var r, n; const i = 1 / ql(t); return Vo(e, e, [i, i, i]) } function Xl(t, e, r, n, i) { const s = function(t) { const e = ko / (2 * Math.PI); return t / (2 * Math.PI) / e }(r), a = [t, e, -r / (2 * Math.PI)], o = Eo(new Float64Array(16)); return Do(o, o, a), Vo(o, o, [s, s, s]), Lo(o, o, x(-i)), Fo(o, o, x(-n)), o } function Kl(t) { return k(5, 6, t) } function Yl(t, e) { const r = Ul(e.lat, e.lng), n = function(t) { const e = Ul(t._center.lat, t._center.lng); let r = tl([], No(0, 1, 0), e); const n = jo([], -t.angle, e); r = el(r, r, n), jo(n, -t._pitch, r); const i = Jo([], e); return Ho(i, i, zl(t.cameraToCenterDistance / t.pixelsPerMeter)), el(i, i, n), Go([], e, i) }(t); return a = (i = Zo([], n, r))[0], o = i[1], l = i[2], u = (s = r)[0], c = s[1], h = s[2], f = (p = Math.sqrt(a * a + o * o + l * l) * Math.sqrt(u * u + c * c + h * h)) && Qo(i, s) / p, Math.acos(Math.min(Math.max(f, -1), 1)); var i, s, a, o, l, u, c, h, p, f; } function Hl(t, e) { return Yl(t, e) > Math.PI / 2 * 1.01 } const Wl = x(85), Jl = Math.cos(Wl), Ql = Math.sin(Wl), tu = 6371008.8, eu = 2 * Math.PI * tu; class ru { constructor(t, e) { if (isNaN(t) || isNaN(e)) throw new Error(`Invalid LngLat object: (${t}, ${e})`); if (this.lng = +t, this.lat = +e, this.lat > 90 || this.lat < -90) throw new Error("Invalid LngLat latitude value: must be between -90 and 90") } wrap() { return new ru(I(this.lng, -180, 180), this.lat) } toArray() { return [this.lng, this.lat] } toString() { return `LngLat(${this.lng}, ${this.lat})` } distanceTo(t) { const e = Math.PI / 180, r = this.lat * e, n = t.lat * e, i = Math.sin(r) * Math.sin(n) + Math.cos(r) * Math.cos(n) * Math.cos((t.lng - this.lng) * e); return tu * Math.acos(Math.min(i, 1)) } toBounds(t = 0) { const e = 360 * t / 40075017, r = e / Math.cos(Math.PI / 180 * this.lat); return new Io(new ru(this.lng - r, this.lat - e), new ru(this.lng + r, this.lat + e)) } toEcef(t) { const e = zl(t); return Ul(this.lat, this.lng, Al + e) } static convert(t) { if (t instanceof ru) return t; if (Array.isArray(t) && (2 === t.length || 3 === t.length)) return new ru(Number(t[0]), Number(t[1])); if (!Array.isArray(t) && "object" == typeof t && null !== t) return new ru(Number("lng" in t ? t.lng : t.lon), Number(t.lat)); throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]") } } function nu(t) { return eu * Math.cos(t * Math.PI / 180) } function iu(t) { return (180 + t) / 360 } function su(t) { return (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + t * Math.PI / 360))) / 360 } function au(t, e) { return t / nu(e) } function ou(t) { return 360 * t - 180 } function lu(t) { return 360 / Math.PI * Math.atan(Math.exp((180 - 360 * t) * Math.PI / 180)) - 90 } function uu(t, e) { return t * nu(lu(e)) } const cu = 85.051129; function hu(t) { return 1 / Math.cos(t * Math.PI / 180) } class pu { constructor(t, e, r = 0) { this.x = +t, this.y = +e, this.z = +r; } static fromLngLat(t, e = 0) { const r = ru.convert(t); return new pu(iu(r.lng), su(r.lat), au(e, r.lat)) } toLngLat() { return new ru(ou(this.x), lu(this.y)) } toAltitude() { return uu(this.z, this.y) } meterInMercatorCoordinateUnits() { return 1 / eu * hu(lu(this.y)) } } function fu(t, e, r, n, i, s, a, o, l) { const u = (e + n) / 2, c = (r + i) / 2, h = new d(u, c); o(h), function(t, e, r, n, i, s) { const a = r - i, o = n - s; return Math.abs((n - e) * a - (r - t) * o) / Math.hypot(a, o) }(h.x, h.y, s.x, s.y, a.x, a.y) >= l ? (fu(t, e, r, u, c, s, h, o, l), fu(t, u, c, n, i, h, a, o, l)) : t.push(a); } function du(t, e, r) { let n = t[0], i = n.x, s = n.y; e(n); const a = [n]; for (let o = 1; o < t.length; o++) { const l = t[o], { x: u, y: c } = l; e(l), fu(a, i, s, u, c, n, l, e, r), i = u, s = c, n = l; } return a } function yu(t, e, r, n) { if (n(e, r)) { const i = e.add(r)._mult(.5); yu(t, e, i, n), yu(t, i, r, n); } else t.push(r); } function mu(t, e) { let r = t[0]; const n = [r]; for (let i = 1; i < t.length; i++) { const s = t[i]; yu(n, r, s, e), r = s; } return n } const gu = Math.pow(2, 14) - 1, xu = -gu - 1; function vu(t, e) { const r = Math.round(t.x * e), n = Math.round(t.y * e); return t.x = S(r, xu, gu), t.y = S(n, xu, gu), (r < t.x || r > t.x + 1 || n < t.y || n > t.y + 1) && U("Geometry exceeds allowed extent, reduce your vector tile buffer size"), t } function bu(t, e, r) { const n = t.loadGeometry(), i = t.extent, s = ko / i; if (e && r && r.projection.isReprojectedInTileSpace) { const s = 1 << e.z, { scale: a, x: o, y: l, projection: u } = r, c = t => { const r = ou((e.x + t.x / i) / s), n = lu((e.y + t.y / i) / s), c = u.project(r, n); t.x = (c.x * a - o) * i, t.y = (c.y * a - l) * i; }; for (let e = 0; e < n.length; e++) if (1 !== t.type) n[e] = du(n[e], c, 1); else { const t = []; for (const r of n[e]) r.x < 0 || r.x >= i || r.y < 0 || r.y >= i || (c(r), t.push(r)); n[e] = t; } } for (const t of n) for (const e of t) vu(e, s); return n } function wu(t, e) { return { type: t.type, id: t.id, properties: t.properties, geometry: e ? bu(t) : [] } } function _u(t, e, r, n, i) { t.emplaceBack(2 * e + (n + 1) / 2, 2 * r + (i + 1) / 2); } function Au(t, e, r) { const n = 16384; t.emplaceBack(e.x, e.y, e.z, r[0] * n, r[1] * n, r[2] * n); } class Su { constructor(t) { this.zoom = t.zoom, this.overscaling = t.overscaling, this.layers = t.layers, this.layerIds = this.layers.map((t => t.id)), this.index = t.index, this.hasPattern = !1, this.projection = t.projection, this.layoutVertexArray = new sa, this.indexArray = new wa, this.segments = new So, this.programConfigurations = new fo(t.layers, t.zoom), this.stateDependentLayerIds = this.layers.filter((t => t.isStateDependent())).map((t => t.id)); } populate(t, e, r, n) { const i = this.layers[0], s = []; let a = null; "circle" === i.type && (a = i.layout.get("circle-sort-key")); for (const { feature: e, id: i, index: o, sourceLayerIndex: l } of t) { const t = this.layers[0]._featureFilter.needGeometry, u = wu(e, t); if (!this.layers[0]._featureFilter.filter(new $s(this.zoom), u, r)) continue; const c = a ? a.evaluate(u, {}, r) : void 0, h = { id: i, properties: e.properties, type: e.type, sourceLayerIndex: l, index: o, geometry: t ? u.geometry : bu(e, r, n), patterns: {}, sortKey: c }; s.push(h); } a && s.sort(((t, e) => t.sortKey - e.sortKey)); let o = null; "globe" === n.projection.name && (this.globeExtVertexArray = new pa, o = n.projection); for (const n of s) { const { geometry: i, index: s, sourceLayerIndex: a } = n, l = t[s].feature; this.addFeature(n, i, s, e.availableImages, r, o), e.featureIndex.insert(l, i, s, a, this.index); } } update(t, e, r, n) { this.stateDependentLayers.length && this.programConfigurations.updatePaintArrays(t, e, this.stateDependentLayers, r, n); } isEmpty() { return 0 === this.layoutVertexArray.length } uploadPending() { return !this.uploaded || this.programConfigurations.needsUpload } upload(t) { this.uploaded || (this.layoutVertexBuffer = t.createVertexBuffer(this.layoutVertexArray, _o.members), this.indexBuffer = t.createIndexBuffer(this.indexArray), this.globeExtVertexArray && (this.globeExtVertexBuffer = t.createVertexBuffer(this.globeExtVertexArray, Ao.members))), this.programConfigurations.upload(t), this.uploaded = !0; } destroy() { this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.programConfigurations.destroy(), this.segments.destroy(), this.globeExtVertexBuffer && this.globeExtVertexBuffer.destroy()); } addFeature(t, e, r, n, i, s) { for (const r of e) for (const e of r) { const r = e.x, n = e.y; if (r < 0 || r >= ko || n < 0 || n >= ko) continue; if (s) { const t = s.projectTilePoint(r, n, i), e = s.upVector(i, r, n), a = this.globeExtVertexArray; Au(a, t, e), Au(a, t, e), Au(a, t, e), Au(a, t, e); } const a = this.segments.prepareSegment(4, this.layoutVertexArray, this.indexArray, t.sortKey), o = a.vertexLength; _u(this.layoutVertexArray, r, n, -1, -1), _u(this.layoutVertexArray, r, n, 1, -1), _u(this.layoutVertexArray, r, n, 1, 1), _u(this.layoutVertexArray, r, n, -1, 1), this.indexArray.emplaceBack(o, o + 1, o + 2), this.indexArray.emplaceBack(o, o + 2, o + 3), a.vertexLength += 4, a.primitiveLength += 2; } this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, t, r, {}, n, i); } } function ku(t, e) { for (let r = 0; r < t.length; r++) if (Du(e, t[r])) return !0; for (let r = 0; r < e.length; r++) if (Du(t, e[r])) return !0; return !!zu(t, e) } function Iu(t, e, r) { return !!Du(t, e) || !!Eu(e, t, r) } function Mu(t, e) { if (1 === t.length) return Pu(e, t[0]); for (let r = 0; r < e.length; r++) { const n = e[r]; for (let e = 0; e < n.length; e++) if (Du(t, n[e])) return !0 } for (let r = 0; r < t.length; r++) if (Pu(e, t[r])) return !0; for (let r = 0; r < e.length; r++) if (zu(t, e[r])) return !0; return !1 } function Tu(t, e, r) { if (t.length > 1) { if (zu(t, e)) return !0; for (let n = 0; n < e.length; n++) if (Eu(e[n], t, r)) return !0 } for (let n = 0; n < t.length; n++) if (Eu(t[n], e, r)) return !0; return !1 } function zu(t, e) { if (0 === t.length || 0 === e.length) return !1; for (let r = 0; r < t.length - 1; r++) { const n = t[r], i = t[r + 1]; for (let t = 0; t < e.length - 1; t++) if (Bu(n, i, e[t], e[t + 1])) return !0 } return !1 } function Bu(t, e, r, n) { return O(t, r, n) !== O(e, r, n) && O(t, e, r) !== O(t, e, n) } function Eu(t, e, r) { const n = r * r; if (1 === e.length) return t.distSqr(e[0]) < n; for (let r = 1; r < e.length; r++) if (Cu(t, e[r - 1], e[r]) < n) return !0; return !1 } function Cu(t, e, r) { const n = e.distSqr(r); if (0 === n) return t.distSqr(e); const i = ((t.x - e.x) * (r.x - e.x) + (t.y - e.y) * (r.y - e.y)) / n; return t.distSqr(i < 0 ? e : i > 1 ? r : r.sub(e)._mult(i)._add(e)) } function Pu(t, e) { let r, n, i, s = !1; for (let a = 0; a < t.length; a++) { r = t[a]; for (let t = 0, a = r.length - 1; t < r.length; a = t++) n = r[t], i = r[a], n.y > e.y != i.y > e.y && e.x < (i.x - n.x) * (e.y - n.y) / (i.y - n.y) + n.x && (s = !s); } return s } function Du(t, e) { let r = !1; for (let n = 0, i = t.length - 1; n < t.length; i = n++) { const s = t[n], a = t[i]; s.y > e.y != a.y > e.y && e.x < (a.x - s.x) * (e.y - s.y) / (a.y - s.y) + s.x && (r = !r); } return r } function Vu(t, e, r, n, i) { for (const s of t) if (e <= s.x && r <= s.y && n >= s.x && i >= s.y) return !0; const s = [new d(e, r), new d(e, i), new d(n, i), new d(n, r)]; if (t.length > 2) for (const e of s) if (Du(t, e)) return !0; for (let e = 0; e < t.length - 1; e++) if (Lu(t[e], t[e + 1], s)) return !0; return !1 } function Lu(t, e, r) { const n = r[0], i = r[2]; if (t.x < n.x && e.x < n.x || t.x > i.x && e.x > i.x || t.y < n.y && e.y < n.y || t.y > i.y && e.y > i.y) return !1; const s = O(t, e, r[0]); return s !== O(t, e, r[1]) || s !== O(t, e, r[2]) || s !== O(t, e, r[3]) } function Fu(t, e, r) { const n = e.paint.get(t).value; return "constant" === n.kind ? n.value : r.programConfigurations.get(e.id).getMaxValue(t) } function Ru(t) { return Math.sqrt(t[0] * t[0] + t[1] * t[1]) } function ju(t, e, r, n, i) { if (!e[0] && !e[1]) return t; const s = d.convert(e)._mult(i); "viewport" === r && s._rotate(-n); const a = []; for (let e = 0; e < t.length; e++) a.push(t[e].sub(s)); return a } function $u(t, e, r, n) { const i = d.convert(t)._mult(n); return "viewport" === e && i._rotate(-r), i } Oi(Su, "CircleBucket", { omit: ["layers"] }); const Uu = new Js({ "circle-sort-key": new Hs(Ht.layout_circle["circle-sort-key"]) }); var Ou = { paint: new Js({ "circle-radius": new Hs(Ht.paint_circle["circle-radius"]), "circle-color": new Hs(Ht.paint_circle["circle-color"]), "circle-blur": new Hs(Ht.paint_circle["circle-blur"]), "circle-opacity": new Hs(Ht.paint_circle["circle-opacity"]), "circle-translate": new Ys(Ht.paint_circle["circle-translate"]), "circle-translate-anchor": new Ys(Ht.paint_circle["circle-translate-anchor"]), "circle-pitch-scale": new Ys(Ht.paint_circle["circle-pitch-scale"]), "circle-pitch-alignment": new Ys(Ht.paint_circle["circle-pitch-alignment"]), "circle-stroke-width": new Hs(Ht.paint_circle["circle-stroke-width"]), "circle-stroke-color": new Hs(Ht.paint_circle["circle-stroke-color"]), "circle-stroke-opacity": new Hs(Ht.paint_circle["circle-stroke-opacity"]) }), layout: Uu }; function qu(t, e, r, n, i, s, a, o, l) { if (s && t.queryGeometry.isAboveHorizon) return !1; s && (l *= t.pixelToTileUnitsFactor); const u = t.tileID.canonical, c = r.projection.upVectorScale(u, r.center.lat, r.worldSize).metersToTile; for (const h of e) for (const e of h) { const h = e.add(o), p = i && r.elevation ? r.elevation.exaggeration() * i.getElevationAt(h.x, h.y, !0) : 0, f = r.projection.projectTilePoint(h.x, h.y, u); if (p > 0) { const t = r.projection.upVector(u, h.x, h.y); f.x += t[0] * c * p, f.y += t[1] * c * p, f.z += t[2] * c * p; } const d = s ? h : Nu(f.x, f.y, f.z, n), y = s ? t.tilespaceRays.map((t => Xu(t, p))) : t.queryGeometry.screenGeometry, m = ul([], [f.x, f.y, f.z, 1], n); if (!a && s ? l *= m[3] / r.cameraToCenterDistance : a && !s && (l *= r.cameraToCenterDistance / m[3]), s) { const t = lu((e.y / ko + u.y) / (1 << u.z)); l /= r.projection.pixelsPerMeter(t, 1) / au(1, t); } if (Iu(y, d, l)) return !0 } return !1 } function Nu(t, e, r, n) { const i = ul([], [t, e, r, 1], n); return new d(i[0] / i[3], i[1] / i[3]) } const Gu = No(0, 0, 0), Zu = No(0, 0, 1); function Xu(t, e) { const r = Uo(); return Gu[2] = e, t.intersectsPlane(Gu, Zu, r), new d(r[0], r[1]) } class Ku extends Su {} function Yu(t, { width: e, height: r }, n, i) { if (i) { if (i instanceof Uint8ClampedArray) i = new Uint8Array(i.buffer); else if (i.length !== e * r * n) throw new RangeError("mismatched image size") } else i = new Uint8Array(e * r * n); return t.width = e, t.height = r, t.data = i, t } function Hu(t, e, r) { const { width: n, height: i } = e; n === t.width && i === t.height || (Wu(t, e, { x: 0, y: 0 }, { x: 0, y: 0 }, { width: Math.min(t.width, n), height: Math.min(t.height, i) }, r), t.width = n, t.height = i, t.data = e.data); } function Wu(t, e, r, n, i, s) { if (0 === i.width || 0 === i.height) return e; if (i.width > t.width || i.height > t.height || r.x > t.width - i.width || r.y > t.height - i.height) throw new RangeError("out of range source coordinates for image copy"); if (i.width > e.width || i.height > e.height || n.x > e.width - i.width || n.y > e.height - i.height) throw new RangeError("out of range destination coordinates for image copy"); const a = t.data, o = e.data; for (let l = 0; l < i.height; l++) { const u = ((r.y + l) * t.width + r.x) * s, c = ((n.y + l) * e.width + n.x) * s; for (let t = 0; t < i.width * s; t++) o[c + t] = a[u + t]; } return e } Oi(Ku, "HeatmapBucket", { omit: ["layers"] }); class Ju { constructor(t, e) { Yu(this, t, 1, e); } resize(t) { Hu(this, new Ju(t), 1); } clone() { return new Ju({ width: this.width, height: this.height }, new Uint8Array(this.data)) } static copy(t, e, r, n, i) { Wu(t, e, r, n, i, 1); } } class Qu { constructor(t, e) { Yu(this, t, 4, e); } resize(t) { Hu(this, new Qu(t), 4); } replace(t, e) { e ? this.data.set(t) : this.data = t instanceof Uint8ClampedArray ? new Uint8Array(t.buffer) : t; } clone() { return new Qu({ width: this.width, height: this.height }, new Uint8Array(this.data)) } static copy(t, e, r, n, i) { Wu(t, e, r, n, i, 4); } } Oi(Ju, "AlphaImage"), Oi(Qu, "RGBAImage"); var tc = { paint: new Js({ "heatmap-radius": new Hs(Ht.paint_heatmap["heatmap-radius"]), "heatmap-weight": new Hs(Ht.paint_heatmap["heatmap-weight"]), "heatmap-intensity": new Ys(Ht.paint_heatmap["heatmap-intensity"]), "heatmap-color": new Ws(Ht.paint_heatmap["heatmap-color"]), "heatmap-opacity": new Ys(Ht.paint_heatmap["heatmap-opacity"]) }) }; function ec(t) { const e = {}, r = t.resolution || 256, n = t.clips ? t.clips.length : 1, i = t.image || new Qu({ width: r, height: n }), s = (r, n, s) => { e[t.evaluationKey] = s; const a = t.expression.evaluate(e); i.data[r + n + 0] = Math.floor(255 * a.r / a.a), i.data[r + n + 1] = Math.floor(255 * a.g / a.a), i.data[r + n + 2] = Math.floor(255 * a.b / a.a), i.data[r + n + 3] = Math.floor(255 * a.a); }; if (t.clips) for (let e = 0, i = 0; e < n; ++e, i += 4 * r) for (let n = 0, a = 0; n < r; n++, a += 4) { const o = n / (r - 1), { start: l, end: u } = t.clips[e]; s(i, a, l * (1 - o) + u * o); } else for (let t = 0, e = 0; t < r; t++, e += 4) s(0, e, t / (r - 1)); return i } var rc = { paint: new Js({ "hillshade-illumination-direction": new Ys(Ht.paint_hillshade["hillshade-illumination-direction"]), "hillshade-illumination-anchor": new Ys(Ht.paint_hillshade["hillshade-illumination-anchor"]), "hillshade-exaggeration": new Ys(Ht.paint_hillshade["hillshade-exaggeration"]), "hillshade-shadow-color": new Ys(Ht.paint_hillshade["hillshade-shadow-color"]), "hillshade-highlight-color": new Ys(Ht.paint_hillshade["hillshade-highlight-color"]), "hillshade-accent-color": new Ys(Ht.paint_hillshade["hillshade-accent-color"]) }) }; const nc = na([{ name: "a_pos", components: 2, type: "Int16" }], 4), { members: ic } = nc; var sc = {}; function ac(t, e, r) { r = r || 2; var n, i, s, a, o, l, u, c = e && e.length, h = c ? e[0] * r : t.length, p = oc(t, 0, h, r, !0), f = []; if (!p || p.next === p.prev) return f; if (c && (p = function(t, e, r, n) { var i, s, a, o = []; for (i = 0, s = e.length; i < s; i++)(a = oc(t, e[i] * n, i < s - 1 ? e[i + 1] * n : t.length, n, !1)) === a.next && (a.steiner = !0), o.push(xc(a)); for (o.sort(dc), i = 0; i < o.length; i++) r = yc(o[i], r); return r }(t, e, p, r)), t.length > 80 * r) { n = s = t[0], i = a = t[1]; for (var d = r; d < h; d += r)(o = t[d]) < n && (n = o), (l = t[d + 1]) < i && (i = l), o > s && (s = o), l > a && (a = l); u = 0 !== (u = Math.max(s - n, a - i)) ? 32767 / u : 0; } return uc(p, f, r, n, i, u, 0), f } function oc(t, e, r, n, i) { var s, a; if (i === Ec(t, e, r, n) > 0) for (s = e; s < r; s += n) a = Tc(s, t[s], t[s + 1], a); else for (s = r - n; s >= e; s -= n) a = Tc(s, t[s], t[s + 1], a); return a && _c(a, a.next) && (zc(a), a = a.next), a } function lc(t, e) { if (!t) return t; e || (e = t); var r, n = t; do { if (r = !1, n.steiner || !_c(n, n.next) && 0 !== wc(n.prev, n, n.next)) n = n.next; else { if (zc(n), (n = e = n.prev) === n.next) break; r = !0; } } while (r || n !== e); return e } function uc(t, e, r, n, i, s, a) { if (t) { !a && s && function(t, e, r, n) { var i = t; do { 0 === i.z && (i.z = gc(i.x, i.y, e, r, n)), i.prevZ = i.prev, i.nextZ = i.next, i = i.next; } while (i !== t); i.prevZ.nextZ = null, i.prevZ = null, function(t) { var e, r, n, i, s, a, o, l, u = 1; do { for (r = t, t = null, s = null, a = 0; r;) { for (a++, n = r, o = 0, e = 0; e < u && (o++, n = n.nextZ); e++); for (l = u; o > 0 || l > 0 && n;) 0 !== o && (0 === l || !n || r.z <= n.z) ? (i = r, r = r.nextZ, o--) : (i = n, n = n.nextZ, l--), s ? s.nextZ = i : t = i, i.prevZ = s, s = i; r = n; } s.nextZ = null, u *= 2; } while (a > 1) }(i); }(t, n, i, s); for (var o, l, u = t; t.prev !== t.next;) if (o = t.prev, l = t.next, s ? hc(t, n, i, s) : cc(t)) e.push(o.i / r | 0), e.push(t.i / r | 0), e.push(l.i / r | 0), zc(t), t = l.next, u = l.next; else if ((t = l) === u) { a ? 1 === a ? uc(t = pc(lc(t), e, r), e, r, n, i, s, 2) : 2 === a && fc(t, e, r, n, i, s) : uc(lc(t), e, r, n, i, s, 1); break } } } function cc(t) { var e = t.prev, r = t, n = t.next; if (wc(e, r, n) >= 0) return !1; for (var i = e.x, s = r.x, a = n.x, o = e.y, l = r.y, u = n.y, c = i < s ? i < a ? i : a : s < a ? s : a, h = o < l ? o < u ? o : u : l < u ? l : u, p = i > s ? i > a ? i : a : s > a ? s : a, f = o > l ? o > u ? o : u : l > u ? l : u, d = n.next; d !== e;) { if (d.x >= c && d.x <= p && d.y >= h && d.y <= f && vc(i, o, s, l, a, u, d.x, d.y) && wc(d.prev, d, d.next) >= 0) return !1; d = d.next; } return !0 } function hc(t, e, r, n) { var i = t.prev, s = t, a = t.next; if (wc(i, s, a) >= 0) return !1; for (var o = i.x, l = s.x, u = a.x, c = i.y, h = s.y, p = a.y, f = o < l ? o < u ? o : u : l < u ? l : u, d = c < h ? c < p ? c : p : h < p ? h : p, y = o > l ? o > u ? o : u : l > u ? l : u, m = c > h ? c > p ? c : p : h > p ? h : p, g = gc(f, d, e, r, n), x = gc(y, m, e, r, n), v = t.prevZ, b = t.nextZ; v && v.z >= g && b && b.z <= x;) { if (v.x >= f && v.x <= y && v.y >= d && v.y <= m && v !== i && v !== a && vc(o, c, l, h, u, p, v.x, v.y) && wc(v.prev, v, v.next) >= 0) return !1; if (v = v.prevZ, b.x >= f && b.x <= y && b.y >= d && b.y <= m && b !== i && b !== a && vc(o, c, l, h, u, p, b.x, b.y) && wc(b.prev, b, b.next) >= 0) return !1; b = b.nextZ; } for (; v && v.z >= g;) { if (v.x >= f && v.x <= y && v.y >= d && v.y <= m && v !== i && v !== a && vc(o, c, l, h, u, p, v.x, v.y) && wc(v.prev, v, v.next) >= 0) return !1; v = v.prevZ; } for (; b && b.z <= x;) { if (b.x >= f && b.x <= y && b.y >= d && b.y <= m && b !== i && b !== a && vc(o, c, l, h, u, p, b.x, b.y) && wc(b.prev, b, b.next) >= 0) return !1; b = b.nextZ; } return !0 } function pc(t, e, r) { var n = t; do { var i = n.prev, s = n.next.next; !_c(i, s) && Ac(i, n, n.next, s) && Ic(i, s) && Ic(s, i) && (e.push(i.i / r | 0), e.push(n.i / r | 0), e.push(s.i / r | 0), zc(n), zc(n.next), n = t = s), n = n.next; } while (n !== t); return lc(n) } function fc(t, e, r, n, i, s) { var a = t; do { for (var o = a.next.next; o !== a.prev;) { if (a.i !== o.i && bc(a, o)) { var l = Mc(a, o); return a = lc(a, a.next), l = lc(l, l.next), uc(a, e, r, n, i, s, 0), void uc(l, e, r, n, i, s, 0) } o = o.next; } a = a.next; } while (a !== t) } function dc(t, e) { return t.x - e.x } function yc(t, e) { var r = function(t, e) { var r, n = e, i = t.x, s = t.y, a = -1 / 0; do { if (s <= n.y && s >= n.next.y && n.next.y !== n.y) { var o = n.x + (s - n.y) * (n.next.x - n.x) / (n.next.y - n.y); if (o <= i && o > a && (a = o, r = n.x < n.next.x ? n : n.next, o === i)) return r } n = n.next; } while (n !== e); if (!r) return null; var l, u = r, c = r.x, h = r.y, p = 1 / 0; n = r; do { i >= n.x && n.x >= c && i !== n.x && vc(s < h ? i : a, s, c, h, s < h ? a : i, s, n.x, n.y) && (l = Math.abs(s - n.y) / (i - n.x), Ic(n, t) && (l < p || l === p && (n.x > r.x || n.x === r.x && mc(r, n))) && (r = n, p = l)), n = n.next; } while (n !== u); return r }(t, e); if (!r) return e; var n = Mc(r, t); return lc(n, n.next), lc(r, r.next) } function mc(t, e) { return wc(t.prev, t, e.prev) < 0 && wc(e.next, t, t.next) < 0 } function gc(t, e, r, n, i) { return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = (t - r) * i | 0) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = (e - n) * i | 0) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 } function xc(t) { var e = t, r = t; do { (e.x < r.x || e.x === r.x && e.y < r.y) && (r = e), e = e.next; } while (e !== t); return r } function vc(t, e, r, n, i, s, a, o) { return (i - a) * (e - o) >= (t - a) * (s - o) && (t - a) * (n - o) >= (r - a) * (e - o) && (r - a) * (s - o) >= (i - a) * (n - o) } function bc(t, e) { return t.next.i !== e.i && t.prev.i !== e.i && ! function(t, e) { var r = t; do { if (r.i !== t.i && r.next.i !== t.i && r.i !== e.i && r.next.i !== e.i && Ac(r, r.next, t, e)) return !0; r = r.next; } while (r !== t); return !1 }(t, e) && (Ic(t, e) && Ic(e, t) && function(t, e) { var r = t, n = !1, i = (t.x + e.x) / 2, s = (t.y + e.y) / 2; do { r.y > s != r.next.y > s && r.next.y !== r.y && i < (r.next.x - r.x) * (s - r.y) / (r.next.y - r.y) + r.x && (n = !n), r = r.next; } while (r !== t); return n }(t, e) && (wc(t.prev, t, e.prev) || wc(t, e.prev, e)) || _c(t, e) && wc(t.prev, t, t.next) > 0 && wc(e.prev, e, e.next) > 0) } function wc(t, e, r) { return (e.y - t.y) * (r.x - e.x) - (e.x - t.x) * (r.y - e.y) } function _c(t, e) { return t.x === e.x && t.y === e.y } function Ac(t, e, r, n) { var i = kc(wc(t, e, r)), s = kc(wc(t, e, n)), a = kc(wc(r, n, t)), o = kc(wc(r, n, e)); return i !== s && a !== o || !(0 !== i || !Sc(t, r, e)) || !(0 !== s || !Sc(t, n, e)) || !(0 !== a || !Sc(r, t, n)) || !(0 !== o || !Sc(r, e, n)) } function Sc(t, e, r) { return e.x <= Math.max(t.x, r.x) && e.x >= Math.min(t.x, r.x) && e.y <= Math.max(t.y, r.y) && e.y >= Math.min(t.y, r.y) } function kc(t) { return t > 0 ? 1 : t < 0 ? -1 : 0 } function Ic(t, e) { return wc(t.prev, t, t.next) < 0 ? wc(t, e, t.next) >= 0 && wc(t, t.prev, e) >= 0 : wc(t, e, t.prev) < 0 || wc(t, t.next, e) < 0 } function Mc(t, e) { var r = new Bc(t.i, t.x, t.y), n = new Bc(e.i, e.x, e.y), i = t.next, s = e.prev; return t.next = e, e.prev = t, r.next = i, i.prev = r, n.next = r, r.prev = n, s.next = n, n.prev = s, n } function Tc(t, e, r, n) { var i = new Bc(t, e, r); return n ? (i.next = n.next, i.prev = n, n.next.prev = i, n.next = i) : (i.prev = i, i.next = i), i } function zc(t) { t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ); } function Bc(t, e, r) { this.i = t, this.x = e, this.y = r, this.prev = null, this.next = null, this.z = 0, this.prevZ = null, this.nextZ = null, this.steiner = !1; } function Ec(t, e, r, n) { for (var i = 0, s = e, a = r - n; s < r; s += n) i += (t[a] - t[s]) * (t[s + 1] + t[a + 1]), a = s; return i } function Cc(t, e, r, n, i) { Pc(t, e, r || 0, n || t.length - 1, i || Vc); } function Pc(t, e, r, n, i) { for (; n > r;) { if (n - r > 600) { var s = n - r + 1, a = e - r + 1, o = Math.log(s), l = .5 * Math.exp(2 * o / 3), u = .5 * Math.sqrt(o * l * (s - l) / s) * (a - s / 2 < 0 ? -1 : 1); Pc(t, e, Math.max(r, Math.floor(e - a * l / s + u)), Math.min(n, Math.floor(e + (s - a) * l / s + u)), i); } var c = t[e], h = r, p = n; for (Dc(t, r, e), i(t[n], c) > 0 && Dc(t, r, n); h < p;) { for (Dc(t, h, p), h++, p--; i(t[h], c) < 0;) h++; for (; i(t[p], c) > 0;) p--; } 0 === i(t[r], c) ? Dc(t, r, p) : Dc(t, ++p, n), p <= e && (r = p + 1), e <= p && (n = p - 1); } } function Dc(t, e, r) { var n = t[e]; t[e] = t[r], t[r] = n; } function Vc(t, e) { return t < e ? -1 : t > e ? 1 : 0 } function Lc(t, e) { const r = t.length; if (r <= 1) return [t]; const n = []; let i, s; for (let e = 0; e < r; e++) { const r = q(t[e]); 0 !== r && (t[e].area = Math.abs(r), void 0 === s && (s = r < 0), s === r < 0 ? (i && n.push(i), i = [t[e]]) : i.push(t[e])); } if (i && n.push(i), e > 1) for (let t = 0; t < n.length; t++) n[t].length <= e || (Cc(n[t], e, 1, n[t].length - 1, Fc), n[t] = n[t].slice(0, e)); return n } function Fc(t, e) { return e.area - t.area } function Rc(t, e, r) { const n = r.patternDependencies; let i = !1; for (const r of e) { const e = r.paint.get(`${t}-pattern`); e.isConstant() || (i = !0); const s = e.constantOr(null); s && (i = !0, n[s] = !0); } return i } function jc(t, e, r, n, i) { const s = i.patternDependencies; for (const a of e) { const e = a.paint.get(`${t}-pattern`).value; if ("constant" !== e.kind) { let t = e.evaluate({ zoom: n }, r, {}, i.availableImages); t = t && t.name ? t.name : t, s[t] = !0, r.patterns[a.id] = t; } } return r }({ get exports() { return sc }, set exports(t) { sc = t; } }).exports = ac, sc.default = ac, ac.deviation = function(t, e, r, n) { var i = e && e.length, s = Math.abs(Ec(t, 0, i ? e[0] * r : t.length, r)); if (i) for (var a = 0, o = e.length; a < o; a++) s -= Math.abs(Ec(t, e[a] * r, a < o - 1 ? e[a + 1] * r : t.length, r)); var l = 0; for (a = 0; a < n.length; a += 3) { var u = n[a] * r, c = n[a + 1] * r, h = n[a + 2] * r; l += Math.abs((t[u] - t[h]) * (t[c + 1] - t[u + 1]) - (t[u] - t[c]) * (t[h + 1] - t[u + 1])); } return 0 === s && 0 === l ? 0 : Math.abs((l - s) / s) }, ac.flatten = function(t) { for (var e = t[0][0].length, r = { vertices: [], holes: [], dimensions: e }, n = 0, i = 0; i < t.length; i++) { for (var s = 0; s < t[i].length; s++) for (var a = 0; a < e; a++) r.vertices.push(t[i][s][a]); i > 0 && r.holes.push(n += t[i - 1].length); } return r }; class $c { constructor(t) { this.zoom = t.zoom, this.overscaling = t.overscaling, this.layers = t.layers, this.layerIds = this.layers.map((t => t.id)), this.index = t.index, this.hasPattern = !1, this.patternFeatures = [], this.layoutVertexArray = new sa, this.indexArray = new wa, this.indexArray2 = new Ma, this.programConfigurations = new fo(t.layers, t.zoom), this.segments = new So, this.segments2 = new So, this.stateDependentLayerIds = this.layers.filter((t => t.isStateDependent())).map((t => t.id)), this.projection = t.projection; } populate(t, e, r, n) { this.hasPattern = Rc("fill", this.layers, e); const i = this.layers[0].layout.get("fill-sort-key"), s = []; for (const { feature: a, id: o, index: l, sourceLayerIndex: u } of t) { const t = this.layers[0]._featureFilter.needGeometry, c = wu(a, t); if (!this.layers[0]._featureFilter.filter(new $s(this.zoom), c, r)) continue; const h = i ? i.evaluate(c, {}, r, e.availableImages) : void 0, p = { id: o, properties: a.properties, type: a.type, sourceLayerIndex: u, index: l, geometry: t ? c.geometry : bu(a, r, n), patterns: {}, sortKey: h }; s.push(p); } i && s.sort(((t, e) => t.sortKey - e.sortKey)); for (const n of s) { const { geometry: i, index: s, sourceLayerIndex: a } = n; if (this.hasPattern) { const t = jc("fill", this.layers, n, this.zoom, e); this.patternFeatures.push(t); } else this.addFeature(n, i, s, r, {}, e.availableImages); e.featureIndex.insert(t[s].feature, i, s, a, this.index); } } update(t, e, r, n) { this.stateDependentLayers.length && this.programConfigurations.updatePaintArrays(t, e, this.stateDependentLayers, r, n); } addFeatures(t, e, r, n, i) { for (const t of this.patternFeatures) this.addFeature(t, t.geometry, t.index, e, r, n); } isEmpty() { return 0 === this.layoutVertexArray.length } uploadPending() { return !this.uploaded || this.programConfigurations.needsUpload } upload(t) { this.uploaded || (this.layoutVertexBuffer = t.createVertexBuffer(this.layoutVertexArray, ic), this.indexBuffer = t.createIndexBuffer(this.indexArray), this.indexBuffer2 = t.createIndexBuffer(this.indexArray2)), this.programConfigurations.upload(t), this.uploaded = !0; } destroy() { this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.indexBuffer2.destroy(), this.programConfigurations.destroy(), this.segments.destroy(), this.segments2.destroy()); } addFeature(t, e, r, n, i, s = []) { for (const t of Lc(e, 500)) { let e = 0; for (const r of t) e += r.length; const r = this.segments.prepareSegment(e, this.layoutVertexArray, this.indexArray), n = r.vertexLength, i = [], s = []; for (const e of t) { if (0 === e.length) continue; e !== t[0] && s.push(i.length / 2); const r = this.segments2.prepareSegment(e.length, this.layoutVertexArray, this.indexArray2), n = r.vertexLength; this.layoutVertexArray.emplaceBack(e[0].x, e[0].y), this.indexArray2.emplaceBack(n + e.length - 1, n), i.push(e[0].x), i.push(e[0].y); for (let t = 1; t < e.length; t++) this.layoutVertexArray.emplaceBack(e[t].x, e[t].y), this.indexArray2.emplaceBack(n + t - 1, n + t), i.push(e[t].x), i.push(e[t].y); r.vertexLength += e.length, r.primitiveLength += e.length; } const a = sc(i, s); for (let t = 0; t < a.length; t += 3) this.indexArray.emplaceBack(n + a[t], n + a[t + 1], n + a[t + 2]); r.vertexLength += e, r.primitiveLength += a.length / 3; } this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, t, r, i, s, n); } } Oi($c, "FillBucket", { omit: ["layers", "patternFeatures"] }); const Uc = new Js({ "fill-sort-key": new Hs(Ht.layout_fill["fill-sort-key"]) }); var Oc = { paint: new Js({ "fill-antialias": new Ys(Ht.paint_fill["fill-antialias"]), "fill-opacity": new Hs(Ht.paint_fill["fill-opacity"]), "fill-color": new Hs(Ht.paint_fill["fill-color"]), "fill-outline-color": new Hs(Ht.paint_fill["fill-outline-color"]), "fill-translate": new Ys(Ht.paint_fill["fill-translate"]), "fill-translate-anchor": new Ys(Ht.paint_fill["fill-translate-anchor"]), "fill-pattern": new Hs(Ht.paint_fill["fill-pattern"]) }), layout: Uc }; const qc = na([{ name: "a_pos_normal_ed", components: 4, type: "Int16" }]), Nc = na([{ name: "a_centroid_pos", components: 2, type: "Uint16" }]), Gc = na([{ name: "a_pos_3", components: 3, type: "Int16" }, { name: "a_pos_normal_3", components: 3, type: "Int16" }]), { members: Zc } = qc; var Xc = {}, Kc = d, Yc = Hc; function Hc(t, e, r, n, i) { this.properties = {}, this.extent = r, this.type = 0, this._pbf = t, this._geometry = -1, this._keys = n, this._values = i, t.readFields(Wc, this, e); } function Wc(t, e, r) { 1 == t ? e.id = r.readVarint() : 2 == t ? function(t, e) { for (var r = t.readVarint() + t.pos; t.pos < r;) { var n = e._keys[t.readVarint()], i = e._values[t.readVarint()]; e.properties[n] = i; } }(r, e) : 3 == t ? e.type = r.readVarint() : 4 == t && (e._geometry = r.pos); } function Jc(t) { for (var e, r, n = 0, i = 0, s = t.length, a = s - 1; i < s; a = i++) n += ((r = t[a]).x - (e = t[i]).x) * (e.y + r.y); return n } Hc.types = ["Unknown", "Point", "LineString", "Polygon"], Hc.prototype.loadGeometry = function() { var t = this._pbf; t.pos = this._geometry; for (var e, r = t.readVarint() + t.pos, n = 1, i = 0, s = 0, a = 0, o = []; t.pos < r;) { if (i <= 0) { var l = t.readVarint(); n = 7 & l, i = l >> 3; } if (i--, 1 === n || 2 === n) s += t.readSVarint(), a += t.readSVarint(), 1 === n && (e && o.push(e), e = []), e.push(new Kc(s, a)); else { if (7 !== n) throw new Error("unknown command " + n); e && e.push(e[0].clone()); } } return e && o.push(e), o }, Hc.prototype.bbox = function() { var t = this._pbf; t.pos = this._geometry; for (var e = t.readVarint() + t.pos, r = 1, n = 0, i = 0, s = 0, a = 1 / 0, o = -1 / 0, l = 1 / 0, u = -1 / 0; t.pos < e;) { if (n <= 0) { var c = t.readVarint(); r = 7 & c, n = c >> 3; } if (n--, 1 === r || 2 === r)(i += t.readSVarint()) < a && (a = i), i > o && (o = i), (s += t.readSVarint()) < l && (l = s), s > u && (u = s); else if (7 !== r) throw new Error("unknown command " + r) } return [a, l, o, u] }, Hc.prototype.toGeoJSON = function(t, e, r) { var n, i, s = this.extent * Math.pow(2, r), a = this.extent * t, o = this.extent * e, l = this.loadGeometry(), u = Hc.types[this.type]; function c(t) { for (var e = 0; e < t.length; e++) { var r = t[e]; t[e] = [360 * (r.x + a) / s - 180, 360 / Math.PI * Math.atan(Math.exp((180 - 360 * (r.y + o) / s) * Math.PI / 180)) - 90]; } } switch (this.type) { case 1: var h = []; for (n = 0; n < l.length; n++) h[n] = l[n][0]; c(l = h); break; case 2: for (n = 0; n < l.length; n++) c(l[n]); break; case 3: for (l = function(t) { var e = t.length; if (e <= 1) return [t]; for (var r, n, i = [], s = 0; s < e; s++) { var a = Jc(t[s]); 0 !== a && (void 0 === n && (n = a < 0), n === a < 0 ? (r && i.push(r), r = [t[s]]) : r.push(t[s])); } return r && i.push(r), i }(l), n = 0; n < l.length; n++) for (i = 0; i < l[n].length; i++) c(l[n][i]); } 1 === l.length ? l = l[0] : u = "Multi" + u; var p = { type: "Feature", geometry: { type: u, coordinates: l }, properties: this.properties }; return "id" in this && (p.id = this.id), p }; var Qc = Yc, th = eh; function eh(t, e) { this.version = 1, this.name = null, this.extent = 4096, this.length = 0, this._pbf = t, this._keys = [], this._values = [], this._features = [], t.readFields(rh, this, e), this.length = this._features.length; } function rh(t, e, r) { 15 === t ? e.version = r.readVarint() : 1 === t ? e.name = r.readString() : 5 === t ? e.extent = r.readVarint() : 2 === t ? e._features.push(r.pos) : 3 === t ? e._keys.push(r.readString()) : 4 === t && e._values.push(function(t) { for (var e = null, r = t.readVarint() + t.pos; t.pos < r;) { var n = t.readVarint() >> 3; e = 1 === n ? t.readString() : 2 === n ? t.readFloat() : 3 === n ? t.readDouble() : 4 === n ? t.readVarint64() : 5 === n ? t.readVarint() : 6 === n ? t.readSVarint() : 7 === n ? t.readBoolean() : null; } return e }(r)); } eh.prototype.feature = function(t) { if (t < 0 || t >= this._features.length) throw new Error("feature index out of bounds"); this._pbf.pos = this._features[t]; var e = this._pbf.readVarint() + this._pbf.pos; return new Qc(this._pbf, e, this.extent, this._keys, this._values) }; var nh = th; function ih(t, e, r) { if (3 === t) { var n = new nh(r, r.readVarint() + r.pos); n.length && (e[n.name] = n); } } var sh = Xc.VectorTile = function(t, e) { this.layers = t.readFields(ih, {}, e); }, ah = Xc.VectorTileFeature = Yc; function oh(t, e, r, n) { const i = [], s = 0 === n ? (t, e, r, n, i, s) => { t.push(new d(s, r + (s - e) / (n - e) * (i - r))); } : (t, e, r, n, i, s) => { t.push(new d(e + (s - r) / (i - r) * (n - e), s)); }; for (const a of t) { const t = []; for (const i of a) { if (i.length <= 2) continue; const a = []; for (let t = 0; t < i.length - 1; t++) { const o = i[t].x, l = i[t].y, u = i[t + 1].x, c = i[t + 1].y, h = 0 === n ? o : l, p = 0 === n ? u : c; h < e ? p > e && s(a, o, l, u, c, e) : h > r ? p < r && s(a, o, l, u, c, r) : a.push(i[t]), p < e && h >= e && s(a, o, l, u, c, e), p > r && h <= r && s(a, o, l, u, c, r); } let o = i[i.length - 1]; const l = 0 === n ? o.x : o.y; l >= e && l <= r && a.push(o), a.length && (o = a[a.length - 1], a[0].x === o.x && a[0].y === o.y || a.push(a[0]), t.push(a)); } t.length && i.push(t); } return i } Xc.VectorTileLayer = th; const lh = ah.types, uh = Math.pow(2, 13); function ch(t, e, r, n, i, s, a, o) { t.emplaceBack((e << 1) + a, (r << 1) + s, (Math.floor(n * uh) << 1) + i, Math.round(o)); } function hh(t, e, r) { const n = 16384; t.emplaceBack(e.x, e.y, e.z, r[0] * n, r[1] * n, r[2] * n); } class ph { constructor() { this.acc = new d(0, 0), this.polyCount = []; } startRing(t) { this.currentPolyCount = { edges: 0, top: 0 }, this.polyCount.push(this.currentPolyCount), this.min || (this.min = new d(t.x, t.y), this.max = new d(t.x, t.y)); } append(t, e) { this.currentPolyCount.edges++, this.acc._add(t); const r = this.min, n = this.max; t.x < r.x ? r.x = t.x : t.x > n.x && (n.x = t.x), t.y < r.y ? r.y = t.y : t.y > n.y && (n.y = t.y), ((0 === t.x || t.x === ko) && t.x === e.x) != ((0 === t.y || t.y === ko) && t.y === e.y) && this.processBorderOverlap(t, e), e.x < 0 != t.x < 0 && this.addBorderIntersection(0, Mr(e.y, t.y, (0 - e.x) / (t.x - e.x))), e.x > ko != t.x > ko && this.addBorderIntersection(1, Mr(e.y, t.y, (ko - e.x) / (t.x - e.x))), e.y < 0 != t.y < 0 && this.addBorderIntersection(2, Mr(e.x, t.x, (0 - e.y) / (t.y - e.y))), e.y > ko != t.y > ko && this.addBorderIntersection(3, Mr(e.x, t.x, (ko - e.y) / (t.y - e.y))); } addBorderIntersection(t, e) { this.borders || (this.borders = [ [Number.MAX_VALUE, -Number.MAX_VALUE], [Number.MAX_VALUE, -Number.MAX_VALUE], [Number.MAX_VALUE, -Number.MAX_VALUE], [Number.MAX_VALUE, -Number.MAX_VALUE] ]); const r = this.borders[t]; e < r[0] && (r[0] = e), e > r[1] && (r[1] = e); } processBorderOverlap(t, e) { if (t.x === e.x) { if (t.y === e.y) return; const r = 0 === t.x ? 0 : 1; this.addBorderIntersection(r, e.y), this.addBorderIntersection(r, t.y); } else { const r = 0 === t.y ? 2 : 3; this.addBorderIntersection(r, e.x), this.addBorderIntersection(r, t.x); } } centroid() { const t = this.polyCount.reduce(((t, e) => t + e.edges), 0); return 0 !== t ? this.acc.div(t)._round() : new d(0, 0) } span() { return new d(this.max.x - this.min.x, this.max.y - this.min.y) } intersectsCount() { return this.borders.reduce(((t, e) => t + +(e[0] !== Number.MAX_VALUE)), 0) } } class fh { constructor(t) { this.zoom = t.zoom, this.canonical = t.canonical, this.overscaling = t.overscaling, this.layers = t.layers, this.layerIds = this.layers.map((t => t.id)), this.index = t.index, this.hasPattern = !1, this.edgeRadius = 0, this.projection = t.projection, this.layoutVertexArray = new oa, this.centroidVertexArray = new $a, this.indexArray = new wa, this.programConfigurations = new fo(t.layers, t.zoom), this.segments = new So, this.stateDependentLayerIds = this.layers.filter((t => t.isStateDependent())).map((t => t.id)), this.enableTerrain = t.enableTerrain; } populate(t, e, r, n) { this.features = [], this.hasPattern = Rc("fill-extrusion", this.layers, e), this.featuresOnBorder = [], this.borders = [ [], [], [], [] ], this.borderDoneWithNeighborZ = [-1, -1, -1, -1], this.tileToMeter = function(t) { const e = Math.exp(Math.PI * (1 - t.y / (1 << t.z) * 2)); return 80150034 * e / (e * e + 1) / ko / (1 << t.z) }(r), this.edgeRadius = this.layers[0].layout.get("fill-extrusion-edge-radius") / this.tileToMeter; for (const { feature: i, id: s, index: a, sourceLayerIndex: o } of t) { const t = this.layers[0]._featureFilter.needGeometry, l = wu(i, t); if (!this.layers[0]._featureFilter.filter(new $s(this.zoom), l, r)) continue; const u = { id: s, sourceLayerIndex: o, index: a, geometry: t ? l.geometry : bu(i, r, n), properties: i.properties, type: i.type, patterns: {} }, c = this.layoutVertexArray.length; this.hasPattern ? this.features.push(jc("fill-extrusion", this.layers, u, this.zoom, e)) : this.addFeature(u, u.geometry, a, r, {}, e.availableImages, n), e.featureIndex.insert(i, u.geometry, a, o, this.index, c); } this.sortBorders(); } addFeatures(t, e, r, n, i) { for (const t of this.features) { const { geometry: s } = t; this.addFeature(t, s, t.index, e, r, n, i); } this.sortBorders(); } update(t, e, r, n) { this.stateDependentLayers.length && this.programConfigurations.updatePaintArrays(t, e, this.stateDependentLayers, r, n); } isEmpty() { return 0 === this.layoutVertexArray.length } uploadPending() { return !this.uploaded || this.programConfigurations.needsUpload } upload(t) { this.uploaded || (this.layoutVertexBuffer = t.createVertexBuffer(this.layoutVertexArray, Zc), this.indexBuffer = t.createIndexBuffer(this.indexArray), this.layoutVertexExtArray && (this.layoutVertexExtBuffer = t.createVertexBuffer(this.layoutVertexExtArray, Gc.members, !0))), this.programConfigurations.upload(t), this.uploaded = !0; } uploadCentroid(t) { 0 !== this.centroidVertexArray.length && (this.centroidVertexBuffer ? this.needsCentroidUpdate && this.centroidVertexBuffer.updateData(this.centroidVertexArray) : this.centroidVertexBuffer = t.createVertexBuffer(this.centroidVertexArray, Nc.members, !0), this.needsCentroidUpdate = !1); } destroy() { this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.centroidVertexBuffer && this.centroidVertexBuffer.destroy(), this.layoutVertexExtBuffer && this.layoutVertexExtBuffer.destroy(), this.indexBuffer.destroy(), this.programConfigurations.destroy(), this.segments.destroy()); } addFeature(t, e, r, n, i, s, a) { const o = [new d(0, 0), new d(ko, ko)], l = a.projection, u = "globe" === l.name, c = this.enableTerrain && !u ? new ph : null, h = "Polygon" === lh[t.type]; u && !this.layoutVertexExtArray && (this.layoutVertexExtArray = new pa); const p = Lc(e, 500); for (let t = p.length - 1; t >= 0; t--) { const e = p[t]; (0 === e.length || (f = e[0]).every((t => t.x <= 0)) || f.every((t => t.x >= ko)) || f.every((t => t.y <= 0)) || f.every((t => t.y >= ko))) && p.splice(t, 1); } var f; let y; if (u) y = wh(p, o, n); else { y = []; for (const t of p) y.push({ polygon: t, bounds: o }); } const m = h ? this.edgeRadius : 0; for (const { polygon: t, bounds: e } of y) { let r = 0, i = 0; for (const e of t) h && !e[0].equals(e[e.length - 1]) && e.push(e[0]), i += h ? e.length - 1 : e.length; const s = this.segments.prepareSegment((h ? 5 : 4) * i, this.layoutVertexArray, this.indexArray); if (h) { const e = [], i = []; r = s.vertexLength; for (const r of t) { let a, o; r.length && r !== t[0] && i.push(e.length / 2), a = r[1].sub(r[0])._perp()._unit(); for (let t = 1; t < r.length; t++) { const i = r[t], c = r[t === r.length - 1 ? 1 : t + 1]; let { x: h, y: p } = i; if (m) { o = c.sub(i)._perp()._unit(); const t = a.add(o)._unit(), e = m * Math.min(4, 1 / (a.x * t.x + a.y * t.y)); h += e * t.x, p += e * t.y, a = o; } ch(this.layoutVertexArray, h, p, 0, 0, 1, 1, 0), s.vertexLength++, e.push(i.x, i.y), u && hh(this.layoutVertexExtArray, l.projectTilePoint(h, p, n), l.upVector(n, h, p)); } } const a = sc(e, i); for (let t = 0; t < a.length; t += 3) this.indexArray.emplaceBack(r + a[t], r + a[t + 2], r + a[t + 1]), s.primitiveLength++; } for (const i of t) { c && i.length && c.startRing(i[0]); let t, a, o, p = i.length > 4 && xh(i[i.length - 2], i[0], i[1]), f = m ? yh(i[i.length - 2], i[0], i[1], m) : 0; a = i[1].sub(i[0])._perp()._unit(); let d = !0; for (let y = 1, g = 0; y < i.length; y++) { let x = i[y - 1], v = i[y]; const b = i[y === i.length - 1 ? 1 : y + 1]; if (c && h && c.currentPolyCount.top++, gh(v, x, e)) { m && (a = b.sub(v)._perp()._unit(), d = !d); continue } c && c.append(v, x); const w = v.sub(x)._perp(), _ = w.x / (Math.abs(w.x) + Math.abs(w.y)), A = w.y > 0 ? 1 : 0, S = x.dist(v); if (g + S > 32768 && (g = 0), m) { o = b.sub(v)._perp()._unit(); let t = mh(x, v, b, dh(a, o), m); isNaN(t) && (t = 0); const e = v.sub(x)._unit(); x = x.add(e.mult(f))._round(), v = v.add(e.mult(-t))._round(), f = t, a = o; } const k = s.vertexLength, I = i.length > 4 && xh(x, v, b); let M = vh(g, p, d); if (ch(this.layoutVertexArray, x.x, x.y, _, A, 0, 0, M), ch(this.layoutVertexArray, x.x, x.y, _, A, 0, 1, M), g += S, M = vh(g, I, !d), p = I, ch(this.layoutVertexArray, v.x, v.y, _, A, 0, 0, M), ch(this.layoutVertexArray, v.x, v.y, _, A, 0, 1, M), s.vertexLength += 4, this.indexArray.emplaceBack(k + 0, k + 1, k + 2), this.indexArray.emplaceBack(k + 1, k + 3, k + 2), s.primitiveLength += 2, m) { const n = r + (1 === y ? i.length - 2 : y - 2), a = 1 === y ? r : n + 1; if (this.indexArray.emplaceBack(k + 1, n, k + 3), this.indexArray.emplaceBack(n, a, k + 3), s.primitiveLength += 2, void 0 === t && (t = k), !gh(b, i[y], e)) { const e = y === i.length - 1 ? t : s.vertexLength; this.indexArray.emplaceBack(k + 2, k + 3, e), this.indexArray.emplaceBack(k + 3, e + 1, e), this.indexArray.emplaceBack(k + 3, a, e + 1), s.primitiveLength += 3; } d = !d; } if (u) { const t = this.layoutVertexExtArray, e = l.projectTilePoint(x.x, x.y, n), r = l.projectTilePoint(v.x, v.y, n), i = l.upVector(n, x.x, x.y), s = l.upVector(n, v.x, v.y); hh(t, e, i), hh(t, e, i), hh(t, r, s), hh(t, r, s); } } h && (r += i.length - 1); } } if (c && c.polyCount.length > 0) { if (c.borders) { c.vertexArrayOffset = this.centroidVertexArray.length; const t = c.borders, e = this.featuresOnBorder.push(c) - 1; for (let r = 0; r < 4; r++) t[r][0] !== Number.MAX_VALUE && this.borders[r].push(e); } this.encodeCentroid(c.borders ? void 0 : c.centroid(), c); } this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, t, r, i, s, n); } sortBorders() { for (let t = 0; t < 4; t++) this.borders[t].sort(((e, r) => this.featuresOnBorder[e].borders[t][0] - this.featuresOnBorder[r].borders[t][0])); } encodeCentroid(t, e, r = !0) { let n, i; if (t) if (0 !== t.y) { const r = e.span()._mult(this.tileToMeter); n = (Math.max(t.x, 1) << 3) + Math.min(7, Math.round(r.x / 10)), i = (Math.max(t.y, 1) << 3) + Math.min(7, Math.round(r.y / 10)); } else n = Math.ceil(7 * (t.x + 450)), i = 0; else n = 0, i = +r; let s = r ? this.centroidVertexArray.length : e.vertexArrayOffset; for (const t of e.polyCount) { r && this.centroidVertexArray.resize(this.centroidVertexArray.length + 4 * t.edges + t.top); for (let e = 0; e < t.top; e++) this.centroidVertexArray.emplace(s++, n, i); for (let e = 0; e < 2 * t.edges; e++) this.centroidVertexArray.emplace(s++, 0, i), this.centroidVertexArray.emplace(s++, n, i); } } } function dh(t, e) { const r = t.add(e)._unit(); return t.x * r.x + t.y * r.y } function yh(t, e, r, n) { const i = e.sub(t)._perp()._unit(), s = r.sub(e)._perp()._unit(); return mh(t, e, r, dh(i, s), n) } function mh(t, e, r, n, i) { const s = Math.sqrt(1 - n * n); return Math.min(t.dist(e) / 3, e.dist(r) / 3, i * s / n) } function gh(t, e, r) { return t.x < r[0].x && e.x < r[0].x || t.x > r[1].x && e.x > r[1].x || t.y < r[0].y && e.y < r[0].y || t.y > r[1].y && e.y > r[1].y } function xh(t, e, r) { if (t.x < 0 || t.x >= ko || e.x < 0 || e.x >= ko || r.x < 0 || r.x >= ko) return !1; const n = r.sub(e), i = n.perp(), s = t.sub(e); return (n.x * s.x + n.y * s.y) / Math.sqrt((n.x * n.x + n.y * n.y) * (s.x * s.x + s.y * s.y)) > -.866 && i.x * s.x + i.y * s.y < 0 } function vh(t, e, r) { const n = e ? 2 | t : -3 & t; return r ? 1 | n : -2 & n } function bh() { const t = Math.PI / 32, e = Math.tan(t), r = tu; return r * Math.sqrt(1 + 2 * e * e) - r } function wh(t, e, r) { const n = 1 << r.z, i = ou(r.x / n), s = ou((r.x + 1) / n), a = lu(r.y / n), o = lu((r.y + 1) / n); return function(t, e, r, n, i = 0, s) { const a = []; if (!t.length || !r || !n) return a; const o = (t, e) => { for (const r of t) a.push({ polygon: r, bounds: e }); }, l = Math.ceil(Math.log2(r)), u = Math.ceil(Math.log2(n)), c = l - u, h = []; for (let t = 0; t < Math.abs(c); t++) h.push(c > 0 ? 0 : 1); for (let t = 0; t < Math.min(l, u); t++) h.push(0), h.push(1); let p = t; if (p = oh(p, e[0].y - i, e[1].y + i, 1), p = oh(p, e[0].x - i, e[1].x + i, 0), !p.length) return a; const f = []; for (h.length ? f.push({ polygons: p, bounds: e, depth: 0 }) : o(p, e); f.length;) { const t = f.pop(), e = t.depth, r = h[e], n = t.bounds[0], a = t.bounds[1], l = 0 === r ? n.x : n.y, u = 0 === r ? a.x : a.y, c = s ? s(r, l, u) : .5 * (l + u), p = oh(t.polygons, l - i, c + i, r), y = oh(t.polygons, c - i, u + i, r); if (p.length) { const t = [n, new d(0 === r ? c : a.x, 1 === r ? c : a.y)]; h.length > e + 1 ? f.push({ polygons: p, bounds: t, depth: e + 1 }) : o(p, t); } if (y.length) { const t = [new d(0 === r ? c : n.x, 1 === r ? c : n.y), a]; h.length > e + 1 ? f.push({ polygons: y, bounds: t, depth: e + 1 }) : o(y, t); } } return a }(t, e, Math.ceil((s - i) / 11.25), Math.ceil((a - o) / 11.25), 1, ((t, e, i) => { if (0 === t) return .5 * (e + i); { const t = lu((r.y + e / ko) / n); return (su(.5 * (lu((r.y + i / ko) / n) + t)) * n - r.y) * ko } })) } Oi(fh, "FillExtrusionBucket", { omit: ["layers", "features"] }), Oi(ph, "PartMetadata"); const _h = new Js({ "fill-extrusion-edge-radius": new Ys(Ht["layout_fill-extrusion"]["fill-extrusion-edge-radius"]) }); var Ah = { paint: new Js({ "fill-extrusion-opacity": new Ys(Ht["paint_fill-extrusion"]["fill-extrusion-opacity"]), "fill-extrusion-color": new Hs(Ht["paint_fill-extrusion"]["fill-extrusion-color"]), "fill-extrusion-translate": new Ys(Ht["paint_fill-extrusion"]["fill-extrusion-translate"]), "fill-extrusion-translate-anchor": new Ys(Ht["paint_fill-extrusion"]["fill-extrusion-translate-anchor"]), "fill-extrusion-pattern": new Hs(Ht["paint_fill-extrusion"]["fill-extrusion-pattern"]), "fill-extrusion-height": new Hs(Ht["paint_fill-extrusion"]["fill-extrusion-height"]), "fill-extrusion-base": new Hs(Ht["paint_fill-extrusion"]["fill-extrusion-base"]), "fill-extrusion-vertical-gradient": new Ys(Ht["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"]), "fill-extrusion-ambient-occlusion-intensity": new Ys(Ht["paint_fill-extrusion"]["fill-extrusion-ambient-occlusion-intensity"]), "fill-extrusion-ambient-occlusion-radius": new Ys(Ht["paint_fill-extrusion"]["fill-extrusion-ambient-occlusion-radius"]) }), layout: _h }; function Sh(t, e, r) { var n = 2 * Math.PI * 6378137 / 256 / Math.pow(2, r); return [t * n - 2 * Math.PI * 6378137 / 2, e * n - 2 * Math.PI * 6378137 / 2] } class kh { constructor(t, e, r) { this.z = t, this.x = e, this.y = r, this.key = Th(0, t, t, e, r); } equals(t) { return this.z === t.z && this.x === t.x && this.y === t.y } url(t, e) { const r = function(t, e, r) { var n = Sh(256 * t, 256 * (e = Math.pow(2, r) - e - 1), r), i = Sh(256 * (t + 1), 256 * (e + 1), r); return n[0] + "," + n[1] + "," + i[0] + "," + i[1] }(this.x, this.y, this.z), n = function(t, e, r) { let n, i = ""; for (let s = t; s > 0; s--) n = 1 << s - 1, i += (e & n ? 1 : 0) + (r & n ? 2 : 0); return i }(this.z, this.x, this.y); return t[(this.x + this.y) % t.length].replace("{prefix}", (this.x % 16).toString(16) + (this.y % 16).toString(16)).replace(/{z}/g, String(this.z)).replace(/{x}/g, String(this.x)).replace(/{y}/g, String("tms" === e ? Math.pow(2, this.z) - this.y - 1 : this.y)).replace("{quadkey}", n).replace("{bbox-epsg-3857}", r) } toString() { return `${this.z}/${this.x}/${this.y}` } } class Ih { constructor(t, e) { this.wrap = t, this.canonical = e, this.key = Th(t, e.z, e.z, e.x, e.y); } } class Mh { constructor(t, e, r, n, i) { this.overscaledZ = t, this.wrap = e, this.canonical = new kh(r, +n, +i), this.key = 0 === e && t === r ? this.canonical.key : Th(e, t, r, n, i); } equals(t) { return this.overscaledZ === t.overscaledZ && this.wrap === t.wrap && this.canonical.equals(t.canonical) } scaledTo(t) { const e = this.canonical.z - t; return t > this.canonical.z ? new Mh(t, this.wrap, this.canonical.z, this.canonical.x, this.canonical.y) : new Mh(t, this.wrap, t, this.canonical.x >> e, this.canonical.y >> e) } calculateScaledKey(t, e = !0) { if (this.overscaledZ === t && e) return this.key; if (t > this.canonical.z) return Th(this.wrap * +e, t, this.canonical.z, this.canonical.x, this.canonical.y); { const r = this.canonical.z - t; return Th(this.wrap * +e, t, t, this.canonical.x >> r, this.canonical.y >> r) } } isChildOf(t) { if (t.wrap !== this.wrap) return !1; const e = this.canonical.z - t.canonical.z; return 0 === t.overscaledZ || t.overscaledZ < this.overscaledZ && t.canonical.x === this.canonical.x >> e && t.canonical.y === this.canonical.y >> e } children(t) { if (this.overscaledZ >= t) return [new Mh(this.overscaledZ + 1, this.wrap, this.canonical.z, this.canonical.x, this.canonical.y)]; const e = this.canonical.z + 1, r = 2 * this.canonical.x, n = 2 * this.canonical.y; return [new Mh(e, this.wrap, e, r, n), new Mh(e, this.wrap, e, r + 1, n), new Mh(e, this.wrap, e, r, n + 1), new Mh(e, this.wrap, e, r + 1, n + 1)] } isLessThan(t) { return this.wrap < t.wrap || !(this.wrap > t.wrap) && (this.overscaledZ < t.overscaledZ || !(this.overscaledZ > t.overscaledZ) && (this.canonical.x < t.canonical.x || !(this.canonical.x > t.canonical.x) && this.canonical.y < t.canonical.y)) } wrapped() { return new Mh(this.overscaledZ, 0, this.canonical.z, this.canonical.x, this.canonical.y) } unwrapTo(t) { return new Mh(this.overscaledZ, t, this.canonical.z, this.canonical.x, this.canonical.y) } overscaleFactor() { return Math.pow(2, this.overscaledZ - this.canonical.z) } toUnwrapped() { return new Ih(this.wrap, this.canonical) } toString() { return `${this.overscaledZ}/${this.canonical.x}/${this.canonical.y}` } } function Th(t, e, r, n, i) { const s = 1 << Math.min(r, 22); let a = s * (i % s) + n % s; return t && r < 22 && (a += s * s * ((t < 0 ? -2 * t - 1 : 2 * t) % (1 << 2 * (22 - r)))), 16 * (32 * a + r) + (e - r) } Oi(kh, "CanonicalTileID"), Oi(Mh, "OverscaledTileID", { omit: ["projMatrix"] }); class zh extends d { constructor(t, e, r) { super(t, e), this.z = r; } } function Bh(t, e) { return t.x * e.x + t.y * e.y } function Eh(t, e) { if (1 === t.length) { let r = 0; const n = e[r++]; let i; for (; !i || n.equals(i);) if (i = e[r++], !i) return 1 / 0; for (; r < e.length; r++) { const s = e[r], a = t[0], o = i.sub(n), l = s.sub(n), u = a.sub(n), c = Bh(o, o), h = Bh(o, l), p = Bh(l, l), f = Bh(u, o), d = Bh(u, l), y = c * p - h * h, m = (p * f - h * d) / y, g = (c * d - h * f) / y, x = n.z * (1 - m - g) + i.z * m + s.z * g; if (isFinite(x)) return x } return 1 / 0 } { let t = 1 / 0; for (const r of e) t = Math.min(t, r.z); return t } } function Ch(t, e, r, n, i, s, a, o) { const l = a * i.getElevationAt(t, e, !0, !0), u = 0 !== s[0], c = u ? 0 === s[1] ? a * (s[0] / 7 - 450) : a * function(t, e, r) { const n = Math.floor(e[0] / 8), i = Math.floor(e[1] / 8), s = 10 * (e[0] - 8 * n), a = 10 * (e[1] - 8 * i), o = t.getElevationAt(n, i, !0, !0), l = t.getMeterToDEM(r), u = Math.floor(.5 * (s * l - 1)), c = Math.floor(.5 * (a * l - 1)), h = t.tileCoordToPixel(n, i), p = 2 * u + 1, f = 2 * c + 1, d = function(t, e, r, n, i) { return [t.getElevationAtPixel(e, r, !0), t.getElevationAtPixel(e + i, r, !0), t.getElevationAtPixel(e, r + i, !0), t.getElevationAtPixel(e + n, r + i, !0)] }(t, h.x - u, h.y - c, p, f), y = Math.abs(d[0] - d[1]), m = Math.abs(d[2] - d[3]), g = Math.abs(d[0] - d[2]) + Math.abs(d[1] - d[3]), x = Math.min(.25, .5 * l * (y + m) / p), v = Math.min(.25, .5 * l * g / f); return o + Math.max(x * s, v * a) }(i, s, o) : l; return { base: l + (0 === r) ? -1 : r, top: u ? Math.max(c + n, l + r + 2) : l + n } } const Ph = na([{ name: "a_pos_normal", components: 2, type: "Int16" }, { name: "a_data", components: 4, type: "Uint8" }, { name: "a_linesofar", components: 1, type: "Float32" }], 4), { members: Dh } = Ph, Vh = na([{ name: "a_packed", components: 4, type: "Float32" }]), { members: Lh } = Vh, Fh = ah.types, Rh = Math.cos(Math.PI / 180 * 37.5); class jh { constructor(t) { this.zoom = t.zoom, this.overscaling = t.overscaling, this.layers = t.layers, this.layerIds = this.layers.map((t => t.id)), this.index = t.index, this.projection = t.projection, this.hasPattern = !1, this.patternFeatures = [], this.lineClipsArray = [], this.gradients = {}, this.layers.forEach((t => { this.gradients[t.id] = {}; })), this.layoutVertexArray = new la, this.layoutVertexArray2 = new ua, this.indexArray = new wa, this.programConfigurations = new fo(t.layers, t.zoom), this.segments = new So, this.maxLineLength = 0, this.stateDependentLayerIds = this.layers.filter((t => t.isStateDependent())).map((t => t.id)); } populate(t, e, r, n) { this.hasPattern = Rc("line", this.layers, e); const i = this.layers[0].layout.get("line-sort-key"), s = []; for (const { feature: e, id: a, index: o, sourceLayerIndex: l } of t) { const t = this.layers[0]._featureFilter.needGeometry, u = wu(e, t); if (!this.layers[0]._featureFilter.filter(new $s(this.zoom), u, r)) continue; const c = i ? i.evaluate(u, {}, r) : void 0, h = { id: a, properties: e.properties, type: e.type, sourceLayerIndex: l, index: o, geometry: t ? u.geometry : bu(e, r, n), patterns: {}, sortKey: c }; s.push(h); } i && s.sort(((t, e) => t.sortKey - e.sortKey)); const { lineAtlas: a, featureIndex: o } = e, l = this.addConstantDashes(a); for (const n of s) { const { geometry: i, index: s, sourceLayerIndex: u } = n; if (l && this.addFeatureDashes(n, a), this.hasPattern) { const t = jc("line", this.layers, n, this.zoom, e); this.patternFeatures.push(t); } else this.addFeature(n, i, s, r, a.positions, e.availableImages); o.insert(t[s].feature, i, s, u, this.index); } } addConstantDashes(t) { let e = !1; for (const r of this.layers) { const n = r.paint.get("line-dasharray").value, i = r.layout.get("line-cap").value; if ("constant" !== n.kind || "constant" !== i.kind) e = !0; else { const e = i.value, r = n.value; if (!r) continue; t.addDash(r, e); } } return e } addFeatureDashes(t, e) { const r = this.zoom; for (const n of this.layers) { const i = n.paint.get("line-dasharray").value, s = n.layout.get("line-cap").value; if ("constant" === i.kind && "constant" === s.kind) continue; let a, o; if ("constant" === i.kind) { if (a = i.value, !a) continue } else a = i.evaluate({ zoom: r }, t); o = "constant" === s.kind ? s.value : s.evaluate({ zoom: r }, t), e.addDash(a, o), t.patterns[n.id] = e.getKey(a, o); } } update(t, e, r, n) { this.stateDependentLayers.length && this.programConfigurations.updatePaintArrays(t, e, this.stateDependentLayers, r, n); } addFeatures(t, e, r, n, i) { for (const t of this.patternFeatures) this.addFeature(t, t.geometry, t.index, e, r, n); } isEmpty() { return 0 === this.layoutVertexArray.length } uploadPending() { return !this.uploaded || this.programConfigurations.needsUpload } upload(t) { this.uploaded || (0 !== this.layoutVertexArray2.length && (this.layoutVertexBuffer2 = t.createVertexBuffer(this.layoutVertexArray2, Lh)), this.layoutVertexBuffer = t.createVertexBuffer(this.layoutVertexArray, Dh), this.indexBuffer = t.createIndexBuffer(this.indexArray)), this.programConfigurations.upload(t), this.uploaded = !0; } destroy() { this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.programConfigurations.destroy(), this.segments.destroy()); } lineFeatureClips(t) { if (t.properties && t.properties.hasOwnProperty("mapbox_clip_start") && t.properties.hasOwnProperty("mapbox_clip_end")) return { start: +t.properties.mapbox_clip_start, end: +t.properties.mapbox_clip_end } } addFeature(t, e, r, n, i, s) { const a = this.layers[0].layout, o = a.get("line-join").evaluate(t, {}), l = a.get("line-cap").evaluate(t, {}), u = a.get("line-miter-limit"), c = a.get("line-round-limit"); this.lineClips = this.lineFeatureClips(t); for (const r of e) this.addLine(r, t, o, l, u, c); this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, t, r, i, s, n); } addLine(t, e, r, n, i, s) { if (this.distance = 0, this.scaledDistance = 0, this.totalDistance = 0, this.lineSoFar = 0, this.lineClips) { this.lineClipsArray.push(this.lineClips); for (let e = 0; e < t.length - 1; e++) this.totalDistance += t[e].dist(t[e + 1]); this.updateScaledDistance(), this.maxLineLength = Math.max(this.maxLineLength, this.totalDistance); } const a = "Polygon" === Fh[e.type]; let o = t.length; for (; o >= 2 && t[o - 1].equals(t[o - 2]);) o--; let l = 0; for (; l < o - 1 && t[l].equals(t[l + 1]);) l++; if (o < (a ? 3 : 2)) return; "bevel" === r && (i = 1.05); const u = this.overscaling <= 16 ? 122880 / (512 * this.overscaling) : 0, c = this.segments.prepareSegment(10 * o, this.layoutVertexArray, this.indexArray); let h, p, f, d, y; this.e1 = this.e2 = -1, a && (h = t[o - 2], y = t[l].sub(h)._unit()._perp()); for (let e = l; e < o; e++) { if (f = e === o - 1 ? a ? t[l + 1] : void 0 : t[e + 1], f && t[e].equals(f)) continue; y && (d = y), h && (p = h), h = t[e], y = f ? f.sub(h)._unit()._perp() : d, d = d || y; let m = d.add(y); 0 === m.x && 0 === m.y || m._unit(); const g = d.x * y.x + d.y * y.y, x = m.x * y.x + m.y * y.y, v = 0 !== x ? 1 / x : 1 / 0, b = 2 * Math.sqrt(2 - 2 * x), w = x < Rh && p && f, _ = d.x * y.y - d.y * y.x > 0; if (w && e > l) { const t = h.dist(p); if (t > 2 * u) { const e = h.sub(h.sub(p)._mult(u / t)._round()); this.updateDistance(p, e), this.addCurrentVertex(e, d, 0, 0, c), p = e; } } const A = p && f; let S = A ? r : a ? "butt" : n; if (A && "round" === S && (v < s ? S = "miter" : v <= 2 && (S = "fakeround")), "miter" === S && v > i && (S = "bevel"), "bevel" === S && (v > 2 && (S = "flipbevel"), v < i && (S = "miter")), p && this.updateDistance(p, h), "miter" === S) m._mult(v), this.addCurrentVertex(h, m, 0, 0, c); else if ("flipbevel" === S) { if (v > 100) m = y.mult(-1); else { const t = v * d.add(y).mag() / d.sub(y).mag(); m._perp()._mult(t * (_ ? -1 : 1)); } this.addCurrentVertex(h, m, 0, 0, c), this.addCurrentVertex(h, m.mult(-1), 0, 0, c); } else if ("bevel" === S || "fakeround" === S) { const t = -Math.sqrt(v * v - 1), e = _ ? t : 0, r = _ ? 0 : t; if (p && this.addCurrentVertex(h, d, e, r, c), "fakeround" === S) { const t = Math.round(180 * b / Math.PI / 20); for (let e = 1; e < t; e++) { let r = e / t; if (.5 !== r) { const t = r - .5; r += r * t * (r - 1) * ((1.0904 + g * (g * (3.55645 - 1.43519 * g) - 3.2452)) * t * t + (.848013 + g * (.215638 * g - 1.06021))); } const n = y.sub(d)._mult(r)._add(d)._unit()._mult(_ ? -1 : 1); this.addHalfVertex(h, n.x, n.y, !1, _, 0, c); } } f && this.addCurrentVertex(h, y, -e, -r, c); } else if ("butt" === S) this.addCurrentVertex(h, m, 0, 0, c); else if ("square" === S) { const t = p ? 1 : -1; p || this.addCurrentVertex(h, m, t, t, c), this.addCurrentVertex(h, m, 0, 0, c), p && this.addCurrentVertex(h, m, t, t, c); } else "round" === S && (p && (this.addCurrentVertex(h, d, 0, 0, c), this.addCurrentVertex(h, d, 1, 1, c, !0)), f && (this.addCurrentVertex(h, y, -1, -1, c, !0), this.addCurrentVertex(h, y, 0, 0, c))); if (w && e < o - 1) { const t = h.dist(f); if (t > 2 * u) { const e = h.add(f.sub(h)._mult(u / t)._round()); this.updateDistance(h, e), this.addCurrentVertex(e, y, 0, 0, c), h = e; } } } } addCurrentVertex(t, e, r, n, i, s = !1) { const a = e.y * n - e.x, o = -e.y - e.x * n; this.addHalfVertex(t, e.x + e.y * r, e.y - e.x * r, s, !1, r, i), this.addHalfVertex(t, a, o, s, !0, -n, i); } addHalfVertex({ x: t, y: e }, r, n, i, s, a, o) { this.layoutVertexArray.emplaceBack((t << 1) + (i ? 1 : 0), (e << 1) + (s ? 1 : 0), Math.round(63 * r) + 128, Math.round(63 * n) + 128, 1 + (0 === a ? 0 : a < 0 ? -1 : 1), 0, this.lineSoFar), this.lineClips && this.layoutVertexArray2.emplaceBack(this.scaledDistance, this.lineClipsArray.length, this.lineClips.start, this.lineClips.end); const l = o.vertexLength++; this.e1 >= 0 && this.e2 >= 0 && (this.indexArray.emplaceBack(this.e1, this.e2, l), o.primitiveLength++), s ? this.e2 = l : this.e1 = l; } updateScaledDistance() { if (this.lineClips) { const t = this.totalDistance / (this.lineClips.end - this.lineClips.start); this.scaledDistance = this.distance / this.totalDistance, this.lineSoFar = t * this.lineClips.start + this.distance; } else this.lineSoFar = this.distance; } updateDistance(t, e) { this.distance += t.dist(e), this.updateScaledDistance(); } } Oi(jh, "LineBucket", { omit: ["layers", "patternFeatures"] }); const $h = new Js({ "line-cap": new Hs(Ht.layout_line["line-cap"]), "line-join": new Hs(Ht.layout_line["line-join"]), "line-miter-limit": new Ys(Ht.layout_line["line-miter-limit"]), "line-round-limit": new Ys(Ht.layout_line["line-round-limit"]), "line-sort-key": new Hs(Ht.layout_line["line-sort-key"]) }); var Uh = { paint: new Js({ "line-opacity": new Hs(Ht.paint_line["line-opacity"]), "line-color": new Hs(Ht.paint_line["line-color"]), "line-translate": new Ys(Ht.paint_line["line-translate"]), "line-translate-anchor": new Ys(Ht.paint_line["line-translate-anchor"]), "line-width": new Hs(Ht.paint_line["line-width"]), "line-gap-width": new Hs(Ht.paint_line["line-gap-width"]), "line-offset": new Hs(Ht.paint_line["line-offset"]), "line-blur": new Hs(Ht.paint_line["line-blur"]), "line-dasharray": new Hs(Ht.paint_line["line-dasharray"]), "line-pattern": new Hs(Ht.paint_line["line-pattern"]), "line-gradient": new Ws(Ht.paint_line["line-gradient"]), "line-trim-offset": new Ys(Ht.paint_line["line-trim-offset"]) }), layout: $h }; const Oh = new class extends Hs { possiblyEvaluate(t, e) { return e = new $s(Math.floor(e.zoom), { now: e.now, fadeDuration: e.fadeDuration, transition: e.transition }), super.possiblyEvaluate(t, e) } evaluate(t, e, r, n) { return e = z({}, e, { zoom: Math.floor(e.zoom) }), super.evaluate(t, e, r, n) } }(Uh.paint.properties["line-width"].specification); function qh(t, e) { return e > 0 ? e + 2 * t : t } Oh.useIntegerZoom = !0; const Nh = na([{ name: "a_pos_offset", components: 4, type: "Int16" }, { name: "a_tex_size", components: 4, type: "Uint16" }, { name: "a_pixeloffset", components: 4, type: "Int16" }], 4), Gh = na([{ name: "a_globe_anchor", components: 3, type: "Int16" }, { name: "a_globe_normal", components: 3, type: "Float32" }], 4), Zh = na([{ name: "a_projected_pos", components: 4, type: "Float32" }], 4); na([{ name: "a_fade_opacity", components: 1, type: "Uint32" }], 4); const Xh = na([{ name: "a_placed", components: 2, type: "Uint8" }, { name: "a_shift", components: 2, type: "Float32" }]), Kh = na([{ name: "a_size_scale", components: 1, type: "Float32" }, { name: "a_padding", components: 2, type: "Float32" }]); na([{ type: "Int16", name: "projectedAnchorX" }, { type: "Int16", name: "projectedAnchorY" }, { type: "Int16", name: "projectedAnchorZ" }, { type: "Int16", name: "tileAnchorX" }, { type: "Int16", name: "tileAnchorY" }, { type: "Float32", name: "x1" }, { type: "Float32", name: "y1" }, { type: "Float32", name: "x2" }, { type: "Float32", name: "y2" }, { type: "Int16", name: "padding" }, { type: "Uint32", name: "featureIndex" }, { type: "Uint16", name: "sourceLayerIndex" }, { type: "Uint16", name: "bucketIndex" }]); const Yh = na([{ name: "a_pos", components: 3, type: "Int16" }, { name: "a_anchor_pos", components: 2, type: "Int16" }, { name: "a_extrude", components: 2, type: "Int16" }], 4), Hh = na([{ name: "a_pos_2f", components: 2, type: "Float32" }, { name: "a_radius", components: 1, type: "Float32" }, { name: "a_flags", components: 2, type: "Int16" }], 4); na([{ name: "triangle", components: 3, type: "Uint16" }]), na([{ type: "Int16", name: "projectedAnchorX" }, { type: "Int16", name: "projectedAnchorY" }, { type: "Int16", name: "projectedAnchorZ" }, { type: "Float32", name: "tileAnchorX" }, { type: "Float32", name: "tileAnchorY" }, { type: "Uint16", name: "glyphStartIndex" }, { type: "Uint16", name: "numGlyphs" }, { type: "Uint32", name: "vertexStartIndex" }, { type: "Uint32", name: "lineStartIndex" }, { type: "Uint32", name: "lineLength" }, { type: "Uint16", name: "segment" }, { type: "Uint16", name: "lowerSize" }, { type: "Uint16", name: "upperSize" }, { type: "Float32", name: "lineOffsetX" }, { type: "Float32", name: "lineOffsetY" }, { type: "Uint8", name: "writingMode" }, { type: "Uint8", name: "placedOrientation" }, { type: "Uint8", name: "hidden" }, { type: "Uint32", name: "crossTileID" }, { type: "Int16", name: "associatedIconIndex" }, { type: "Uint8", name: "flipState" }]), na([{ type: "Int16", name: "projectedAnchorX" }, { type: "Int16", name: "projectedAnchorY" }, { type: "Int16", name: "projectedAnchorZ" }, { type: "Float32", name: "tileAnchorX" }, { type: "Float32", name: "tileAnchorY" }, { type: "Int16", name: "rightJustifiedTextSymbolIndex" }, { type: "Int16", name: "centerJustifiedTextSymbolIndex" }, { type: "Int16", name: "leftJustifiedTextSymbolIndex" }, { type: "Int16", name: "verticalPlacedTextSymbolIndex" }, { type: "Int16", name: "placedIconSymbolIndex" }, { type: "Int16", name: "verticalPlacedIconSymbolIndex" }, { type: "Uint16", name: "key" }, { type: "Uint16", name: "textBoxStartIndex" }, { type: "Uint16", name: "textBoxEndIndex" }, { type: "Uint16", name: "verticalTextBoxStartIndex" }, { type: "Uint16", name: "verticalTextBoxEndIndex" }, { type: "Uint16", name: "iconBoxStartIndex" }, { type: "Uint16", name: "iconBoxEndIndex" }, { type: "Uint16", name: "verticalIconBoxStartIndex" }, { type: "Uint16", name: "verticalIconBoxEndIndex" }, { type: "Uint16", name: "featureIndex" }, { type: "Uint16", name: "numHorizontalGlyphVertices" }, { type: "Uint16", name: "numVerticalGlyphVertices" }, { type: "Uint16", name: "numIconVertices" }, { type: "Uint16", name: "numVerticalIconVertices" }, { type: "Uint16", name: "useRuntimeCollisionCircles" }, { type: "Uint32", name: "crossTileID" }, { type: "Float32", components: 2, name: "textOffset" }, { type: "Float32", name: "collisionCircleDiameter" }]), na([{ type: "Float32", name: "offsetX" }]), na([{ type: "Int16", name: "x" }, { type: "Int16", name: "y" }]); var Wh = 24; const Jh = 128; function Qh(t, e) { const { expression: r } = e; if ("constant" === r.kind) return { kind: "constant", layoutSize: r.evaluate(new $s(t + 1)) }; if ("source" === r.kind) return { kind: "source" }; { const { zoomStops: e, interpolationType: n } = r; let i = 0; for (; i < e.length && e[i] <= t;) i++; i = Math.max(0, i - 1); let s = i; for (; s < e.length && e[s] < t + 1;) s++; s = Math.min(e.length - 1, s); const a = e[i], o = e[s]; return "composite" === r.kind ? { kind: "composite", minZoom: a, maxZoom: o, interpolationType: n } : { kind: "camera", minZoom: a, maxZoom: o, minSize: r.evaluate(new $s(a)), maxSize: r.evaluate(new $s(o)), interpolationType: n } } } function tp(t, { uSize: e, uSizeT: r }, { lowerSize: n, upperSize: i }) { return "source" === t.kind ? n / Jh : "composite" === t.kind ? Mr(n / Jh, i / Jh, r) : e } function ep(t, e) { let r = 0, n = 0; if ("constant" === t.kind) n = t.layoutSize; else if ("source" !== t.kind) { const { interpolationType: i, minZoom: s, maxZoom: a } = t, o = i ? S(Kr.interpolationFactor(i, e, s, a), 0, 1) : 0; "camera" === t.kind ? n = Mr(t.minSize, t.maxSize, o) : r = o; } return { uSizeT: r, uSize: n } } var rp = Object.freeze({ __proto__: null, getSizeData: Qh, evaluateSizeForFeature: tp, evaluateSizeForZoom: ep, SIZE_PACK_FACTOR: Jh }); function np(t, e, r) { return t.sections.forEach((t => { t.text = function(t, e, r) { const n = e.layout.get("text-transform").evaluate(r, {}); return "uppercase" === n ? t = t.toLocaleUpperCase() : "lowercase" === n && (t = t.toLocaleLowerCase()), js.applyArabicShaping && (t = js.applyArabicShaping(t)), t }(t.text, e, r); })), t } const ip = { "!": "︕", "#": "#", $: "$", "%": "%", "&": "&", "(": "︵", ")": "︶", "*": "*", "+": "+", ",": "︐", "-": "︲", ".": "・", "/": "/", ":": "︓", ";": "︔", "<": "︿", "=": "=", ">": "﹀", "?": "︖", "@": "@", "[": "﹇", "\\": "\", "]": "﹈", "^": "^", _: "︳", "`": "`", "{": "︷", "|": "―", "}": "︸", "~": "~", "¢": "¢", "£": "£", "¥": "¥", "¦": "¦", "¬": "¬", "¯": " ̄", "–": "︲", "—": "︱", "‘": "﹃", "’": "﹄", "“": "﹁", "”": "﹂", "…": "︙", "‧": "・", "₩": "₩", "、": "︑", "。": "︒", "〈": "︿", "〉": "﹀", "《": "︽", "》": "︾", "「": "﹁", "」": "﹂", "『": "﹃", "』": "﹄", "【": "︻", "】": "︼", "〔": "︹", "〕": "︺", "〖": "︗", "〗": "︘", "!": "︕", "(": "︵", ")": "︶", ",": "︐", "-": "︲", ".": "・", ":": "︓", ";": "︔", "<": "︿", ">": "﹀", "?": "︖", "[": "﹇", "]": "﹈", "_": "︳", "{": "︷", "|": "―", "}": "︸", "⦅": "︵", "⦆": "︶", "。": "︒", "「": "﹁", "」": "﹂", "←": "↑", "→": "↓" }; function sp(t) { return "︶" === t || "﹈" === t || "︸" === t || "﹄" === t || "﹂" === t || "︾" === t || "︼" === t || "︺" === t || "︘" === t || "﹀" === t || "︐" === t || "︓" === t || "︔" === t || "`" === t || " ̄" === t || "︑" === t || "︒" === t } function ap(t) { return "︵" === t || "﹇" === t || "︷" === t || "﹃" === t || "﹁" === t || "︽" === t || "︻" === t || "︹" === t || "︗" === t || "︿" === t } var op = cp, lp = function(t, e, r, n, i) { var s, a, o = 8 * i - n - 1, l = (1 << o) - 1, u = l >> 1, c = -7, h = r ? i - 1 : 0, p = r ? -1 : 1, f = t[e + h]; for (h += p, s = f & (1 << -c) - 1, f >>= -c, c += o; c > 0; s = 256 * s + t[e + h], h += p, c -= 8); for (a = s & (1 << -c) - 1, s >>= -c, c += n; c > 0; a = 256 * a + t[e + h], h += p, c -= 8); if (0 === s) s = 1 - u; else { if (s === l) return a ? NaN : 1 / 0 * (f ? -1 : 1); a += Math.pow(2, n), s -= u; } return (f ? -1 : 1) * a * Math.pow(2, s - n) }, up = function(t, e, r, n, i, s) { var a, o, l, u = 8 * s - i - 1, c = (1 << u) - 1, h = c >> 1, p = 23 === i ? Math.pow(2, -24) - Math.pow(2, -77) : 0, f = n ? 0 : s - 1, d = n ? 1 : -1, y = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0; for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (o = isNaN(e) ? 1 : 0, a = c) : (a = Math.floor(Math.log(e) / Math.LN2), e * (l = Math.pow(2, -a)) < 1 && (a--, l *= 2), (e += a + h >= 1 ? p / l : p * Math.pow(2, 1 - h)) * l >= 2 && (a++, l /= 2), a + h >= c ? (o = 0, a = c) : a + h >= 1 ? (o = (e * l - 1) * Math.pow(2, i), a += h) : (o = e * Math.pow(2, h - 1) * Math.pow(2, i), a = 0)); i >= 8; t[r + f] = 255 & o, f += d, o /= 256, i -= 8); for (a = a << i | o, u += i; u > 0; t[r + f] = 255 & a, f += d, a /= 256, u -= 8); t[r + f - d] |= 128 * y; }; /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */ function cp(t) { this.buf = ArrayBuffer.isView && ArrayBuffer.isView(t) ? t : new Uint8Array(t || 0), this.pos = 0, this.type = 0, this.length = this.buf.length; } cp.Varint = 0, cp.Fixed64 = 1, cp.Bytes = 2, cp.Fixed32 = 5; var hp = 4294967296, pp = 1 / hp, fp = "undefined" == typeof TextDecoder ? null : new TextDecoder("utf8"); function dp(t) { return t.type === cp.Bytes ? t.readVarint() + t.pos : t.pos + 1 } function yp(t, e, r) { return r ? 4294967296 * e + (t >>> 0) : 4294967296 * (e >>> 0) + (t >>> 0) } function mp(t, e, r) { var n = e <= 16383 ? 1 : e <= 2097151 ? 2 : e <= 268435455 ? 3 : Math.floor(Math.log(e) / (7 * Math.LN2)); r.realloc(n); for (var i = r.pos - 1; i >= t; i--) r.buf[i + n] = r.buf[i]; } function gp(t, e) { for (var r = 0; r < t.length; r++) e.writeVarint(t[r]); } function xp(t, e) { for (var r = 0; r < t.length; r++) e.writeSVarint(t[r]); } function vp(t, e) { for (var r = 0; r < t.length; r++) e.writeFloat(t[r]); } function bp(t, e) { for (var r = 0; r < t.length; r++) e.writeDouble(t[r]); } function wp(t, e) { for (var r = 0; r < t.length; r++) e.writeBoolean(t[r]); } function _p(t, e) { for (var r = 0; r < t.length; r++) e.writeFixed32(t[r]); } function Ap(t, e) { for (var r = 0; r < t.length; r++) e.writeSFixed32(t[r]); } function Sp(t, e) { for (var r = 0; r < t.length; r++) e.writeFixed64(t[r]); } function kp(t, e) { for (var r = 0; r < t.length; r++) e.writeSFixed64(t[r]); } function Ip(t, e) { return (t[e] | t[e + 1] << 8 | t[e + 2] << 16) + 16777216 * t[e + 3] } function Mp(t, e, r) { t[r] = e, t[r + 1] = e >>> 8, t[r + 2] = e >>> 16, t[r + 3] = e >>> 24; } function Tp(t, e) { return (t[e] | t[e + 1] << 8 | t[e + 2] << 16) + (t[e + 3] << 24) } function zp(t, e, r) { e.glyphs = [], 1 === t && r.readMessage(Bp, e); } function Bp(t, e, r) { if (3 === t) { const { id: t, bitmap: n, width: i, height: s, left: a, top: o, advance: l } = r.readMessage(Ep, {}); e.glyphs.push({ id: t, bitmap: new Ju({ width: i + 6, height: s + 6 }, n), metrics: { width: i, height: s, left: a, top: o, advance: l } }); } else 4 === t ? e.ascender = r.readSVarint() : 5 === t && (e.descender = r.readSVarint()); } function Ep(t, e, r) { 1 === t ? e.id = r.readVarint() : 2 === t ? e.bitmap = r.readBytes() : 3 === t ? e.width = r.readVarint() : 4 === t ? e.height = r.readVarint() : 5 === t ? e.left = r.readSVarint() : 6 === t ? e.top = r.readSVarint() : 7 === t && (e.advance = r.readVarint()); } function Cp(t) { let e = 0, r = 0; for (const n of t) e += n.w * n.h, r = Math.max(r, n.w); t.sort(((t, e) => e.h - t.h)); const n = [{ x: 0, y: 0, w: Math.max(Math.ceil(Math.sqrt(e / .95)), r), h: 1 / 0 }]; let i = 0, s = 0; for (const e of t) for (let t = n.length - 1; t >= 0; t--) { const r = n[t]; if (!(e.w > r.w || e.h > r.h)) { if (e.x = r.x, e.y = r.y, s = Math.max(s, e.y + e.h), i = Math.max(i, e.x + e.w), e.w === r.w && e.h === r.h) { const e = n.pop(); t < n.length && (n[t] = e); } else e.h === r.h ? (r.x += e.w, r.w -= e.w) : e.w === r.w ? (r.y += e.h, r.h -= e.h) : (n.push({ x: r.x + e.w, y: r.y, w: r.w - e.w, h: e.h }), r.y += e.h, r.h -= e.h); break } } return { w: i, h: s, fill: e / (i * s) || 0 } } cp.prototype = { destroy: function() { this.buf = null; }, readFields: function(t, e, r) { for (r = r || this.length; this.pos < r;) { var n = this.readVarint(), i = n >> 3, s = this.pos; this.type = 7 & n, t(i, e, this), this.pos === s && this.skip(n); } return e }, readMessage: function(t, e) { return this.readFields(t, e, this.readVarint() + this.pos) }, readFixed32: function() { var t = Ip(this.buf, this.pos); return this.pos += 4, t }, readSFixed32: function() { var t = Tp(this.buf, this.pos); return this.pos += 4, t }, readFixed64: function() { var t = Ip(this.buf, this.pos) + Ip(this.buf, this.pos + 4) * hp; return this.pos += 8, t }, readSFixed64: function() { var t = Ip(this.buf, this.pos) + Tp(this.buf, this.pos + 4) * hp; return this.pos += 8, t }, readFloat: function() { var t = lp(this.buf, this.pos, !0, 23, 4); return this.pos += 4, t }, readDouble: function() { var t = lp(this.buf, this.pos, !0, 52, 8); return this.pos += 8, t }, readVarint: function(t) { var e, r, n = this.buf; return e = 127 & (r = n[this.pos++]), r < 128 ? e : (e |= (127 & (r = n[this.pos++])) << 7, r < 128 ? e : (e |= (127 & (r = n[this.pos++])) << 14, r < 128 ? e : (e |= (127 & (r = n[this.pos++])) << 21, r < 128 ? e : function(t, e, r) { var n, i, s = r.buf; if (n = (112 & (i = s[r.pos++])) >> 4, i < 128) return yp(t, n, e); if (n |= (127 & (i = s[r.pos++])) << 3, i < 128) return yp(t, n, e); if (n |= (127 & (i = s[r.pos++])) << 10, i < 128) return yp(t, n, e); if (n |= (127 & (i = s[r.pos++])) << 17, i < 128) return yp(t, n, e); if (n |= (127 & (i = s[r.pos++])) << 24, i < 128) return yp(t, n, e); if (n |= (1 & (i = s[r.pos++])) << 31, i < 128) return yp(t, n, e); throw new Error("Expected varint not more than 10 bytes") }(e |= (15 & (r = n[this.pos])) << 28, t, this)))) }, readVarint64: function() { return this.readVarint(!0) }, readSVarint: function() { var t = this.readVarint(); return t % 2 == 1 ? (t + 1) / -2 : t / 2 }, readBoolean: function() { return Boolean(this.readVarint()) }, readString: function() { var t = this.readVarint() + this.pos, e = this.pos; return this.pos = t, t - e >= 12 && fp ? function(t, e, r) { return fp.decode(t.subarray(e, r)) }(this.buf, e, t) : function(t, e, r) { for (var n = "", i = e; i < r;) { var s, a, o, l = t[i], u = null, c = l > 239 ? 4 : l > 223 ? 3 : l > 191 ? 2 : 1; if (i + c > r) break; 1 === c ? l < 128 && (u = l) : 2 === c ? 128 == (192 & (s = t[i + 1])) && (u = (31 & l) << 6 | 63 & s) <= 127 && (u = null) : 3 === c ? (a = t[i + 2], 128 == (192 & (s = t[i + 1])) && 128 == (192 & a) && ((u = (15 & l) << 12 | (63 & s) << 6 | 63 & a) <= 2047 || u >= 55296 && u <= 57343) && (u = null)) : 4 === c && (a = t[i + 2], o = t[i + 3], 128 == (192 & (s = t[i + 1])) && 128 == (192 & a) && 128 == (192 & o) && ((u = (15 & l) << 18 | (63 & s) << 12 | (63 & a) << 6 | 63 & o) <= 65535 || u >= 1114112) && (u = null)), null === u ? (u = 65533, c = 1) : u > 65535 && (u -= 65536, n += String.fromCharCode(u >>> 10 & 1023 | 55296), u = 56320 | 1023 & u), n += String.fromCharCode(u), i += c; } return n }(this.buf, e, t) }, readBytes: function() { var t = this.readVarint() + this.pos, e = this.buf.subarray(this.pos, t); return this.pos = t, e }, readPackedVarint: function(t, e) { if (this.type !== cp.Bytes) return t.push(this.readVarint(e)); var r = dp(this); for (t = t || []; this.pos < r;) t.push(this.readVarint(e)); return t }, readPackedSVarint: function(t) { if (this.type !== cp.Bytes) return t.push(this.readSVarint()); var e = dp(this); for (t = t || []; this.pos < e;) t.push(this.readSVarint()); return t }, readPackedBoolean: function(t) { if (this.type !== cp.Bytes) return t.push(this.readBoolean()); var e = dp(this); for (t = t || []; this.pos < e;) t.push(this.readBoolean()); return t }, readPackedFloat: function(t) { if (this.type !== cp.Bytes) return t.push(this.readFloat()); var e = dp(this); for (t = t || []; this.pos < e;) t.push(this.readFloat()); return t }, readPackedDouble: function(t) { if (this.type !== cp.Bytes) return t.push(this.readDouble()); var e = dp(this); for (t = t || []; this.pos < e;) t.push(this.readDouble()); return t }, readPackedFixed32: function(t) { if (this.type !== cp.Bytes) return t.push(this.readFixed32()); var e = dp(this); for (t = t || []; this.pos < e;) t.push(this.readFixed32()); return t }, readPackedSFixed32: function(t) { if (this.type !== cp.Bytes) return t.push(this.readSFixed32()); var e = dp(this); for (t = t || []; this.pos < e;) t.push(this.readSFixed32()); return t }, readPackedFixed64: function(t) { if (this.type !== cp.Bytes) return t.push(this.readFixed64()); var e = dp(this); for (t = t || []; this.pos < e;) t.push(this.readFixed64()); return t }, readPackedSFixed64: function(t) { if (this.type !== cp.Bytes) return t.push(this.readSFixed64()); var e = dp(this); for (t = t || []; this.pos < e;) t.push(this.readSFixed64()); return t }, skip: function(t) { var e = 7 & t; if (e === cp.Varint) for (; this.buf[this.pos++] > 127;); else if (e === cp.Bytes) this.pos = this.readVarint() + this.pos; else if (e === cp.Fixed32) this.pos += 4; else { if (e !== cp.Fixed64) throw new Error("Unimplemented type: " + e); this.pos += 8; } }, writeTag: function(t, e) { this.writeVarint(t << 3 | e); }, realloc: function(t) { for (var e = this.length || 16; e < this.pos + t;) e *= 2; if (e !== this.length) { var r = new Uint8Array(e); r.set(this.buf), this.buf = r, this.length = e; } }, finish: function() { return this.length = this.pos, this.pos = 0, this.buf.subarray(0, this.length) }, writeFixed32: function(t) { this.realloc(4), Mp(this.buf, t, this.pos), this.pos += 4; }, writeSFixed32: function(t) { this.realloc(4), Mp(this.buf, t, this.pos), this.pos += 4; }, writeFixed64: function(t) { this.realloc(8), Mp(this.buf, -1 & t, this.pos), Mp(this.buf, Math.floor(t * pp), this.pos + 4), this.pos += 8; }, writeSFixed64: function(t) { this.realloc(8), Mp(this.buf, -1 & t, this.pos), Mp(this.buf, Math.floor(t * pp), this.pos + 4), this.pos += 8; }, writeVarint: function(t) { (t = +t || 0) > 268435455 || t < 0 ? function(t, e) { var r, n; if (t >= 0 ? (r = t % 4294967296 | 0, n = t / 4294967296 | 0) : (n = ~(-t / 4294967296), 4294967295 ^ (r = ~(-t % 4294967296)) ? r = r + 1 | 0 : (r = 0, n = n + 1 | 0)), t >= 0x10000000000000000 || t < -0x10000000000000000) throw new Error("Given varint doesn't fit into 10 bytes"); e.realloc(10), function(t, e, r) { r.buf[r.pos++] = 127 & t | 128, t >>>= 7, r.buf[r.pos++] = 127 & t | 128, t >>>= 7, r.buf[r.pos++] = 127 & t | 128, t >>>= 7, r.buf[r.pos++] = 127 & t | 128, r.buf[r.pos] = 127 & (t >>>= 7); }(r, 0, e), function(t, e) { var r = (7 & t) << 4; e.buf[e.pos++] |= r | ((t >>>= 3) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t))))); }(n, e); }(t, this) : (this.realloc(4), this.buf[this.pos++] = 127 & t | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = 127 & (t >>>= 7) | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = 127 & (t >>>= 7) | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = t >>> 7 & 127)))); }, writeSVarint: function(t) { this.writeVarint(t < 0 ? 2 * -t - 1 : 2 * t); }, writeBoolean: function(t) { this.writeVarint(Boolean(t)); }, writeString: function(t) { t = String(t), this.realloc(4 * t.length), this.pos++; var e = this.pos; this.pos = function(t, e, r) { for (var n, i, s = 0; s < e.length; s++) { if ((n = e.charCodeAt(s)) > 55295 && n < 57344) { if (!i) { n > 56319 || s + 1 === e.length ? (t[r++] = 239, t[r++] = 191, t[r++] = 189) : i = n; continue } if (n < 56320) { t[r++] = 239, t[r++] = 191, t[r++] = 189, i = n; continue } n = i - 55296 << 10 | n - 56320 | 65536, i = null; } else i && (t[r++] = 239, t[r++] = 191, t[r++] = 189, i = null); n < 128 ? t[r++] = n : (n < 2048 ? t[r++] = n >> 6 | 192 : (n < 65536 ? t[r++] = n >> 12 | 224 : (t[r++] = n >> 18 | 240, t[r++] = n >> 12 & 63 | 128), t[r++] = n >> 6 & 63 | 128), t[r++] = 63 & n | 128); } return r }(this.buf, t, this.pos); var r = this.pos - e; r >= 128 && mp(e, r, this), this.pos = e - 1, this.writeVarint(r), this.pos += r; }, writeFloat: function(t) { this.realloc(4), up(this.buf, t, this.pos, !0, 23, 4), this.pos += 4; }, writeDouble: function(t) { this.realloc(8), up(this.buf, t, this.pos, !0, 52, 8), this.pos += 8; }, writeBytes: function(t) { var e = t.length; this.writeVarint(e), this.realloc(e); for (var r = 0; r < e; r++) this.buf[this.pos++] = t[r]; }, writeRawMessage: function(t, e) { this.pos++; var r = this.pos; t(e, this); var n = this.pos - r; n >= 128 && mp(r, n, this), this.pos = r - 1, this.writeVarint(n), this.pos += n; }, writeMessage: function(t, e, r) { this.writeTag(t, cp.Bytes), this.writeRawMessage(e, r); }, writePackedVarint: function(t, e) { e.length && this.writeMessage(t, gp, e); }, writePackedSVarint: function(t, e) { e.length && this.writeMessage(t, xp, e); }, writePackedBoolean: function(t, e) { e.length && this.writeMessage(t, wp, e); }, writePackedFloat: function(t, e) { e.length && this.writeMessage(t, vp, e); }, writePackedDouble: function(t, e) { e.length && this.writeMessage(t, bp, e); }, writePackedFixed32: function(t, e) { e.length && this.writeMessage(t, _p, e); }, writePackedSFixed32: function(t, e) { e.length && this.writeMessage(t, Ap, e); }, writePackedFixed64: function(t, e) { e.length && this.writeMessage(t, Sp, e); }, writePackedSFixed64: function(t, e) { e.length && this.writeMessage(t, kp, e); }, writeBytesField: function(t, e) { this.writeTag(t, cp.Bytes), this.writeBytes(e); }, writeFixed32Field: function(t, e) { this.writeTag(t, cp.Fixed32), this.writeFixed32(e); }, writeSFixed32Field: function(t, e) { this.writeTag(t, cp.Fixed32), this.writeSFixed32(e); }, writeFixed64Field: function(t, e) { this.writeTag(t, cp.Fixed64), this.writeFixed64(e); }, writeSFixed64Field: function(t, e) { this.writeTag(t, cp.Fixed64), this.writeSFixed64(e); }, writeVarintField: function(t, e) { this.writeTag(t, cp.Varint), this.writeVarint(e); }, writeSVarintField: function(t, e) { this.writeTag(t, cp.Varint), this.writeSVarint(e); }, writeStringField: function(t, e) { this.writeTag(t, cp.Bytes), this.writeString(e); }, writeFloatField: function(t, e) { this.writeTag(t, cp.Fixed32), this.writeFloat(e); }, writeDoubleField: function(t, e) { this.writeTag(t, cp.Fixed64), this.writeDouble(e); }, writeBooleanField: function(t, e) { this.writeVarintField(t, Boolean(e)); } }; class Pp { constructor(t, { pixelRatio: e, version: r, stretchX: n, stretchY: i, content: s }) { this.paddedRect = t, this.pixelRatio = e, this.stretchX = n, this.stretchY = i, this.content = s, this.version = r; } get tl() { return [this.paddedRect.x + 1, this.paddedRect.y + 1] } get br() { return [this.paddedRect.x + this.paddedRect.w - 1, this.paddedRect.y + this.paddedRect.h - 1] } get displaySize() { return [(this.paddedRect.w - 2) / this.pixelRatio, (this.paddedRect.h - 2) / this.pixelRatio] } } class Dp { constructor(t, e) { const r = {}, n = {}; this.haveRenderCallbacks = []; const i = []; this.addImages(t, r, i), this.addImages(e, n, i); const { w: s, h: a } = Cp(i), o = new Qu({ width: s || 1, height: a || 1 }); for (const e in t) { const n = t[e], i = r[e].paddedRect; Qu.copy(n.data, o, { x: 0, y: 0 }, { x: i.x + 1, y: i.y + 1 }, n.data); } for (const t in e) { const r = e[t], i = n[t].paddedRect, s = i.x + 1, a = i.y + 1, l = r.data.width, u = r.data.height; Qu.copy(r.data, o, { x: 0, y: 0 }, { x: s, y: a }, r.data), Qu.copy(r.data, o, { x: 0, y: u - 1 }, { x: s, y: a - 1 }, { width: l, height: 1 }), Qu.copy(r.data, o, { x: 0, y: 0 }, { x: s, y: a + u }, { width: l, height: 1 }), Qu.copy(r.data, o, { x: l - 1, y: 0 }, { x: s - 1, y: a }, { width: 1, height: u }), Qu.copy(r.data, o, { x: 0, y: 0 }, { x: s + l, y: a }, { width: 1, height: u }); } this.image = o, this.iconPositions = r, this.patternPositions = n; } addImages(t, e, r) { for (const n in t) { const i = t[n], s = { x: 0, y: 0, w: i.data.width + 2, h: i.data.height + 2 }; r.push(s), e[n] = new Pp(s, i), i.hasRenderCallback && this.haveRenderCallbacks.push(n); } } patchUpdatedImages(t, e) { this.haveRenderCallbacks = this.haveRenderCallbacks.filter((e => t.hasImage(e))), t.dispatchRenderCallbacks(this.haveRenderCallbacks); for (const r in t.updatedImages) this.patchUpdatedImage(this.iconPositions[r], t.getImage(r), e), this.patchUpdatedImage(this.patternPositions[r], t.getImage(r), e); } patchUpdatedImage(t, e, r) { if (!t || !e) return; if (t.version === e.version) return; t.version = e.version; const [n, i] = t.tl; r.update(e.data, void 0, { x: n, y: i }); } } Oi(Pp, "ImagePosition"), Oi(Dp, "ImageAtlas"); const Vp = { horizontal: 1, vertical: 2, horizontalOnly: 3 }; class Lp { constructor() { this.scale = 1, this.fontStack = "", this.imageName = null; } static forText(t, e) { const r = new Lp; return r.scale = t || 1, r.fontStack = e, r } static forImage(t) { const e = new Lp; return e.imageName = t, e } } class Fp { constructor() { this.text = "", this.sectionIndex = [], this.sections = [], this.imageSectionID = null; } static fromFeature(t, e) { const r = new Fp; for (let n = 0; n < t.sections.length; n++) { const i = t.sections[n]; i.image ? r.addImageSection(i) : r.addTextSection(i, e); } return r } length() { return this.text.length } getSection(t) { return this.sections[this.sectionIndex[t]] } getSections() { return this.sections } getSectionIndex(t) { return this.sectionIndex[t] } getCharCode(t) { return this.text.charCodeAt(t) } verticalizePunctuation(t) { this.text = function(t, e) { let r = ""; for (let n = 0; n < t.length; n++) { const i = t.charCodeAt(n + 1) || null, s = t.charCodeAt(n - 1) || null; r += !e && (i && Ss(i) && !ip[t[n + 1]] || s && Ss(s) && !ip[t[n - 1]]) || !ip[t[n]] ? t[n] : ip[t[n]]; } return r }(this.text, t); } trim() { let t = 0; for (let e = 0; e < this.text.length && jp[this.text.charCodeAt(e)]; e++) t++; let e = this.text.length; for (let r = this.text.length - 1; r >= 0 && r >= t && jp[this.text.charCodeAt(r)]; r--) e--; this.text = this.text.substring(t, e), this.sectionIndex = this.sectionIndex.slice(t, e); } substring(t, e) { const r = new Fp; return r.text = this.text.substring(t, e), r.sectionIndex = this.sectionIndex.slice(t, e), r.sections = this.sections, r } toString() { return this.text } getMaxScale() { return this.sectionIndex.reduce(((t, e) => Math.max(t, this.sections[e].scale)), 0) } addTextSection(t, e) { this.text += t.text, this.sections.push(Lp.forText(t.scale, t.fontStack || e)); const r = this.sections.length - 1; for (let e = 0; e < t.text.length; ++e) this.sectionIndex.push(r); } addImageSection(t) { const e = t.image ? t.image.name : ""; if (0 === e.length) return void U("Can't add FormattedSection with an empty image."); const r = this.getNextImageSectionCharCode(); r ? (this.text += String.fromCharCode(r), this.sections.push(Lp.forImage(e)), this.sectionIndex.push(this.sections.length - 1)) : U("Reached maximum number of images 6401"); } getNextImageSectionCharCode() { return this.imageSectionID ? this.imageSectionID >= 63743 ? null : ++this.imageSectionID : (this.imageSectionID = 57344, this.imageSectionID) } } function Rp(t, e, r, n, i, s, a, o, l, u, c, h, p, f, d) { const y = Fp.fromFeature(t, i); h === Vp.vertical && y.verticalizePunctuation(p); let m = []; const g = function(t, e, r, n, i, s) { if (!t) return []; const a = [], o = function(t, e, r, n, i, s) { let a = 0; for (let r = 0; r < t.length(); r++) { const o = t.getSection(r); a += Up(t.getCharCode(r), o, n, i, e, s); } return a / Math.max(1, Math.ceil(a / r)) }(t, e, r, n, i, s), l = t.text.indexOf("") >= 0; let u = 0; for (let r = 0; r < t.length(); r++) { const h = t.getSection(r), p = t.getCharCode(r); if (jp[p] || (u += Up(p, h, n, i, e, s)), r < t.length() - 1) { const e = !((c = p) < 11904 || !(ns(c) || rs(c) || ms(c) || fs(c) || os(c) || Hi(c) || is(c) || Qi(c) || ls(c) || us(c) || as(c) || vs(c) || ts(c) || Ji(c) || Wi(c) || ss(c) || es(c) || ys(c) || hs(c) || cs(c))); ($p[p] || e || h.imageName) && a.push(Np(r + 1, u, o, a, qp(p, t.getCharCode(r + 1), e && l), !1)); } } var c; return Gp(Np(t.length(), u, o, a, 0, !0)) }(y, u, s, e, n, f), { processBidirectionalText: x, processStyledBidirectionalText: v } = js; if (x && 1 === y.sections.length) { const t = x(y.toString(), g); for (const e of t) { const t = new Fp; t.text = e, t.sections = y.sections; for (let r = 0; r < e.length; r++) t.sectionIndex.push(0); m.push(t); } } else if (v) { const t = v(y.text, y.sectionIndex, g); for (const e of t) { const t = new Fp; t.text = e[0], t.sectionIndex = e[1], t.sections = y.sections, m.push(t); } } else m = function(t, e) { const r = [], n = t.text; let i = 0; for (const n of e) r.push(t.substring(i, n)), i = n; return i < n.length && r.push(t.substring(i, n.length)), r }(y, g); const b = [], w = { positionedLines: b, text: y.toString(), top: c[1], bottom: c[1], left: c[0], right: c[0], writingMode: h, iconsInText: !1, verticalizable: !1, hasBaseline: !1 }; return function(t, e, r, n, i, s, a, o, l, u, c, h) { let p = 0, f = 0, d = 0; const y = "right" === o ? 1 : "left" === o ? 0 : .5; let m = !1; for (const t of i) { const r = t.getSections(); for (const t of r) { if (t.imageName) continue; const r = e[t.fontStack]; if (r && (m = void 0 !== r.ascender && void 0 !== r.descender, !m)) break } if (!m) break } let g = 0; for (const a of i) { a.trim(); const i = a.getMaxScale(), o = (i - 1) * Wh, v = { positionedGlyphs: [], lineOffset: 0 }; t.positionedLines[g] = v; const b = v.positionedGlyphs; let w = 0; if (!a.length()) { f += s, ++g; continue } let _ = 0, A = 0; for (let s = 0; s < a.length(); s++) { const o = a.getSection(s), d = a.getSectionIndex(s), y = a.getCharCode(s); let g = o.scale, v = null, S = null, k = null, I = Wh, M = 0; const T = !(l === Vp.horizontal || !c && !As(y) || c && (jp[y] || (x = y, Xi(x) || Ki(x) || Yi(x) || ds(x) || xs(x)))); if (o.imageName) { const e = n[o.imageName]; if (!e) continue; k = o.imageName, t.iconsInText = t.iconsInText || !0, S = e.paddedRect; const r = e.displaySize; g = g * Wh / h, v = { width: r[0], height: r[1], left: 1, top: -3, advance: T ? r[1] : r[0], localGlyph: !1 }, M = m ? -v.height * g : i * Wh - 17 - r[1] * g, I = v.advance; const s = (T ? r[0] : r[1]) * g - Wh * i; s > 0 && s > w && (w = s); } else { const t = r[o.fontStack]; if (!t) continue; t[y] && (S = t[y]); const n = e[o.fontStack]; if (!n) continue; const s = n.glyphs[y]; if (!s) continue; if (v = s.metrics, I = 8203 !== y ? Wh : 0, m) { const t = void 0 !== n.ascender ? Math.abs(n.ascender) : 0, e = void 0 !== n.descender ? Math.abs(n.descender) : 0, r = (t + e) * g; _ < r && (_ = r, A = (t - e) / 2 * g), M = -t * g; } else M = (i - g) * Wh - 17; } T ? (t.verticalizable = !0, b.push({ glyph: y, imageName: k, x: p, y: f + M, vertical: T, scale: g, localGlyph: v.localGlyph, fontStack: o.fontStack, sectionIndex: d, metrics: v, rect: S }), p += I * g + u) : (b.push({ glyph: y, imageName: k, x: p, y: f + M, vertical: T, scale: g, localGlyph: v.localGlyph, fontStack: o.fontStack, sectionIndex: d, metrics: v, rect: S }), p += v.advance * g + u); } 0 !== b.length && (d = Math.max(p - u, d), m ? Xp(b, y, w, A, s * i / 2) : Xp(b, y, w, 0, s / 2)), p = 0; const S = s * i + w; v.lineOffset = Math.max(w, o), f += S, ++g; } var x; const v = f, { horizontalAlign: b, verticalAlign: w } = Zp(a); ((function(t, e, r, n, i, s) { const a = (e - r) * i, o = -s * n; for (const e of t) for (const t of e.positionedGlyphs) t.x += a, t.y += o; }))(t.positionedLines, y, b, w, d, v), t.top += -w * v, t.bottom = t.top + v, t.left += -b * d, t.right = t.left + d, t.hasBaseline = m; }(w, e, r, n, m, a, o, l, h, u, p, d), ! function(t) { for (const e of t) if (0 !== e.positionedGlyphs.length) return !1; return !0 }(b) && w } const jp = { 9: !0, 10: !0, 11: !0, 12: !0, 13: !0, 32: !0 }, $p = { 10: !0, 32: !0, 38: !0, 40: !0, 41: !0, 43: !0, 45: !0, 47: !0, 173: !0, 183: !0, 8203: !0, 8208: !0, 8211: !0, 8231: !0 }; function Up(t, e, r, n, i, s) { if (e.imageName) { const t = n[e.imageName]; return t ? t.displaySize[0] * e.scale * Wh / s + i : 0 } { const n = r[e.fontStack], s = n && n.glyphs[t]; return s ? s.metrics.advance * e.scale + i : 0 } } function Op(t, e, r, n) { const i = Math.pow(t - e, 2); return n ? t < e ? i / 2 : 2 * i : i + Math.abs(r) * r } function qp(t, e, r) { let n = 0; return 10 === t && (n -= 1e4), r && (n += 150), 40 !== t && 65288 !== t || (n += 50), 41 !== e && 65289 !== e || (n += 50), n } function Np(t, e, r, n, i, s) { let a = null, o = Op(e, r, i, s); for (const t of n) { const n = Op(e - t.x, r, i, s) + t.badness; n <= o && (a = t, o = n); } return { index: t, x: e, priorBreak: a, badness: o } } function Gp(t) { return t ? Gp(t.priorBreak).concat(t.index) : [] } function Zp(t) { let e = .5, r = .5; switch (t) { case "right": case "top-right": case "bottom-right": e = 1; break; case "left": case "top-left": case "bottom-left": e = 0; } switch (t) { case "bottom": case "bottom-right": case "bottom-left": r = 1; break; case "top": case "top-right": case "top-left": r = 0; } return { horizontalAlign: e, verticalAlign: r } } function Xp(t, e, r, n, i) { if (!(e || r || n || i)) return; const s = t.length - 1, a = t[s], o = (a.x + a.metrics.advance * a.scale) * e; for (let e = 0; e <= s; e++) t[e].x -= o, t[e].y += r + n + i; } function Kp(t, e, r) { const { horizontalAlign: n, verticalAlign: i } = Zp(r), s = e[0] - t.displaySize[0] * n, a = e[1] - t.displaySize[1] * i; return { image: t, top: a, bottom: a + t.displaySize[1], left: s, right: s + t.displaySize[0] } } function Yp(t, e, r, n, i, s) { const a = t.image; let o; if (a.content) { const t = a.content, e = a.pixelRatio || 1; o = [t[0] / e, t[1] / e, a.displaySize[0] - t[2] / e, a.displaySize[1] - t[3] / e]; } const l = e.left * s, u = e.right * s; let c, h, p, f; "width" === r || "both" === r ? (f = i[0] + l - n[3], h = i[0] + u + n[1]) : (f = i[0] + (l + u - a.displaySize[0]) / 2, h = f + a.displaySize[0]); const d = e.top * s, y = e.bottom * s; return "height" === r || "both" === r ? (c = i[1] + d - n[0], p = i[1] + y + n[2]) : (c = i[1] + (d + y - a.displaySize[1]) / 2, p = c + a.displaySize[1]), { image: a, top: c, right: h, bottom: p, left: f, collisionPadding: o } } class Hp extends d { constructor(t, e, r, n, i) { super(t, e), this.angle = n, this.z = r, void 0 !== i && (this.segment = i); } clone() { return new Hp(this.x, this.y, this.z, this.angle, this.segment) } } function Wp(t, e, r, n, i) { if (void 0 === e.segment) return !0; let s = e, a = e.segment + 1, o = 0; for (; o > -r / 2;) { if (a--, a < 0) return !1; o -= t[a].dist(s), s = t[a]; } o += t[a].dist(t[a + 1]), a++; const l = []; let u = 0; for (; o < r / 2;) { const e = t[a], r = t[a + 1]; if (!r) return !1; let s = t[a - 1].angleTo(e) - e.angleTo(r); for (s = Math.abs((s + 3 * Math.PI) % (2 * Math.PI) - Math.PI), l.push({ distance: o, angleDelta: s }), u += s; o - l[0].distance > n;) u -= l.shift().angleDelta; if (u > i) return !1; a++, o += e.dist(r); } return !0 } function Jp(t) { let e = 0; for (let r = 0; r < t.length - 1; r++) e += t[r].dist(t[r + 1]); return e } function Qp(t, e, r) { return t ? .6 * e * r : 0 } function tf(t, e) { return Math.max(t ? t.right - t.left : 0, e ? e.right - e.left : 0) } function ef(t, e, r, n, i, s) { const a = Qp(r, i, s), o = tf(r, n) * s; let l = 0; const u = Jp(t) / 2; for (let r = 0; r < t.length - 1; r++) { const n = t[r], i = t[r + 1], s = n.dist(i); if (l + s > u) { const c = (u - l) / s, h = Mr(n.x, i.x, c), p = Mr(n.y, i.y, c), f = new Hp(h, p, 0, i.angleTo(n), r); return !a || Wp(t, f, o, a, e) ? f : void 0 } l += s; } } function rf(t, e, r, n, i, s, a, o, l) { const u = Qp(n, s, a), c = tf(n, i), h = c * a, p = 0 === t[0].x || t[0].x === l || 0 === t[0].y || t[0].y === l; return e - h < e / 4 && (e = h + e / 4), nf(t, p ? e / 2 * o % e : (c / 2 + 2 * s) * a * o % e, e, u, r, h, p, !1, l) } function nf(t, e, r, n, i, s, a, o, l) { const u = s / 2, c = Jp(t); let h = 0, p = e - r, f = []; for (let e = 0; e < t.length - 1; e++) { const a = t[e], o = t[e + 1], d = a.dist(o), y = o.angleTo(a); for (; p + r < h + d;) { p += r; const m = (p - h) / d, g = Mr(a.x, o.x, m), x = Mr(a.y, o.y, m); if (g >= 0 && g < l && x >= 0 && x < l && p - u >= 0 && p + u <= c) { const r = new Hp(g, x, 0, y, e); r._round(), n && !Wp(t, r, s, n, i) || f.push(r); } } h += d; } return o || f.length || a || (f = nf(t, h / 2, r, n, i, s, a, !0, l)), f } function sf(t, e, r, n, i) { const s = []; for (let a = 0; a < t.length; a++) { const o = t[a]; let l; for (let t = 0; t < o.length - 1; t++) { let a = o[t], u = o[t + 1]; a.x < e && u.x < e || (a.x < e ? a = new d(e, a.y + (e - a.x) / (u.x - a.x) * (u.y - a.y))._round() : u.x < e && (u = new d(e, a.y + (e - a.x) / (u.x - a.x) * (u.y - a.y))._round()), a.y < r && u.y < r || (a.y < r ? a = new d(a.x + (r - a.y) / (u.y - a.y) * (u.x - a.x), r)._round() : u.y < r && (u = new d(a.x + (r - a.y) / (u.y - a.y) * (u.x - a.x), r)._round()), a.x >= n && u.x >= n || (a.x >= n ? a = new d(n, a.y + (n - a.x) / (u.x - a.x) * (u.y - a.y))._round() : u.x >= n && (u = new d(n, a.y + (n - a.x) / (u.x - a.x) * (u.y - a.y))._round()), a.y >= i && u.y >= i || (a.y >= i ? a = new d(a.x + (i - a.y) / (u.y - a.y) * (u.x - a.x), i)._round() : u.y >= i && (u = new d(a.x + (i - a.y) / (u.y - a.y) * (u.x - a.x), i)._round()), l && a.equals(l[l.length - 1]) || (l = [a], s.push(l)), l.push(u))))); } } return s } Oi(Hp, "Anchor"); const af = 1e20; function of (t, e, r, n, i, s, a, o, l) { for (let u = e; u < e + n; u++) lf(t, r * s + u, s, i, a, o, l); for (let u = r; u < r + i; u++) lf(t, u * s + e, 1, n, a, o, l); } function lf(t, e, r, n, i, s, a) { s[0] = 0, a[0] = -af, a[1] = af, i[0] = t[e]; for (let o = 1, l = 0, u = 0; o < n; o++) { i[o] = t[e + o * r]; const n = o * o; do { const t = s[l]; u = (i[o] - i[t] + n - t * t) / (o - t) / 2; } while (u <= a[l] && --l > -1); l++, s[l] = o, a[l] = u, a[l + 1] = af; } for (let o = 0, l = 0; o < n; o++) { for (; a[l + 1] < o;) l++; const n = s[l], u = o - n; t[e + o * r] = i[n] + u * u; } } const uf = { none: 0, ideographs: 1, all: 2 }; class cf { constructor(t, e, r) { this.requestManager = t, this.localGlyphMode = e, this.localFontFamily = r, this.entries = {}, this.localGlyphs = { 200: {}, 400: {}, 500: {}, 900: {} }; } setURL(t) { this.url = t; } getGlyphs(t, e) { const r = []; for (const e in t) for (const n of t[e]) r.push({ stack: e, id: n }); M(r, (({ stack: t, id: e }, r) => { let n = this.entries[t]; n || (n = this.entries[t] = { glyphs: {}, requests: {}, ranges: {}, ascender: void 0, descender: void 0 }); let i = n.glyphs[e]; if (void 0 !== i) return void r(null, { stack: t, id: e, glyph: i }); if (i = this._tinySDF(n, t, e), i) return n.glyphs[e] = i, void r(null, { stack: t, id: e, glyph: i }); const s = Math.floor(e / 256); if (256 * s > 65535) return void r(new Error("glyphs > 65535 not supported")); if (n.ranges[s]) return void r(null, { stack: t, id: e, glyph: i }); let a = n.requests[s]; a || (a = n.requests[s] = [], cf.loadGlyphRange(t, s, this.url, this.requestManager, ((t, e) => { if (e) { n.ascender = e.ascender, n.descender = e.descender; for (const t in e.glyphs) this._doesCharSupportLocalGlyph(+t) || (n.glyphs[+t] = e.glyphs[+t]); n.ranges[s] = !0; } for (const r of a) r(t, e); delete n.requests[s]; }))), a.push(((n, i) => { n ? r(n) : i && r(null, { stack: t, id: e, glyph: i.glyphs[e] || null }); })); }), ((t, r) => { if (t) e(t); else if (r) { const t = {}; for (const { stack: e, id: n, glyph: i } of r) void 0 === t[e] && (t[e] = {}), void 0 === t[e].glyphs && (t[e].glyphs = {}), t[e].glyphs[n] = i && { id: i.id, bitmap: i.bitmap.clone(), metrics: i.metrics }, t[e].ascender = this.entries[e].ascender, t[e].descender = this.entries[e].descender; e(null, t); } })); } _doesCharSupportLocalGlyph(t) { return this.localGlyphMode !== uf.none && (this.localGlyphMode === uf.all ? !!this.localFontFamily : !!this.localFontFamily && (us(t) || ps(t) || ts(t) || es(t) || Qi(t))) } _tinySDF(t, e, r) { const n = this.localFontFamily; if (!n || !this._doesCharSupportLocalGlyph(r)) return; let i = t.tinySDF; if (!i) { let r = "400"; /bold/i.test(e) ? r = "900" : /medium/i.test(e) ? r = "500" : /light/i.test(e) && (r = "200"), i = t.tinySDF = new cf.TinySDF({ fontFamily: n, fontWeight: r, fontSize: 48, buffer: 6, radius: 16 }), i.fontWeight = r; } if (this.localGlyphs[i.fontWeight][r]) return this.localGlyphs[i.fontWeight][r]; const s = String.fromCharCode(r), { data: a, width: o, height: l, glyphWidth: u, glyphHeight: c, glyphLeft: h, glyphTop: p, glyphAdvance: f } = i.draw(s); return this.localGlyphs[i.fontWeight][r] = { id: r, bitmap: new Ju({ width: o, height: l }, a), metrics: { width: u / 2, height: c / 2, left: h / 2, top: p / 2 - 27, advance: f / 2, localGlyph: !0 } } } } function hf(t, e, r, n) { const i = [], s = t.image, a = s.pixelRatio, o = s.paddedRect.w - 2, l = s.paddedRect.h - 2, u = t.right - t.left, c = t.bottom - t.top, h = s.stretchX || [ [0, o] ], p = s.stretchY || [ [0, l] ], f = (t, e) => t + e[1] - e[0], y = h.reduce(f, 0), m = p.reduce(f, 0), g = o - y, x = l - m; let v = 0, b = y, w = 0, _ = m, A = 0, S = g, k = 0, I = x; if (s.content && n) { const t = s.content; v = pf(h, 0, t[0]), w = pf(p, 0, t[1]), b = pf(h, t[0], t[2]), _ = pf(p, t[1], t[3]), A = t[0] - v, k = t[1] - w, S = t[2] - t[0] - b, I = t[3] - t[1] - _; } const M = (n, i, o, l) => { const h = df(n.stretch - v, b, u, t.left), p = yf(n.fixed - A, S, n.stretch, y), f = df(i.stretch - w, _, c, t.top), g = yf(i.fixed - k, I, i.stretch, m), x = df(o.stretch - v, b, u, t.left), M = yf(o.fixed - A, S, o.stretch, y), T = df(l.stretch - w, _, c, t.top), z = yf(l.fixed - k, I, l.stretch, m), B = new d(h, f), E = new d(x, f), C = new d(x, T), P = new d(h, T), D = new d(p / a, g / a), V = new d(M / a, z / a), L = e * Math.PI / 180; if (L) { const t = Math.sin(L), e = Math.cos(L), r = [e, -t, t, e]; B._matMult(r), E._matMult(r), P._matMult(r), C._matMult(r); } const F = n.stretch + n.fixed, R = i.stretch + i.fixed; return { tl: B, tr: E, bl: P, br: C, tex: { x: s.paddedRect.x + 1 + F, y: s.paddedRect.y + 1 + R, w: o.stretch + o.fixed - F, h: l.stretch + l.fixed - R }, writingMode: void 0, glyphOffset: [0, 0], sectionIndex: 0, pixelOffsetTL: D, pixelOffsetBR: V, minFontScaleX: S / a / u, minFontScaleY: I / a / c, isSDF: r } }; if (n && (s.stretchX || s.stretchY)) { const t = ff(h, g, y), e = ff(p, x, m); for (let r = 0; r < t.length - 1; r++) { const n = t[r], s = t[r + 1]; for (let t = 0; t < e.length - 1; t++) i.push(M(n, e[t], s, e[t + 1])); } } else i.push(M({ fixed: 0, stretch: -1 }, { fixed: 0, stretch: -1 }, { fixed: 0, stretch: o + 1 }, { fixed: 0, stretch: l + 1 })); return i } function pf(t, e, r) { let n = 0; for (const i of t) n += Math.max(e, Math.min(r, i[1])) - Math.max(e, Math.min(r, i[0])); return n } function ff(t, e, r) { const n = [{ fixed: -1, stretch: 0 }]; for (const [e, r] of t) { const t = n[n.length - 1]; n.push({ fixed: e - t.stretch, stretch: t.stretch }), n.push({ fixed: e - t.stretch, stretch: t.stretch + (r - e) }); } return n.push({ fixed: e + 1, stretch: r }), n } function df(t, e, r, n) { return t / e * r + n } function yf(t, e, r, n) { return t - e * r / n } function mf(t, e, r, n) { const i = e + t.positionedLines[n].lineOffset; return 0 === n ? r + i / 2 : r + (i + (e + t.positionedLines[n - 1].lineOffset)) / 2 } cf.loadGlyphRange = function(t, e, r, n, i) { const s = 256 * e, a = s + 255, o = n.transformRequest(n.normalizeGlyphsURL(r).replace("{fontstack}", t).replace("{range}", `${s}-${a}`), st.Glyphs); ut(o, ((t, e) => { if (t) i(t); else if (e) { const t = {}, r = function(t) { return new op(t).readFields(zp, {}) }(e); for (const e of r.glyphs) t[e.id] = e; i(null, { glyphs: t, ascender: r.ascender, descender: r.descender }); } })); }, cf.TinySDF = class { constructor({ fontSize: t = 24, buffer: e = 3, radius: r = 8, cutoff: n = .25, fontFamily: i = "sans-serif", fontWeight: s = "normal", fontStyle: a = "normal" } = {}) { this.buffer = e, this.cutoff = n, this.radius = r; const o = this.size = t + 4 * e, l = this._createCanvas(o), u = this.ctx = l.getContext("2d", { willReadFrequently: !0 }); u.font = `${a} ${s} ${t}px ${i}`, u.textBaseline = "alphabetic", u.textAlign = "left", u.fillStyle = "black", this.gridOuter = new Float64Array(o * o), this.gridInner = new Float64Array(o * o), this.f = new Float64Array(o), this.z = new Float64Array(o + 1), this.v = new Uint16Array(o); } _createCanvas(t) { const e = document.createElement("canvas"); return e.width = e.height = t, e } draw(t) { const { width: e, actualBoundingBoxAscent: r, actualBoundingBoxDescent: n, actualBoundingBoxLeft: i, actualBoundingBoxRight: s } = this.ctx.measureText(t), a = Math.ceil(r), o = Math.max(0, Math.min(this.size - this.buffer, Math.ceil(s - i))), l = Math.min(this.size - this.buffer, a + Math.ceil(n)), u = o + 2 * this.buffer, c = l + 2 * this.buffer, h = Math.max(u * c, 0), p = new Uint8ClampedArray(h), f = { data: p, width: u, height: c, glyphWidth: o, glyphHeight: l, glyphTop: a, glyphLeft: 0, glyphAdvance: e }; if (0 === o || 0 === l) return f; const { ctx: d, buffer: y, gridInner: m, gridOuter: g } = this; d.clearRect(y, y, o, l), d.fillText(t, y, y + a); const x = d.getImageData(y, y, o, l); g.fill(af, 0, h), m.fill(0, 0, h); for (let t = 0; t < l; t++) for (let e = 0; e < o; e++) { const r = x.data[4 * (t * o + e) + 3] / 255; if (0 === r) continue; const n = (t + y) * u + e + y; if (1 === r) g[n] = 0, m[n] = af; else { const t = .5 - r; g[n] = t > 0 ? t * t : 0, m[n] = t < 0 ? t * t : 0; } } of (g, 0, 0, u, c, u, this.f, this.v, this.z), of (m, y, y, o, l, u, this.f, this.v, this.z); for (let t = 0; t < h; t++) { const e = Math.sqrt(g[t]) - Math.sqrt(m[t]); p[t] = Math.round(255 - 255 * (e / this.radius + this.cutoff)); } return f } }; class gf { constructor(t = [], e = xf) { if (this.data = t, this.length = this.data.length, this.compare = e, this.length > 0) for (let t = (this.length >> 1) - 1; t >= 0; t--) this._down(t); } push(t) { this.data.push(t), this.length++, this._up(this.length - 1); } pop() { if (0 === this.length) return; const t = this.data[0], e = this.data.pop(); return this.length--, this.length > 0 && (this.data[0] = e, this._down(0)), t } peek() { return this.data[0] } _up(t) { const { data: e, compare: r } = this, n = e[t]; for (; t > 0;) { const i = t - 1 >> 1, s = e[i]; if (r(n, s) >= 0) break; e[t] = s, t = i; } e[t] = n; } _down(t) { const { data: e, compare: r } = this, n = this.length >> 1, i = e[t]; for (; t < n;) { let n = 1 + (t << 1), s = e[n]; const a = n + 1; if (a < this.length && r(e[a], s) < 0 && (n = a, s = e[a]), r(s, i) >= 0) break; e[t] = s, t = n; } e[t] = i; } } function xf(t, e) { return t < e ? -1 : t > e ? 1 : 0 } function vf(t, e = 1, r = !1) { let n = 1 / 0, i = 1 / 0, s = -1 / 0, a = -1 / 0; const o = t[0]; for (let t = 0; t < o.length; t++) { const e = o[t]; (!t || e.x < n) && (n = e.x), (!t || e.y < i) && (i = e.y), (!t || e.x > s) && (s = e.x), (!t || e.y > a) && (a = e.y); } const l = Math.min(s - n, a - i); let u = l / 2; const c = new gf([], bf); if (0 === l) return new d(n, i); for (let e = n; e < s; e += l) for (let r = i; r < a; r += l) c.push(new wf(e + u, r + u, u, t)); let h = function(t) { let e = 0, r = 0, n = 0; const i = t[0]; for (let t = 0, s = i.length, a = s - 1; t < s; a = t++) { const s = i[t], o = i[a], l = s.x * o.y - o.x * s.y; r += (s.x + o.x) * l, n += (s.y + o.y) * l, e += 3 * l; } return new wf(r / e, n / e, 0, t) }(t), p = c.length; for (; c.length;) { const n = c.pop(); (n.d > h.d || !h.d) && (h = n, r && console.log("found best %d after %d probes", Math.round(1e4 * n.d) / 1e4, p)), n.max - h.d <= e || (u = n.h / 2, c.push(new wf(n.p.x - u, n.p.y - u, u, t)), c.push(new wf(n.p.x + u, n.p.y - u, u, t)), c.push(new wf(n.p.x - u, n.p.y + u, u, t)), c.push(new wf(n.p.x + u, n.p.y + u, u, t)), p += 4); } return r && (console.log(`num probes: ${p}`), console.log(`best distance: ${h.d}`)), h.p } function bf(t, e) { return e.max - t.max } class wf { constructor(t, e, r, n) { this.p = new d(t, e), this.h = r, this.d = function(t, e) { let r = !1, n = 1 / 0; for (let i = 0; i < e.length; i++) { const s = e[i]; for (let e = 0, i = s.length, a = i - 1; e < i; a = e++) { const i = s[e], o = s[a]; i.y > t.y != o.y > t.y && t.x < (o.x - i.x) * (t.y - i.y) / (o.y - i.y) + i.x && (r = !r), n = Math.min(n, Cu(t, i, o)); } } return (r ? 1 : -1) * Math.sqrt(n) }(this.p, n), this.max = this.d + this.h * Math.SQRT2; } } const _f = Number.POSITIVE_INFINITY, Af = Math.sqrt(2); function Sf(t, [e, r]) { let n = 0, i = 0; if (r === _f) { e < 0 && (e = 0); const r = e / Af; switch (t) { case "top-right": case "top-left": i = r - 7; break; case "bottom-right": case "bottom-left": i = 7 - r; break; case "bottom": i = 7 - e; break; case "top": i = e - 7; } switch (t) { case "top-right": case "bottom-right": n = -r; break; case "top-left": case "bottom-left": n = r; break; case "left": n = e; break; case "right": n = -e; } } else { switch (e = Math.abs(e), r = Math.abs(r), t) { case "top-right": case "top-left": case "top": i = r - 7; break; case "bottom-right": case "bottom-left": case "bottom": i = 7 - r; } switch (t) { case "top-right": case "bottom-right": case "right": n = -e; break; case "top-left": case "bottom-left": case "left": n = e; } } return [n, i] } function kf(t, e, r, n, i, s, a, o, l, u) { t.createArrays(), t.tilePixelRatio = ko / (512 * t.overscaling), t.compareText = {}, t.iconsNeedLinear = !1; const c = t.layers[0].layout, h = t.layers[0]._unevaluatedLayout._values, p = {}; if ("composite" === t.textSizeData.kind) { const { minZoom: e, maxZoom: r } = t.textSizeData; p.compositeTextSizes = [h["text-size"].possiblyEvaluate(new $s(e), o), h["text-size"].possiblyEvaluate(new $s(r), o)]; } if ("composite" === t.iconSizeData.kind) { const { minZoom: e, maxZoom: r } = t.iconSizeData; p.compositeIconSizes = [h["icon-size"].possiblyEvaluate(new $s(e), o), h["icon-size"].possiblyEvaluate(new $s(r), o)]; } p.layoutTextSize = h["text-size"].possiblyEvaluate(new $s(l + 1), o), p.layoutIconSize = h["icon-size"].possiblyEvaluate(new $s(l + 1), o), p.textMaxSize = h["text-size"].possiblyEvaluate(new $s(18), o); const f = "map" === c.get("text-rotation-alignment") && "point" !== c.get("symbol-placement"), d = c.get("text-size"); for (const s of t.features) { const l = c.get("text-font").evaluate(s, {}, o).join(","), h = d.evaluate(s, {}, o), y = p.layoutTextSize.evaluate(s, {}, o), m = (p.layoutIconSize.evaluate(s, {}, o), { horizontal: {}, vertical: void 0 }), g = s.text; let x, v = [0, 0]; if (g) { const n = g.toString(), a = c.get("text-letter-spacing").evaluate(s, {}, o) * Wh, u = c.get("text-line-height").evaluate(s, {}, o) * Wh, p = ws(n) ? a : 0, d = c.get("text-anchor").evaluate(s, {}, o), x = c.get("text-variable-anchor"); if (!x) { const t = c.get("text-radial-offset").evaluate(s, {}, o); v = t ? Sf(d, [t * Wh, _f]) : c.get("text-offset").evaluate(s, {}, o).map((t => t * Wh)); } let b = f ? "center" : c.get("text-justify").evaluate(s, {}, o); const w = "point" === c.get("symbol-placement"), _ = w ? c.get("text-max-width").evaluate(s, {}, o) * Wh : 1 / 0, A = s => { t.allowVerticalPlacement && bs(n) && (m.vertical = Rp(g, e, r, i, l, _, u, d, s, p, v, Vp.vertical, !0, y, h)); }; if (!f && x) { const t = "auto" === b ? x.map((t => If(t))) : [b]; let n = !1; for (let s = 0; s < t.length; s++) { const a = t[s]; if (!m.horizontal[a]) if (n) m.horizontal[a] = m.horizontal[0]; else { const t = Rp(g, e, r, i, l, _, u, "center", a, p, v, Vp.horizontal, !1, y, h); t && (m.horizontal[a] = t, n = 1 === t.positionedLines.length); } } A("left"); } else { if ("auto" === b && (b = If(d)), w || c.get("text-writing-mode").indexOf("horizontal") >= 0 || !bs(n)) { const t = Rp(g, e, r, i, l, _, u, d, b, p, v, Vp.horizontal, !1, y, h); t && (m.horizontal[b] = t); } A(w ? "left" : b); } } let b = !1; if (s.icon && s.icon.name) { const e = n[s.icon.name]; e && (x = Kp(i[s.icon.name], c.get("icon-offset").evaluate(s, {}, o), c.get("icon-anchor").evaluate(s, {}, o)), b = e.sdf, void 0 === t.sdfIcons ? t.sdfIcons = e.sdf : t.sdfIcons !== e.sdf && U("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"), (e.pixelRatio !== t.pixelRatio || 0 !== c.get("icon-rotate").constantOr(1)) && (t.iconsNeedLinear = !0)); } const w = Bf(m.horizontal) || m.vertical; t.iconsInText || (t.iconsInText = !!w && w.iconsInText), (w || x) && Mf(t, s, m, x, n, p, y, 0, v, b, a, o, u); } s && t.generateCollisionDebugBuffers(l, t.collisionBoxArray); } function If(t) { switch (t) { case "right": case "top-right": case "bottom-right": return "right"; case "left": case "top-left": case "bottom-left": return "left" } return "center" } function Mf(t, e, r, n, i, s, a, o, l, u, c, h, p) { let f = s.textMaxSize.evaluate(e, {}, h); void 0 === f && (f = a); const d = t.layers[0].layout, y = d.get("icon-offset").evaluate(e, {}, h), m = Bf(r.horizontal) || r.vertical, g = "globe" === p.name, v = a / 24, b = t.tilePixelRatio * f / 24, w = (z = t.overscaling, t.zoom > 18 && z > 2 && (z >>= 1), Math.max(ko / (512 * z), 1) * d.get("symbol-spacing")), _ = d.get("text-padding") * t.tilePixelRatio, A = d.get("icon-padding") * t.tilePixelRatio, S = x(d.get("text-max-angle")), k = "map" === d.get("text-rotation-alignment") && "point" !== d.get("symbol-placement"), I = "map" === d.get("icon-rotation-alignment") && "point" !== d.get("symbol-placement"), M = d.get("symbol-placement"), T = w / 2; var z; const B = d.get("icon-text-fit"); let E; n && "none" !== B && (t.allowVerticalPlacement && r.vertical && (E = Yp(n, r.vertical, B, d.get("icon-text-fit-padding"), y, v)), m && (n = Yp(n, m, B, d.get("icon-text-fit-padding"), y, v))); const C = (a, o, f) => { if (o.x < 0 || o.x >= ko || o.y < 0 || o.y >= ko) return; let d = null; if (g) { const { x: t, y: e, z: r } = p.projectTilePoint(o.x, o.y, f); d = { anchor: new Hp(t, e, r, 0, void 0), up: p.upVector(f, o.x, o.y) }; }! function(t, e, r, n, i, s, a, o, l, u, c, h, p, f, d, y, m, g, x, v, b, w, _, A, S) { const k = t.addToLineVertexArray(e, n); let I, M, T, z, B, E, C, P = 0, D = 0, V = 0, L = 0, F = -1, R = -1; const j = {}; let $ = qa(""); const O = r ? r.anchor : e; let q = 0, N = 0; if (void 0 === l._unevaluatedLayout.getValue("text-radial-offset") ? [q, N] = l.layout.get("text-offset").evaluate(b, {}, S).map((t => t * Wh)) : (q = l.layout.get("text-radial-offset").evaluate(b, {}, S) * Wh, N = _f), t.allowVerticalPlacement && i.vertical) { const t = i.vertical; if (d) E = Cf(t), o && (C = Cf(o)); else { const r = l.layout.get("text-rotate").evaluate(b, {}, S) + 90; T = Ef(u, O, e, c, h, p, t, f, r, y), o && (z = Ef(u, O, e, c, h, p, o, g, r)); } } if (s) { const n = l.layout.get("icon-rotate").evaluate(b, {}, S), i = "none" !== l.layout.get("icon-text-fit"), a = hf(s, n, _, i), f = o ? hf(o, n, _, i) : void 0; M = Ef(u, O, e, c, h, p, s, g, n), P = 4 * a.length; const d = t.iconSizeData; let y = null; "source" === d.kind ? (y = [Jh * l.layout.get("icon-size").evaluate(b, {}, S)], y[0] > Tf && U(`${t.layerIds[0]}: Value for "icon-size" is >= 255. Reduce your "icon-size".`)) : "composite" === d.kind && (y = [Jh * w.compositeIconSizes[0].evaluate(b, {}, S), Jh * w.compositeIconSizes[1].evaluate(b, {}, S)], (y[0] > Tf || y[1] > Tf) && U(`${t.layerIds[0]}: Value for "icon-size" is >= 255. Reduce your "icon-size".`)), t.addSymbols(t.icon, a, y, v, x, b, !1, r, e, k.lineStartIndex, k.lineLength, -1, A, S), F = t.icon.placedSymbolArray.length - 1, f && (D = 4 * f.length, t.addSymbols(t.icon, f, y, v, x, b, Vp.vertical, r, e, k.lineStartIndex, k.lineLength, -1, A, S), R = t.icon.placedSymbolArray.length - 1); } for (const n in i.horizontal) { const s = i.horizontal[n]; I || ($ = qa(s.text), d ? B = Cf(s) : I = Ef(u, O, e, c, h, p, s, f, l.layout.get("text-rotate").evaluate(b, {}, S), y)); const o = 1 === s.positionedLines.length; if (V += zf(t, r, e, s, a, l, d, b, y, k, i.vertical ? Vp.horizontal : Vp.horizontalOnly, o ? Object.keys(i.horizontal) : [n], j, F, w, A, S), o) break } i.vertical && (L += zf(t, r, e, i.vertical, a, l, d, b, y, k, Vp.vertical, ["vertical"], j, R, w, A, S)); let G = -1; const Z = (t, e) => t ? Math.max(t, e) : e; G = Z(B, G), G = Z(E, G), G = Z(C, G); const X = G > -1 ? 1 : 0; t.glyphOffsetArray.length >= hd.MAX_GLYPHS && U("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"), void 0 !== b.sortKey && t.addToSortKeyRanges(t.symbolInstances.length, b.sortKey), t.symbolInstances.emplaceBack(O.x, O.y, O.z, e.x, e.y, j.right >= 0 ? j.right : -1, j.center >= 0 ? j.center : -1, j.left >= 0 ? j.left : -1, j.vertical >= 0 ? j.vertical : -1, F, R, $, void 0 !== I ? I : t.collisionBoxArray.length, void 0 !== I ? I + 1 : t.collisionBoxArray.length, void 0 !== T ? T : t.collisionBoxArray.length, void 0 !== T ? T + 1 : t.collisionBoxArray.length, void 0 !== M ? M : t.collisionBoxArray.length, void 0 !== M ? M + 1 : t.collisionBoxArray.length, z || t.collisionBoxArray.length, z ? z + 1 : t.collisionBoxArray.length, c, V, L, P, D, X, 0, q, N, G); }(t, o, d, a, r, n, i, E, t.layers[0], t.collisionBoxArray, e.index, e.sourceLayerIndex, t.index, _, k, l, 0, A, I, y, e, s, u, c, h); }; if ("line" === M) for (const i of sf(e.geometry, 0, 0, ko, ko)) { const e = rf(i, w, S, r.vertical || m, n, 24, b, t.overscaling, ko); for (const r of e) { const e = m; e && Pf(t, e.text, T, r) || C(i, r, h); } } else if ("line-center" === M) { for (const t of e.geometry) if (t.length > 1) { const e = ef(t, S, r.vertical || m, n, 24, b); e && C(t, e, h); } } else if ("Polygon" === e.type) for (const t of Lc(e.geometry, 0)) { const e = vf(t, 16); C(t[0], new Hp(e.x, e.y, 0, 0, void 0), h); } else if ("LineString" === e.type) for (const t of e.geometry) C(t, new Hp(t[0].x, t[0].y, 0, 0, void 0), h); else if ("Point" === e.type) for (const t of e.geometry) for (const e of t) C([e], new Hp(e.x, e.y, 0, 0, void 0), h); } const Tf = 32640; function zf(t, e, r, n, i, s, a, o, l, u, c, h, p, f, y, m, g) { const x = function(t, e, r, n, i, s, a, o) { const l = []; if (0 === e.positionedLines.length) return l; const u = n.layout.get("text-rotate").evaluate(s, {}) * Math.PI / 180, c = function(t) { const e = t[0], r = t[1], n = e * r; return n > 0 ? [e, -r] : n < 0 ? [-e, r] : 0 === e ? [r, e] : [r, -e] }(r); let h = Math.abs(e.top - e.bottom); for (const t of e.positionedLines) h -= t.lineOffset; const p = e.positionedLines.length, f = h / p; let y = e.top - r[1]; for (let t = 0; t < p; ++t) { const n = e.positionedLines[t]; y = mf(e, f, y, t); for (const t of n.positionedGlyphs) { if (!t.rect) continue; const n = t.rect || {}; let s = 4, h = !0, p = 1, f = 0; if (t.imageName) { const e = a[t.imageName]; if (!e) continue; if (e.sdf) { U("SDF images are not supported in formatted text and will be ignored."); continue } h = !1, p = e.pixelRatio, s = 1 / p; } const m = (i || o) && t.vertical, g = t.metrics.advance * t.scale / 2, x = t.metrics, v = t.rect; if (null === v) continue; o && e.verticalizable && (f = t.imageName ? g - t.metrics.width * t.scale / 2 : 0); const b = i ? [t.x + g, t.y] : [0, 0]; let w = [0, 0], _ = [0, 0], A = !1; i || (m ? (_ = [t.x + g + c[0], t.y + c[1] - f], A = !0) : w = [t.x + g + r[0], t.y + r[1] - f]); const S = v.w * t.scale / (p * (t.localGlyph ? 2 : 1)), k = v.h * t.scale / (p * (t.localGlyph ? 2 : 1)); let I, M, T, z; if (m) { const e = t.y - y, r = new d(-g, g - e), n = -Math.PI / 2, i = new d(..._); I = new d(-g + w[0], w[1]), I._rotateAround(n, r)._add(i), I.x += -e + g, I.y -= (x.left - s) * t.scale; const a = t.imageName ? x.advance * t.scale : Wh * t.scale, o = String.fromCharCode(t.glyph); sp(o) ? I.x += (1 - s) * t.scale : ap(o) ? I.x += a - x.height * t.scale + (-s - 1) * t.scale : I.x += t.imageName || x.width + 2 * s === v.w && x.height + 2 * s === v.h ? (a - k) / 2 : (a - (x.height + 2 * s) * t.scale) / 2, M = new d(I.x, I.y - S), T = new d(I.x + k, I.y), z = new d(I.x + k, I.y - S); } else { const e = (x.left - s) * t.scale - g + w[0], r = (-x.top - s) * t.scale + w[1], n = e + S, i = r + k; I = new d(e, r), M = new d(n, r), T = new d(e, i), z = new d(n, i); } if (u) { let t; t = i ? new d(0, 0) : A ? new d(c[0], c[1]) : new d(r[0], r[1]), I._rotateAround(u, t), M._rotateAround(u, t), T._rotateAround(u, t), z._rotateAround(u, t); } const B = new d(0, 0), E = new d(0, 0); l.push({ tl: I, tr: M, bl: T, br: z, tex: n, writingMode: e.writingMode, glyphOffset: b, sectionIndex: t.sectionIndex, isSDF: h, pixelOffsetTL: B, pixelOffsetBR: E, minFontScaleX: 0, minFontScaleY: 0 }); } } return l }(0, n, l, s, a, o, i, t.allowVerticalPlacement), v = t.textSizeData; let b = null; "source" === v.kind ? (b = [Jh * s.layout.get("text-size").evaluate(o, {}, g)], b[0] > Tf && U(`${t.layerIds[0]}: Value for "text-size" is >= 255. Reduce your "text-size".`)) : "composite" === v.kind && (b = [Jh * y.compositeTextSizes[0].evaluate(o, {}, g), Jh * y.compositeTextSizes[1].evaluate(o, {}, g)], (b[0] > Tf || b[1] > Tf) && U(`${t.layerIds[0]}: Value for "text-size" is >= 255. Reduce your "text-size".`)), t.addSymbols(t.text, x, b, l, a, o, c, e, r, u.lineStartIndex, u.lineLength, f, m, g); for (const e of h) p[e] = t.text.placedSymbolArray.length - 1; return 4 * x.length } function Bf(t) { for (const e in t) return t[e]; return null } function Ef(t, e, r, n, i, s, a, o, l, u) { let c = a.top, h = a.bottom, p = a.left, f = a.right; const y = a.collisionPadding; if (y && (p -= y[0], c -= y[1], f += y[2], h += y[3]), l) { const t = new d(p, c), e = new d(f, c), r = new d(p, h), n = new d(f, h), i = x(l); let s = new d(0, 0); u && (s = new d(u[0], u[1])), t._rotateAround(i, s), e._rotateAround(i, s), r._rotateAround(i, s), n._rotateAround(i, s), p = Math.min(t.x, e.x, r.x, n.x), f = Math.max(t.x, e.x, r.x, n.x), c = Math.min(t.y, e.y, r.y, n.y), h = Math.max(t.y, e.y, r.y, n.y); } return t.emplaceBack(e.x, e.y, e.z, r.x, r.y, p, c, f, h, o, n, i, s), t.length - 1 } function Cf(t) { t.collisionPadding && (t.top -= t.collisionPadding[1], t.bottom += t.collisionPadding[3]); const e = t.bottom - t.top; return e > 0 ? Math.max(10, e) : null } function Pf(t, e, r, n) { const i = t.compareText; if (e in i) { const t = i[e]; for (let e = t.length - 1; e >= 0; e--) if (n.dist(t[e]) < r) return !0 } else i[e] = []; return i[e].push(n), !1 } function Df(t, e) { const r = t.fovAboveCenter, n = t.elevation ? t.elevation.getMinElevationBelowMSL() * e : 0, i = (t._camera.position[2] * t.worldSize - n) / Math.cos(t._pitch), s = Math.sin(r) * i / Math.sin(Math.max(Math.PI / 2 - t._pitch - r, .01)), a = Math.sin(t._pitch) * s + i; return Math.min(1.01 * a, i * (1 / t._horizonShift)) } function Vf(t, e) { if (!e.isReprojectedInTileSpace) return { scale: 1 << t.z, x: t.x, y: t.y, x2: t.x + 1, y2: t.y + 1, projection: e }; const r = Math.pow(2, -t.z), n = t.x * r, i = (t.x + 1) * r, s = t.y * r, a = (t.y + 1) * r, o = ou(n), l = ou(i), u = lu(s), c = lu(a), h = e.project(o, u), p = e.project(l, u), f = e.project(l, c), d = e.project(o, c); let y = Math.min(h.x, p.x, f.x, d.x), m = Math.min(h.y, p.y, f.y, d.y), g = Math.max(h.x, p.x, f.x, d.x), x = Math.max(h.y, p.y, f.y, d.y); const v = r / 16; function b(t, r, n, i, s, a) { const o = (n + s) / 2, l = (i + a) / 2, u = e.project(ou(o), lu(l)), c = Math.max(0, y - u.x, m - u.y, u.x - g, u.y - x); y = Math.min(y, u.x), g = Math.max(g, u.x), m = Math.min(m, u.y), x = Math.max(x, u.y), c > v && (b(t, u, n, i, o, l), b(u, r, o, l, s, a)); } b(h, p, n, s, i, s), b(p, f, i, s, i, a), b(f, d, i, a, n, a), b(d, h, n, a, n, s), y -= v, m -= v, g += v, x += v; const w = 1 / Math.max(g - y, x - m); return { scale: w, x: y * w, y: m * w, x2: g * w, y2: x * w, projection: e } } const Lf = Eo(new Float32Array(16)); class Ff { constructor(t) { this.spec = t, this.name = t.name, this.wrap = !1, this.requiresDraping = !1, this.supportsWorldCopies = !1, this.supportsTerrain = !1, this.supportsFog = !1, this.supportsFreeCamera = !1, this.zAxisUnit = "meters", this.isReprojectedInTileSpace = !0, this.unsupportedLayers = ["custom"], this.center = [0, 0], this.range = [3.5, 7]; } project(t, e) { return { x: 0, y: 0, z: 0 } } unproject(t, e) { return new ru(0, 0) } projectTilePoint(t, e, r) { return { x: t, y: e, z: 0 } } locationPoint(t, e, r = !0) { return t._coordinatePoint(t.locationCoordinate(e), r) } pixelsPerMeter(t, e) { return au(1, t) * e } pixelSpaceConversion(t, e, r) { return 1 } farthestPixelDistance(t) { return Df(t, t.pixelsPerMeter) } pointCoordinate(t, e, r, n) { const i = t.horizonLineFromTop(!1), s = new d(e, Math.max(i, r)); return t.rayIntersectionCoordinate(t.pointRayIntersection(s, n)) } pointCoordinate3D(t, e, r) { const n = new d(e, r); if (t.elevation) return t.elevation.pointCoordinate(n); { const e = this.pointCoordinate(t, n.x, n.y, 0); return [e.x, e.y, e.z] } } isPointAboveHorizon(t, e) { if (t.elevation) return !this.pointCoordinate3D(t, e.x, e.y); const r = t.horizonLineFromTop(); return e.y < r } createInversionMatrix(t, e) { return Lf } createTileMatrix(t, e, r) { let n, i, s; const a = r.canonical, o = Eo(new Float64Array(16)); if (this.isReprojectedInTileSpace) { const l = Vf(a, this); n = 1, i = l.x + r.wrap * l.scale, s = l.y, Vo(o, o, [n / l.scale, n / l.scale, t.pixelsPerMeter / e]); } else n = e / t.zoomScale(a.z), i = (a.x + Math.pow(2, a.z) * r.wrap) * n, s = a.y * n; return Do(o, o, [i, s, 0]), Vo(o, o, [n / ko, n / ko, 1]), o } upVector(t, e, r) { return [0, 0, 1] } upVectorScale(t, e, r) { return { metersToTile: 1 } } } class Rf extends Ff { constructor(t) { super(t), this.range = [4, 7], this.center = t.center || [-96, 37.5]; const [e, r] = this.parallels = t.parallels || [29.5, 45.5], n = Math.sin(x(e)); this.n = (n + Math.sin(x(r))) / 2, this.c = 1 + n * (2 * this.n - n), this.r0 = Math.sqrt(this.c) / this.n; } project(t, e) { const { n: r, c: n, r0: i } = this, s = x(t - this.center[0]), a = x(e), o = Math.sqrt(n - 2 * r * Math.sin(a)) / r; return { x: o * Math.sin(s * r), y: o * Math.cos(s * r) - i, z: 0 } } unproject(t, e) { const { n: r, c: n, r0: i } = this, s = i + e; let a = Math.atan2(t, Math.abs(s)) * Math.sign(s); s * r < 0 && (a -= Math.PI * Math.sign(t) * Math.sign(s)); const o = x(this.center[0]) * r; a = I(a, -Math.PI - o, Math.PI - o); const l = S(v(a / r) + this.center[0], -180, 180), u = Math.asin(S((n - (t * t + s * s) * r * r) / (2 * r), -1, 1)), c = S(v(u), -cu, cu); return new ru(l, c) } } const jf = 1.340264, $f = -.081106, Uf = 893e-6, Of = .003796, qf = Math.sqrt(3) / 2; class Nf extends Ff { project(t, e) { e = e / 180 * Math.PI, t = t / 180 * Math.PI; const r = Math.asin(qf * Math.sin(e)), n = r * r, i = n * n * n; return { x: .5 * (t * Math.cos(r) / (qf * (jf + 3 * $f * n + i * (7 * Uf + 9 * Of * n))) / Math.PI + .5), y: 1 - .5 * (r * (jf + $f * n + i * (Uf + Of * n)) / Math.PI + 1), z: 0 } } unproject(t, e) { t = (2 * t - .5) * Math.PI; let r = e = (2 * (1 - e) - 1) * Math.PI, n = r * r, i = n * n * n; for (let t, s, a, o = 0; o < 12 && (s = r * (jf + $f * n + i * (Uf + Of * n)) - e, a = jf + 3 * $f * n + i * (7 * Uf + 9 * Of * n), t = s / a, r = S(r - t, -Math.PI / 3, Math.PI / 3), n = r * r, i = n * n * n, !(Math.abs(t) < 1e-12)); ++o); const s = qf * t * (jf + 3 * $f * n + i * (7 * Uf + 9 * Of * n)) / Math.cos(r), a = Math.asin(Math.sin(r) / qf), o = S(180 * s / Math.PI, -180, 180), l = S(180 * a / Math.PI, -cu, cu); return new ru(o, l) } } class Gf extends Ff { constructor(t) { super(t), this.wrap = !0, this.supportsWorldCopies = !0; } project(t, e) { return { x: .5 + t / 360, y: .5 - e / 360, z: 0 } } unproject(t, e) { const r = 360 * (t - .5), n = S(360 * (.5 - e), -cu, cu); return new ru(r, n) } } const Zf = Math.PI / 2; function Xf(t) { return Math.tan((Zf + t) / 2) } class Kf extends Ff { constructor(t) { super(t), this.center = t.center || [0, 30]; const [e, r] = this.parallels = t.parallels || [30, 30]; let n = x(e), i = x(r); this.southernCenter = n + i < 0, this.southernCenter && (n = -n, i = -i); const s = Math.cos(n), a = Xf(n); this.n = n === i ? Math.sin(n) : Math.log(s / Math.cos(i)) / Math.log(Xf(i) / a), this.f = s * Math.pow(Xf(n), this.n) / this.n; } project(t, e) { e = x(e), this.southernCenter && (e = -e), t = x(t - this.center[0]); const r = 1e-6, { n: n, f: i } = this; i > 0 ? e < -Zf + r && (e = -Zf + r) : e > Zf - r && (e = Zf - r); const s = i / Math.pow(Xf(e), n); let a = s * Math.sin(n * t), o = i - s * Math.cos(n * t); return a = .5 * (a / Math.PI + .5), o = .5 * (o / Math.PI + .5), { x: a, y: this.southernCenter ? o : 1 - o, z: 0 } } unproject(t, e) { t = (2 * t - .5) * Math.PI, this.southernCenter && (e = 1 - e), e = (2 * (1 - e) - .5) * Math.PI; const { n: r, f: n } = this, i = n - e, s = Math.sign(i), a = Math.sign(r) * Math.sqrt(t * t + i * i); let o = Math.atan2(t, Math.abs(i)) * s; i * r < 0 && (o -= Math.PI * Math.sign(t) * s); const l = S(v(o / r) + this.center[0], -180, 180), u = S(v(2 * Math.atan(Math.pow(n / a, 1 / r)) - Zf), -cu, cu); return new ru(l, this.southernCenter ? -u : u) } } class Yf extends Ff { constructor(t) { super(t), this.wrap = !0, this.supportsWorldCopies = !0, this.supportsTerrain = !0, this.supportsFog = !0, this.supportsFreeCamera = !0, this.isReprojectedInTileSpace = !1, this.unsupportedLayers = [], this.range = null; } project(t, e) { return { x: iu(t), y: su(e), z: 0 } } unproject(t, e) { const r = ou(t), n = lu(e); return new ru(r, n) } } const Hf = x(cu); class Wf extends Ff { project(t, e) { const r = (e = x(e)) * e, n = r * r; return { x: .5 * ((t = x(t)) * (.8707 - .131979 * r + n * (n * (.003971 * r - .001529 * n) - .013791)) / Math.PI + .5), y: 1 - .5 * (e * (1.007226 + r * (.015085 + n * (.028874 * r - .044475 - .005916 * n))) / Math.PI + 1), z: 0 } } unproject(t, e) { t = (2 * t - .5) * Math.PI; let r = e = (2 * (1 - e) - 1) * Math.PI, n = 25, i = 0, s = r * r; do { s = r * r; const t = s * s; i = (r * (1.007226 + s * (.015085 + t * (.028874 * s - .044475 - .005916 * t))) - e) / (1.007226 + s * (.045255 + t * (.259866 * s - .311325 - .005916 * 11 * t))), r = S(r - i, -Hf, Hf); } while (Math.abs(i) > 1e-6 && --n > 0); s = r * r; const a = S(v(t / (.8707 + s * (s * (s * s * s * (.003971 - .001529 * s) - .013791) - .131979))), -180, 180), o = v(r); return new ru(a, o) } } const Jf = x(cu); class Qf extends Ff { project(t, e) { e = x(e), t = x(t); const r = Math.cos(e), n = 2 / Math.PI, i = Math.acos(r * Math.cos(t / 2)), s = Math.sin(i) / i, a = .5 * (t * n + 2 * r * Math.sin(t / 2) / s) || 0, o = .5 * (e + Math.sin(e) / s) || 0; return { x: .5 * (a / Math.PI + .5), y: 1 - .5 * (o / Math.PI + 1), z: 0 } } unproject(t, e) { let r = t = (2 * t - .5) * Math.PI, n = e = (2 * (1 - e) - 1) * Math.PI, i = 25; const s = 1e-6; let a = 0, o = 0; do { const i = Math.cos(n), s = Math.sin(n), l = 2 * s * i, u = s * s, c = i * i, h = Math.cos(r / 2), p = Math.sin(r / 2), f = 2 * h * p, d = p * p, y = 1 - c * h * h, m = y ? 1 / y : 0, g = y ? Math.acos(i * h) * Math.sqrt(1 / y) : 0, x = .5 * (2 * g * i * p + 2 * r / Math.PI) - t, v = .5 * (g * s + n) - e, b = .5 * m * (c * d + g * i * h * u) + 1 / Math.PI, w = m * (f * l / 4 - g * s * p), _ = .125 * m * (l * p - g * s * c * f), A = .5 * m * (u * h + g * d * i) + .5, k = w * _ - A * b; a = (v * w - x * A) / k, o = (x * _ - v * b) / k, r = S(r - a, -Math.PI, Math.PI), n = S(n - o, -Jf, Jf); } while ((Math.abs(a) > s || Math.abs(o) > s) && --i > 0); return new ru(v(r), v(n)) } } class td extends Ff { constructor(t) { super(t), this.center = t.center || [0, 0], this.parallels = t.parallels || [0, 0], this.cosPhi = Math.max(.01, Math.cos(x(this.parallels[0]))), this.scale = 1 / (2 * Math.max(Math.PI * this.cosPhi, 1 / this.cosPhi)), this.wrap = !0, this.supportsWorldCopies = !0; } project(t, e) { const { scale: r, cosPhi: n } = this; return { x: x(t) * n * r + .5, y: -Math.sin(x(e)) / n * r + .5, z: 0 } } unproject(t, e) { const { scale: r, cosPhi: n } = this, i = -(e - .5) / r, s = S(v((t - .5) / r) / n, -180, 180), a = Math.asin(S(i * n, -1, 1)), o = S(v(a), -cu, cu); return new ru(s, o) } } class ed extends Yf { constructor(t) { super(t), this.requiresDraping = !0, this.supportsWorldCopies = !1, this.supportsFog = !0, this.zAxisUnit = "pixels", this.unsupportedLayers = ["debug"], this.range = [3, 5]; } projectTilePoint(t, e, r) { const n = Ol(t, e, r); return el(n, n, Gl(Pl(r))), { x: n[0], y: n[1], z: n[2] } } locationPoint(t, e) { const r = Ul(e.lat, e.lng), n = Jo([], r), i = t.elevation ? t.elevation.getAtPointOrZero(t.locationCoordinate(e), t._centerAltitude) : t._centerAltitude; Wo(r, r, n, au(1, 0) * ko * i); const s = Eo(new Float64Array(16)); return Po(s, t.pixelMatrix, t.globeMatrix), el(r, r, s), new d(r[0], r[1]) } pixelsPerMeter(t, e) { return au(1, 0) * e } pixelSpaceConversion(t, e, r) { const n = au(1, t) * e, i = Mr(au(1, 45) * e, n, r); return this.pixelsPerMeter(t, e) / i } createTileMatrix(t, e, r) { const n = Zl(Pl(r.canonical)); return Po(new Float64Array(16), t.globeMatrix, n) } createInversionMatrix(t, e) { const { center: r } = t, n = Gl(Pl(e)); return Fo(n, n, x(r.lng)), Lo(n, n, x(r.lat)), Vo(n, n, [t._pixelsPerMercatorPixel, t._pixelsPerMercatorPixel, 1]), Float32Array.from(n) } pointCoordinate(t, e, r, n) { return Bl(t, e, r, !0) || new pu(0, 0) } pointCoordinate3D(t, e, r) { const n = this.pointCoordinate(t, e, r, 0); return [n.x, n.y, n.z] } isPointAboveHorizon(t, e) { return !Bl(t, e.x, e.y, !1) } farthestPixelDistance(t) { const e = function(t, e) { const r = t.cameraToCenterDistance, n = t._centerAltitude * e, i = t._camera, s = t._camera.forward(), a = Go([], Ho([], s, -r), [0, 0, n]), o = t.worldSize / (2 * Math.PI), l = [0, 0, -o], u = t.width / t.height, c = Math.tan(t.fovAboveCenter), h = Ho([], i.up(), c), p = Ho([], i.right(), c * u), f = Jo([], Go([], Go([], s, h), p)), d = []; let y; if (new vl(a, f).closestPointOnSphere(l, o, d)) { const e = Go([], d, l), r = il([], e, a); y = Math.cos(t.fovAboveCenter) * qo(r); } else { const t = il([], a, l), e = il([], l, a); Jo(e, e); const r = qo(t) - o; y = Math.sqrt(r * (r + 2 * o)); const n = Math.acos(y / (o + r)) - Math.acos(Qo(s, e)); y *= Math.cos(n); } return 1.01 * y }(t, this.pixelsPerMeter(t.center.lat, t.worldSize)), r = Kl(t.zoom); if (r > 0) { const n = Df(t, au(1, t.center.lat) * t.worldSize), i = t.worldSize / (2 * Math.PI), s = Math.max(t.width, t.height) / t.worldSize * Math.PI; return Mr(e, n + i * (1 - Math.cos(s)), Math.pow(r, 10)) } return e } upVector(t, e, r) { return Ol(e, r, t, 1) } upVectorScale(t) { return { metersToTile: zl(ql(Pl(t))) } } } function rd(t) { const e = t.parallels, r = !!e && Math.abs(e[0] + e[1]) < .01; switch (t.name) { case "mercator": return new Yf(t); case "equirectangular": return new Gf(t); case "naturalEarth": return new Wf(t); case "equalEarth": return new Nf(t); case "winkelTripel": return new Qf(t); case "albers": return r ? new td(t) : new Rf(t); case "lambertConformalConic": return r ? new td(t) : new Kf(t); case "globe": return new ed(t) } throw new Error(`Invalid projection name: ${t.name}`) } const nd = ah.types, id = [{ name: "a_fade_opacity", components: 1, type: "Uint8", offset: 0 }]; function sd(t, e, r, n, i, s, a, o, l, u, c, h, p) { const f = o ? Math.min(Tf, Math.round(o[0])) : 0, d = o ? Math.min(Tf, Math.round(o[1])) : 0; t.emplaceBack(e, r, Math.round(32 * n), Math.round(32 * i), s, a, (f << 1) + (l ? 1 : 0), d, 16 * u, 16 * c, 256 * h, 256 * p); } function ad(t, e, r, n, i, s, a) { t.emplaceBack(e, r, n, i, s, a); } function od(t, e, r, n, i) { t.emplaceBack(e, r, n, i), t.emplaceBack(e, r, n, i), t.emplaceBack(e, r, n, i), t.emplaceBack(e, r, n, i); } function ld(t) { for (const e of t.sections) if (Ms(e.text)) return !0; return !1 } class ud { constructor(t) { this.layoutVertexArray = new fa, this.indexArray = new wa, this.programConfigurations = t, this.segments = new So, this.dynamicLayoutVertexArray = new ua, this.opacityVertexArray = new ya, this.placedSymbolArray = new Pa, this.globeExtVertexArray = new da; } isEmpty() { return 0 === this.layoutVertexArray.length && 0 === this.indexArray.length && 0 === this.dynamicLayoutVertexArray.length && 0 === this.opacityVertexArray.length } upload(t, e, r, n) { this.isEmpty() || (r && (this.layoutVertexBuffer = t.createVertexBuffer(this.layoutVertexArray, Nh.members), this.indexBuffer = t.createIndexBuffer(this.indexArray, e), this.dynamicLayoutVertexBuffer = t.createVertexBuffer(this.dynamicLayoutVertexArray, Zh.members, !0), this.opacityVertexBuffer = t.createVertexBuffer(this.opacityVertexArray, id, !0), this.globeExtVertexArray.length > 0 && (this.globeExtVertexBuffer = t.createVertexBuffer(this.globeExtVertexArray, Gh.members, !0)), this.opacityVertexBuffer.itemSize = 1), (r || n) && this.programConfigurations.upload(t)); } destroy() { this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.programConfigurations.destroy(), this.segments.destroy(), this.dynamicLayoutVertexBuffer.destroy(), this.opacityVertexBuffer.destroy(), this.globeExtVertexBuffer && this.globeExtVertexBuffer.destroy()); } } Oi(ud, "SymbolBuffers"); class cd { constructor(t, e, r) { this.layoutVertexArray = new t, this.layoutAttributes = e, this.indexArray = new r, this.segments = new So, this.collisionVertexArray = new va, this.collisionVertexArrayExt = new ba; } upload(t) { this.layoutVertexBuffer = t.createVertexBuffer(this.layoutVertexArray, this.layoutAttributes), this.indexBuffer = t.createIndexBuffer(this.indexArray), this.collisionVertexBuffer = t.createVertexBuffer(this.collisionVertexArray, Xh.members, !0), this.collisionVertexBufferExt = t.createVertexBuffer(this.collisionVertexArrayExt, Kh.members, !0); } destroy() { this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.segments.destroy(), this.collisionVertexBuffer.destroy(), this.collisionVertexBufferExt.destroy()); } } Oi(cd, "CollisionBuffers"); class hd { constructor(t) { this.collisionBoxArray = t.collisionBoxArray, this.zoom = t.zoom, this.overscaling = t.overscaling, this.layers = t.layers, this.layerIds = this.layers.map((t => t.id)), this.index = t.index, this.pixelRatio = t.pixelRatio, this.sourceLayerIndex = t.sourceLayerIndex, this.hasPattern = !1, this.hasRTLText = !1, this.fullyClipped = !1, this.sortKeyRanges = [], this.collisionCircleArray = [], this.placementInvProjMatrix = Eo([]), this.placementViewportMatrix = Eo([]); const e = this.layers[0]._unevaluatedLayout._values; this.textSizeData = Qh(this.zoom, e["text-size"]), this.iconSizeData = Qh(this.zoom, e["icon-size"]); const r = this.layers[0].layout, n = r.get("symbol-sort-key"), i = r.get("symbol-z-order"); this.canOverlap = r.get("text-allow-overlap") || r.get("icon-allow-overlap") || r.get("text-ignore-placement") || r.get("icon-ignore-placement"), this.sortFeaturesByKey = "viewport-y" !== i && void 0 !== n.constantOr(1), this.sortFeaturesByY = ("viewport-y" === i || "auto" === i && !this.sortFeaturesByKey) && this.canOverlap, this.writingModes = r.get("text-writing-mode").map((t => Vp[t])), this.stateDependentLayerIds = this.layers.filter((t => t.isStateDependent())).map((t => t.id)), this.sourceID = t.sourceID, this.projection = t.projection; } createArrays() { this.text = new ud(new fo(this.layers, this.zoom, (t => /^text/.test(t)))), this.icon = new ud(new fo(this.layers, this.zoom, (t => /^icon/.test(t)))), this.glyphOffsetArray = new La, this.lineVertexArray = new Fa, this.symbolInstances = new Va; } calculateGlyphDependencies(t, e, r, n, i) { for (let r = 0; r < t.length; r++) if (e[t.charCodeAt(r)] = !0, n && i) { const n = ip[t.charAt(r)]; n && (e[n.charCodeAt(0)] = !0); } } populate(t, e, r, n) { const i = this.layers[0], s = i.layout, a = "globe" === this.projection.name, o = s.get("text-font"), l = s.get("text-field"), u = s.get("icon-image"), c = ("constant" !== l.value.kind || l.value.value instanceof Be && !l.value.value.isEmpty() || l.value.value.toString().length > 0) && ("constant" !== o.value.kind || o.value.value.length > 0), h = "constant" !== u.value.kind || !!u.value.value || Object.keys(u.parameters).length > 0, p = s.get("symbol-sort-key"); if (this.features = [], !c && !h) return; const f = e.iconDependencies, d = e.glyphDependencies, y = e.availableImages, m = new $s(this.zoom); for (const { feature: e, id: l, index: u, sourceLayerIndex: g } of t) { const t = i._featureFilter.needGeometry, x = wu(e, t); if (!i._featureFilter.filter(m, x, r)) continue; if (t || (x.geometry = bu(e, r, n)), a && 1 !== e.type && r.z <= 5) { const t = x.geometry, e = .98078528056, n = (t, n) => Qo(Ol(t.x, t.y, r, 1), Ol(n.x, n.y, r, 1)) < e; for (let e = 0; e < t.length; e++) t[e] = mu(t[e], n); } let v, b; if (c) { const t = i.getValueAndResolveTokens("text-field", x, r, y), e = Be.factory(t); ld(e) && (this.hasRTLText = !0), (!this.hasRTLText || "unavailable" === Fs() || this.hasRTLText && js.isParsed()) && (v = np(e, i, x)); } if (h) { const t = i.getValueAndResolveTokens("icon-image", x, r, y); b = t instanceof Ee ? t : Ee.fromString(t); } if (!v && !b) continue; const w = this.sortFeaturesByKey ? p.evaluate(x, {}, r) : void 0; if (this.features.push({ id: l, text: v, icon: b, index: u, sourceLayerIndex: g, geometry: x.geometry, properties: e.properties, type: nd[e.type], sortKey: w }), b && (f[b.name] = !0), v) { const t = o.evaluate(x, {}, r).join(","), e = "map" === s.get("text-rotation-alignment") && "point" !== s.get("symbol-placement"); this.allowVerticalPlacement = this.writingModes && this.writingModes.indexOf(Vp.vertical) >= 0; for (const r of v.sections) if (r.image) f[r.image.name] = !0; else { const n = bs(v.toString()), i = r.fontStack || t, s = d[i] = d[i] || {}; this.calculateGlyphDependencies(r.text, s, e, this.allowVerticalPlacement, n); } } } "line" === s.get("symbol-placement") && (this.features = function(t) { const e = {}, r = {}, n = []; let i = 0; function s(e) { n.push(t[e]), i++; } function a(t, e, i) { const s = r[t]; return delete r[t], r[e] = s, n[s].geometry[0].pop(), n[s].geometry[0] = n[s].geometry[0].concat(i[0]), s } function o(t, r, i) { const s = e[r]; return delete e[r], e[t] = s, n[s].geometry[0].shift(), n[s].geometry[0] = i[0].concat(n[s].geometry[0]), s } function l(t, e, r) { const n = r ? e[0][e[0].length - 1] : e[0][0]; return `${t}:${n.x}:${n.y}` } for (let u = 0; u < t.length; u++) { const c = t[u], h = c.geometry, p = c.text ? c.text.toString() : null; if (!p) { s(u); continue } const f = l(p, h), d = l(p, h, !0); if (f in r && d in e && r[f] !== e[d]) { const t = o(f, d, h), i = a(f, d, n[t].geometry); delete e[f], delete r[d], r[l(p, n[i].geometry, !0)] = i, n[t].geometry = null; } else f in r ? a(f, d, h) : d in e ? o(f, d, h) : (s(u), e[f] = i - 1, r[d] = i - 1); } return n.filter((t => t.geometry)) }(this.features)), this.sortFeaturesByKey && this.features.sort(((t, e) => t.sortKey - e.sortKey)); } update(t, e, r, n) { this.stateDependentLayers.length && (this.text.programConfigurations.updatePaintArrays(t, e, this.layers, r, n), this.icon.programConfigurations.updatePaintArrays(t, e, this.layers, r, n)); } isEmpty() { return 0 === this.symbolInstances.length && !this.hasRTLText } uploadPending() { return !this.uploaded || this.text.programConfigurations.needsUpload || this.icon.programConfigurations.needsUpload } upload(t) { !this.uploaded && this.hasDebugData() && (this.textCollisionBox.upload(t), this.iconCollisionBox.upload(t)), this.text.upload(t, this.sortFeaturesByY, !this.uploaded, this.text.programConfigurations.needsUpload), this.icon.upload(t, this.sortFeaturesByY, !this.uploaded, this.icon.programConfigurations.needsUpload), this.uploaded = !0; } destroyDebugData() { this.textCollisionBox.destroy(), this.iconCollisionBox.destroy(); } getProjection() { return this.projectionInstance || (this.projectionInstance = rd(this.projection)), this.projectionInstance } destroy() { this.text.destroy(), this.icon.destroy(), this.hasDebugData() && this.destroyDebugData(); } addToLineVertexArray(t, e) { const r = this.lineVertexArray.length; if (void 0 !== t.segment) for (const { x: t, y: r } of e) this.lineVertexArray.emplaceBack(t, r); return { lineStartIndex: r, lineLength: this.lineVertexArray.length - r } } addSymbols(t, e, r, n, i, s, a, o, l, u, c, h, p, f) { const d = t.indexArray, y = t.layoutVertexArray, m = t.globeExtVertexArray, g = t.segments.prepareSegment(4 * e.length, y, d, this.canOverlap ? s.sortKey : void 0), x = this.glyphOffsetArray.length, v = g.vertexLength, b = this.allowVerticalPlacement && a === Vp.vertical ? Math.PI / 2 : 0, w = s.text && s.text.sections; for (let n = 0; n < e.length; n++) { const { tl: i, tr: a, bl: u, br: c, tex: h, pixelOffsetTL: x, pixelOffsetBR: v, minFontScaleX: _, minFontScaleY: A, glyphOffset: S, isSDF: k, sectionIndex: I } = e[n], M = g.vertexLength, T = S[1]; if (sd(y, l.x, l.y, i.x, T + i.y, h.x, h.y, r, k, x.x, x.y, _, A), sd(y, l.x, l.y, a.x, T + a.y, h.x + h.w, h.y, r, k, v.x, x.y, _, A), sd(y, l.x, l.y, u.x, T + u.y, h.x, h.y + h.h, r, k, x.x, v.y, _, A), sd(y, l.x, l.y, c.x, T + c.y, h.x + h.w, h.y + h.h, r, k, v.x, v.y, _, A), o) { const { x: e, y: r, z: n } = o.anchor, [i, s, a] = o.up; ad(m, e, r, n, i, s, a), ad(m, e, r, n, i, s, a), ad(m, e, r, n, i, s, a), ad(m, e, r, n, i, s, a), od(t.dynamicLayoutVertexArray, e, r, n, b); } else od(t.dynamicLayoutVertexArray, l.x, l.y, l.z, b); d.emplaceBack(M, M + 1, M + 2), d.emplaceBack(M + 1, M + 2, M + 3), g.vertexLength += 4, g.primitiveLength += 2, this.glyphOffsetArray.emplaceBack(S[0]), n !== e.length - 1 && I === e[n + 1].sectionIndex || t.programConfigurations.populatePaintArrays(y.length, s, s.index, {}, p, f, w && w[I]); } const _ = o ? o.anchor : l; t.placedSymbolArray.emplaceBack(_.x, _.y, _.z, l.x, l.y, x, this.glyphOffsetArray.length - x, v, u, c, l.segment, r ? r[0] : 0, r ? r[1] : 0, n[0], n[1], a, 0, !1, 0, h, 0); } _commitLayoutVertex(t, e, r, n, i, s, a) { t.emplaceBack(e, r, n, i, s, Math.round(a.x), Math.round(a.y)); } _addCollisionDebugVertices(t, e, r, n, i, s, a) { const o = r.segments.prepareSegment(4, r.layoutVertexArray, r.indexArray), l = o.vertexLength, u = a.tileAnchorX, c = a.tileAnchorY; for (let t = 0; t < 4; t++) r.collisionVertexArray.emplaceBack(0, 0, 0, 0); r.collisionVertexArrayExt.emplaceBack(e, -t.padding, -t.padding), r.collisionVertexArrayExt.emplaceBack(e, t.padding, -t.padding), r.collisionVertexArrayExt.emplaceBack(e, t.padding, t.padding), r.collisionVertexArrayExt.emplaceBack(e, -t.padding, t.padding), this._commitLayoutVertex(r.layoutVertexArray, n, i, s, u, c, new d(t.x1, t.y1)), this._commitLayoutVertex(r.layoutVertexArray, n, i, s, u, c, new d(t.x2, t.y1)), this._commitLayoutVertex(r.layoutVertexArray, n, i, s, u, c, new d(t.x2, t.y2)), this._commitLayoutVertex(r.layoutVertexArray, n, i, s, u, c, new d(t.x1, t.y2)), o.vertexLength += 4; const h = r.indexArray; h.emplaceBack(l, l + 1), h.emplaceBack(l + 1, l + 2), h.emplaceBack(l + 2, l + 3), h.emplaceBack(l + 3, l), o.primitiveLength += 4; } _addTextDebugCollisionBoxes(t, e, r, n, i, s) { for (let a = n; a < i; a++) { const n = r.get(a), i = this.getSymbolInstanceTextSize(t, s, e, a); this._addCollisionDebugVertices(n, i, this.textCollisionBox, n.projectedAnchorX, n.projectedAnchorY, n.projectedAnchorZ, s); } } _addIconDebugCollisionBoxes(t, e, r, n, i, s) { for (let a = n; a < i; a++) { const n = r.get(a), i = this.getSymbolInstanceIconSize(t, e, s.placedIconSymbolIndex); this._addCollisionDebugVertices(n, i, this.iconCollisionBox, n.projectedAnchorX, n.projectedAnchorY, n.projectedAnchorZ, s); } } generateCollisionDebugBuffers(t, e) { this.hasDebugData() && this.destroyDebugData(), this.textCollisionBox = new cd(ga, Yh.members, Ma), this.iconCollisionBox = new cd(ga, Yh.members, Ma); const r = ep(this.iconSizeData, t), n = ep(this.textSizeData, t); for (let i = 0; i < this.symbolInstances.length; i++) { const s = this.symbolInstances.get(i); this._addTextDebugCollisionBoxes(n, t, e, s.textBoxStartIndex, s.textBoxEndIndex, s), this._addTextDebugCollisionBoxes(n, t, e, s.verticalTextBoxStartIndex, s.verticalTextBoxEndIndex, s), this._addIconDebugCollisionBoxes(r, t, e, s.iconBoxStartIndex, s.iconBoxEndIndex, s), this._addIconDebugCollisionBoxes(r, t, e, s.verticalIconBoxStartIndex, s.verticalIconBoxEndIndex, s); } } getSymbolInstanceTextSize(t, e, r, n) { const i = this.text.placedSymbolArray.get(e.rightJustifiedTextSymbolIndex >= 0 ? e.rightJustifiedTextSymbolIndex : e.centerJustifiedTextSymbolIndex >= 0 ? e.centerJustifiedTextSymbolIndex : e.leftJustifiedTextSymbolIndex >= 0 ? e.leftJustifiedTextSymbolIndex : e.verticalPlacedTextSymbolIndex >= 0 ? e.verticalPlacedTextSymbolIndex : n), s = tp(this.textSizeData, t, i) / Wh; return this.tilePixelRatio * s } getSymbolInstanceIconSize(t, e, r) { const n = this.icon.placedSymbolArray.get(r), i = tp(this.iconSizeData, t, n); return this.tilePixelRatio * i } _commitDebugCollisionVertexUpdate(t, e, r) { t.emplaceBack(e, -r, -r), t.emplaceBack(e, r, -r), t.emplaceBack(e, r, r), t.emplaceBack(e, -r, r); } _updateTextDebugCollisionBoxes(t, e, r, n, i, s) { for (let a = n; a < i; a++) { const n = r.get(a), i = this.getSymbolInstanceTextSize(t, s, e, a); this._commitDebugCollisionVertexUpdate(this.textCollisionBox.collisionVertexArrayExt, i, n.padding); } } _updateIconDebugCollisionBoxes(t, e, r, n, i, s) { for (let a = n; a < i; a++) { const n = r.get(a), i = this.getSymbolInstanceIconSize(t, e, s); this._commitDebugCollisionVertexUpdate(this.iconCollisionBox.collisionVertexArrayExt, i, n.padding); } } updateCollisionDebugBuffers(t, e) { if (!this.hasDebugData()) return; this.hasTextCollisionBoxData() && this.textCollisionBox.collisionVertexArrayExt.clear(), this.hasIconCollisionBoxData() && this.iconCollisionBox.collisionVertexArrayExt.clear(); const r = ep(this.iconSizeData, t), n = ep(this.textSizeData, t); for (let i = 0; i < this.symbolInstances.length; i++) { const s = this.symbolInstances.get(i); this._updateTextDebugCollisionBoxes(n, t, e, s.textBoxStartIndex, s.textBoxEndIndex, s), this._updateTextDebugCollisionBoxes(n, t, e, s.verticalTextBoxStartIndex, s.verticalTextBoxEndIndex, s), this._updateIconDebugCollisionBoxes(r, t, e, s.iconBoxStartIndex, s.iconBoxEndIndex, s.placedIconSymbolIndex), this._updateIconDebugCollisionBoxes(r, t, e, s.verticalIconBoxStartIndex, s.verticalIconBoxEndIndex, s.placedIconSymbolIndex); } this.hasTextCollisionBoxData() && this.textCollisionBox.collisionVertexBufferExt && this.textCollisionBox.collisionVertexBufferExt.updateData(this.textCollisionBox.collisionVertexArrayExt), this.hasIconCollisionBoxData() && this.iconCollisionBox.collisionVertexBufferExt && this.iconCollisionBox.collisionVertexBufferExt.updateData(this.iconCollisionBox.collisionVertexArrayExt); } _deserializeCollisionBoxesForSymbol(t, e, r, n, i, s, a, o, l) { const u = {}; if (e < r) { const { x1: r, y1: n, x2: i, y2: s, padding: a, projectedAnchorX: o, projectedAnchorY: l, projectedAnchorZ: c, tileAnchorX: h, tileAnchorY: p, featureIndex: f } = t.get(e); u.textBox = { x1: r, y1: n, x2: i, y2: s, padding: a, projectedAnchorX: o, projectedAnchorY: l, projectedAnchorZ: c, tileAnchorX: h, tileAnchorY: p }, u.textFeatureIndex = f; } if (n < i) { const { x1: e, y1: r, x2: i, y2: s, padding: a, projectedAnchorX: o, projectedAnchorY: l, projectedAnchorZ: c, tileAnchorX: h, tileAnchorY: p, featureIndex: f } = t.get(n); u.verticalTextBox = { x1: e, y1: r, x2: i, y2: s, padding: a, projectedAnchorX: o, projectedAnchorY: l, projectedAnchorZ: c, tileAnchorX: h, tileAnchorY: p }, u.verticalTextFeatureIndex = f; } if (s < a) { const { x1: e, y1: r, x2: n, y2: i, padding: a, projectedAnchorX: o, projectedAnchorY: l, projectedAnchorZ: c, tileAnchorX: h, tileAnchorY: p, featureIndex: f } = t.get(s); u.iconBox = { x1: e, y1: r, x2: n, y2: i, padding: a, projectedAnchorX: o, projectedAnchorY: l, projectedAnchorZ: c, tileAnchorX: h, tileAnchorY: p }, u.iconFeatureIndex = f; } if (o < l) { const { x1: e, y1: r, x2: n, y2: i, padding: s, projectedAnchorX: a, projectedAnchorY: l, projectedAnchorZ: c, tileAnchorX: h, tileAnchorY: p, featureIndex: f } = t.get(o); u.verticalIconBox = { x1: e, y1: r, x2: n, y2: i, padding: s, projectedAnchorX: a, projectedAnchorY: l, projectedAnchorZ: c, tileAnchorX: h, tileAnchorY: p }, u.verticalIconFeatureIndex = f; } return u } deserializeCollisionBoxes(t) { this.collisionArrays = []; for (let e = 0; e < this.symbolInstances.length; e++) { const r = this.symbolInstances.get(e); this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t, r.textBoxStartIndex, r.textBoxEndIndex, r.verticalTextBoxStartIndex, r.verticalTextBoxEndIndex, r.iconBoxStartIndex, r.iconBoxEndIndex, r.verticalIconBoxStartIndex, r.verticalIconBoxEndIndex)); } } hasTextData() { return this.text.segments.get().length > 0 } hasIconData() { return this.icon.segments.get().length > 0 } hasDebugData() { return this.textCollisionBox && this.iconCollisionBox } hasTextCollisionBoxData() { return this.hasDebugData() && this.textCollisionBox.segments.get().length > 0 } hasIconCollisionBoxData() { return this.hasDebugData() && this.iconCollisionBox.segments.get().length > 0 } addIndicesForPlacedSymbol(t, e) { const r = t.placedSymbolArray.get(e), n = r.vertexStartIndex + 4 * r.numGlyphs; for (let e = r.vertexStartIndex; e < n; e += 4) t.indexArray.emplaceBack(e, e + 1, e + 2), t.indexArray.emplaceBack(e + 1, e + 2, e + 3); } getSortedSymbolIndexes(t) { if (this.sortedAngle === t && void 0 !== this.symbolInstanceIndexes) return this.symbolInstanceIndexes; const e = Math.sin(t), r = Math.cos(t), n = [], i = [], s = []; for (let t = 0; t < this.symbolInstances.length; ++t) { s.push(t); const a = this.symbolInstances.get(t); n.push(0 | Math.round(e * a.tileAnchorX + r * a.tileAnchorY)), i.push(a.featureIndex); } return s.sort(((t, e) => n[t] - n[e] || i[e] - i[t])), s } addToSortKeyRanges(t, e) { const r = this.sortKeyRanges[this.sortKeyRanges.length - 1]; r && r.sortKey === e ? r.symbolInstanceEnd = t + 1 : this.sortKeyRanges.push({ sortKey: e, symbolInstanceStart: t, symbolInstanceEnd: t + 1 }); } sortFeatures(t) { if (this.sortFeaturesByY && this.sortedAngle !== t && !(this.text.segments.get().length > 1 || this.icon.segments.get().length > 1)) { this.symbolInstanceIndexes = this.getSortedSymbolIndexes(t), this.sortedAngle = t, this.text.indexArray.clear(), this.icon.indexArray.clear(), this.featureSortOrder = []; for (const t of this.symbolInstanceIndexes) { const e = this.symbolInstances.get(t); this.featureSortOrder.push(e.featureIndex); const { rightJustifiedTextSymbolIndex: r, centerJustifiedTextSymbolIndex: n, leftJustifiedTextSymbolIndex: i, verticalPlacedTextSymbolIndex: s, placedIconSymbolIndex: a, verticalPlacedIconSymbolIndex: o } = e; r >= 0 && this.addIndicesForPlacedSymbol(this.text, r), n >= 0 && n !== r && this.addIndicesForPlacedSymbol(this.text, n), i >= 0 && i !== n && i !== r && this.addIndicesForPlacedSymbol(this.text, i), s >= 0 && this.addIndicesForPlacedSymbol(this.text, s), a >= 0 && this.addIndicesForPlacedSymbol(this.icon, a), o >= 0 && this.addIndicesForPlacedSymbol(this.icon, o); } this.text.indexBuffer && this.text.indexBuffer.updateData(this.text.indexArray), this.icon.indexBuffer && this.icon.indexBuffer.updateData(this.icon.indexArray); } } } Oi(hd, "SymbolBucket", { omit: ["layers", "collisionBoxArray", "features", "compareText"] }), hd.MAX_GLYPHS = 65535, hd.addDynamicAttributes = od; const pd = new Js({ "symbol-placement": new Ys(Ht.layout_symbol["symbol-placement"]), "symbol-spacing": new Ys(Ht.layout_symbol["symbol-spacing"]), "symbol-avoid-edges": new Ys(Ht.layout_symbol["symbol-avoid-edges"]), "symbol-sort-key": new Hs(Ht.layout_symbol["symbol-sort-key"]), "symbol-z-order": new Ys(Ht.layout_symbol["symbol-z-order"]), "icon-allow-overlap": new Ys(Ht.layout_symbol["icon-allow-overlap"]), "icon-ignore-placement": new Ys(Ht.layout_symbol["icon-ignore-placement"]), "icon-optional": new Ys(Ht.layout_symbol["icon-optional"]), "icon-rotation-alignment": new Ys(Ht.layout_symbol["icon-rotation-alignment"]), "icon-size": new Hs(Ht.layout_symbol["icon-size"]), "icon-text-fit": new Ys(Ht.layout_symbol["icon-text-fit"]), "icon-text-fit-padding": new Ys(Ht.layout_symbol["icon-text-fit-padding"]), "icon-image": new Hs(Ht.layout_symbol["icon-image"]), "icon-rotate": new Hs(Ht.layout_symbol["icon-rotate"]), "icon-padding": new Ys(Ht.layout_symbol["icon-padding"]), "icon-keep-upright": new Ys(Ht.layout_symbol["icon-keep-upright"]), "icon-offset": new Hs(Ht.layout_symbol["icon-offset"]), "icon-anchor": new Hs(Ht.layout_symbol["icon-anchor"]), "icon-pitch-alignment": new Ys(Ht.layout_symbol["icon-pitch-alignment"]), "text-pitch-alignment": new Ys(Ht.layout_symbol["text-pitch-alignment"]), "text-rotation-alignment": new Ys(Ht.layout_symbol["text-rotation-alignment"]), "text-field": new Hs(Ht.layout_symbol["text-field"]), "text-font": new Hs(Ht.layout_symbol["text-font"]), "text-size": new Hs(Ht.layout_symbol["text-size"]), "text-max-width": new Hs(Ht.layout_symbol["text-max-width"]), "text-line-height": new Hs(Ht.layout_symbol["text-line-height"]), "text-letter-spacing": new Hs(Ht.layout_symbol["text-letter-spacing"]), "text-justify": new Hs(Ht.layout_symbol["text-justify"]), "text-radial-offset": new Hs(Ht.layout_symbol["text-radial-offset"]), "text-variable-anchor": new Ys(Ht.layout_symbol["text-variable-anchor"]), "text-anchor": new Hs(Ht.layout_symbol["text-anchor"]), "text-max-angle": new Ys(Ht.layout_symbol["text-max-angle"]), "text-writing-mode": new Ys(Ht.layout_symbol["text-writing-mode"]), "text-rotate": new Hs(Ht.layout_symbol["text-rotate"]), "text-padding": new Ys(Ht.layout_symbol["text-padding"]), "text-keep-upright": new Ys(Ht.layout_symbol["text-keep-upright"]), "text-transform": new Hs(Ht.layout_symbol["text-transform"]), "text-offset": new Hs(Ht.layout_symbol["text-offset"]), "text-allow-overlap": new Ys(Ht.layout_symbol["text-allow-overlap"]), "text-ignore-placement": new Ys(Ht.layout_symbol["text-ignore-placement"]), "text-optional": new Ys(Ht.layout_symbol["text-optional"]) }); var fd = { paint: new Js({ "icon-opacity": new Hs(Ht.paint_symbol["icon-opacity"]), "icon-color": new Hs(Ht.paint_symbol["icon-color"]), "icon-halo-color": new Hs(Ht.paint_symbol["icon-halo-color"]), "icon-halo-width": new Hs(Ht.paint_symbol["icon-halo-width"]), "icon-halo-blur": new Hs(Ht.paint_symbol["icon-halo-blur"]), "icon-translate": new Ys(Ht.paint_symbol["icon-translate"]), "icon-translate-anchor": new Ys(Ht.paint_symbol["icon-translate-anchor"]), "text-opacity": new Hs(Ht.paint_symbol["text-opacity"]), "text-color": new Hs(Ht.paint_symbol["text-color"], { runtimeType: le, getOverride: t => t.textColor, hasOverride: t => !!t.textColor }), "text-halo-color": new Hs(Ht.paint_symbol["text-halo-color"]), "text-halo-width": new Hs(Ht.paint_symbol["text-halo-width"]), "text-halo-blur": new Hs(Ht.paint_symbol["text-halo-blur"]), "text-translate": new Ys(Ht.paint_symbol["text-translate"]), "text-translate-anchor": new Ys(Ht.paint_symbol["text-translate-anchor"]) }), layout: pd }; class dd { constructor(t) { this.type = t.property.overrides ? t.property.overrides.runtimeType : ie, this.defaultValue = t; } evaluate(t) { if (t.formattedSection) { const e = this.defaultValue.property.overrides; if (e && e.hasOverride(t.formattedSection)) return e.getOverride(t.formattedSection) } return t.feature && t.featureState ? this.defaultValue.evaluate(t.feature, t.featureState) : this.defaultValue.property.specification.default } eachChild(t) { this.defaultValue.isConstant() || t(this.defaultValue.value._styleExpression.expression); } outputDefined() { return !1 } serialize() { return null } } Oi(dd, "FormatSectionOverride", { omit: ["defaultValue"] }); class yd extends wo { constructor(t) { super(t, fd); } recalculate(t, e) { super.recalculate(t, e), "auto" === this.layout.get("icon-rotation-alignment") && (this.layout._values["icon-rotation-alignment"] = "point" !== this.layout.get("symbol-placement") ? "map" : "viewport"), "auto" === this.layout.get("text-rotation-alignment") && (this.layout._values["text-rotation-alignment"] = "point" !== this.layout.get("symbol-placement") ? "map" : "viewport"), "auto" === this.layout.get("text-pitch-alignment") && (this.layout._values["text-pitch-alignment"] = this.layout.get("text-rotation-alignment")), "auto" === this.layout.get("icon-pitch-alignment") && (this.layout._values["icon-pitch-alignment"] = this.layout.get("icon-rotation-alignment")); const r = this.layout.get("text-writing-mode"); if (r) { const t = []; for (const e of r) t.indexOf(e) < 0 && t.push(e); this.layout._values["text-writing-mode"] = t; } else this.layout._values["text-writing-mode"] = "point" === this.layout.get("symbol-placement") ? ["horizontal"] : ["horizontal", "vertical"]; this._setPaintOverrides(); } getValueAndResolveTokens(t, e, r, n) { const i = this.layout.get(t).evaluate(e, {}, r, n), s = this._unevaluatedLayout._values[t]; return s.isDataDriven() || Nn(s.value) || !i ? i : function(t, e) { return e.replace(/{([^{}]+)}/g, ((e, r) => r in t ? String(t[r]) : "")) }(e.properties, i) } createBucket(t) { return new hd(t) } queryRadius() { return 0 } queryIntersectsFeature() { return !1 } _setPaintOverrides() { for (const t of fd.paint.overridableProperties) { if (!yd.hasPaintOverride(this.layout, t)) continue; const e = this.paint.get(t), r = new dd(e), n = new qn(r, e.property.specification); let i = null; i = "constant" === e.value.kind || "source" === e.value.kind ? new Zn("source", n) : new Xn("composite", n, e.value.zoomStops, e.value._interpolationType), this.paint._values[t] = new Xs(e.property, i, e.parameters); } } _handleOverridablePaintPropertyUpdate(t, e, r) { return !(!this.layout || e.isDataDriven() || r.isDataDriven()) && yd.hasPaintOverride(this.layout, t) } static hasPaintOverride(t, e) { const r = t.get("text-field"), n = fd.paint.properties[e]; let i = !1; const s = t => { for (const e of t) if (n.overrides && n.overrides.hasOverride(e)) return void(i = !0) }; if ("constant" === r.value.kind && r.value.value instanceof Be) s(r.value.value.sections); else if ("source" === r.value.kind) { const t = e => { i || (e instanceof Fe && De(e.value) === pe ? s(e.value.sections) : e instanceof Oe ? s(e.sections) : e.eachChild(t)); }, e = r.value; e._styleExpression && t(e._styleExpression.expression); } return i } getProgramConfiguration(t) { return new po(this, t) } } var md = { paint: new Js({ "background-color": new Ys(Ht.paint_background["background-color"]), "background-pattern": new Ys(Ht.paint_background["background-pattern"]), "background-opacity": new Ys(Ht.paint_background["background-opacity"]) }) }, gd = { paint: new Js({ "raster-opacity": new Ys(Ht.paint_raster["raster-opacity"]), "raster-hue-rotate": new Ys(Ht.paint_raster["raster-hue-rotate"]), "raster-brightness-min": new Ys(Ht.paint_raster["raster-brightness-min"]), "raster-brightness-max": new Ys(Ht.paint_raster["raster-brightness-max"]), "raster-saturation": new Ys(Ht.paint_raster["raster-saturation"]), "raster-contrast": new Ys(Ht.paint_raster["raster-contrast"]), "raster-resampling": new Ys(Ht.paint_raster["raster-resampling"]), "raster-fade-duration": new Ys(Ht.paint_raster["raster-fade-duration"]) }) }; class xd extends wo { constructor(t) { super(t, {}), this.implementation = t; } is3D() { return "3d" === this.implementation.renderingMode } hasOffscreenPass() { return void 0 !== this.implementation.prerender } isLayerDraped() { return void 0 !== this.implementation.renderToTile } shouldRedrape() { return !!this.implementation.shouldRerenderTiles && this.implementation.shouldRerenderTiles() } recalculate() {} updateTransitions() {} hasTransition() { return !1 } serialize() {} onAdd(t) { this.implementation.onAdd && this.implementation.onAdd(t, t.painter.context.gl); } onRemove(t) { this.implementation.onRemove && this.implementation.onRemove(t, t.painter.context.gl); } } var vd = { paint: new Js({ "sky-type": new Ys(Ht.paint_sky["sky-type"]), "sky-atmosphere-sun": new Ys(Ht.paint_sky["sky-atmosphere-sun"]), "sky-atmosphere-sun-intensity": new Ys(Ht.paint_sky["sky-atmosphere-sun-intensity"]), "sky-gradient-center": new Ys(Ht.paint_sky["sky-gradient-center"]), "sky-gradient-radius": new Ys(Ht.paint_sky["sky-gradient-radius"]), "sky-gradient": new Ws(Ht.paint_sky["sky-gradient"]), "sky-atmosphere-halo-color": new Ys(Ht.paint_sky["sky-atmosphere-halo-color"]), "sky-atmosphere-color": new Ys(Ht.paint_sky["sky-atmosphere-color"]), "sky-opacity": new Ys(Ht.paint_sky["sky-opacity"]) }) }; function bd(t, e, r) { const n = [0, 0, 1], i = hl([]); return fl(i, i, r ? -x(t) + Math.PI : x(t)), pl(i, i, -x(e)), rl(n, n, i), Jo(n, n) } const wd = { circle: class extends wo { constructor(t) { super(t, Ou); } createBucket(t) { return new Su(t) } queryRadius(t) { const e = t; return Fu("circle-radius", this, e) + Fu("circle-stroke-width", this, e) + Ru(this.paint.get("circle-translate")) } queryIntersectsFeature(t, e, r, n, i, s, a, o) { const l = $u(this.paint.get("circle-translate"), this.paint.get("circle-translate-anchor"), s.angle, t.pixelToTileUnitsFactor), u = this.paint.get("circle-radius").evaluate(e, r) + this.paint.get("circle-stroke-width").evaluate(e, r); return qu(t, n, s, a, o, "map" === this.paint.get("circle-pitch-alignment"), "map" === this.paint.get("circle-pitch-scale"), l, u) } getProgramIds() { return ["circle"] } getProgramConfiguration(t) { return new po(this, t) } }, heatmap: class extends wo { createBucket(t) { return new Ku(t) } constructor(t) { super(t, tc), this._updateColorRamp(); } _handleSpecialPaintPropertyUpdate(t) { "heatmap-color" === t && this._updateColorRamp(); } _updateColorRamp() { this.colorRamp = ec({ expression: this._transitionablePaint._values["heatmap-color"].value.expression, evaluationKey: "heatmapDensity", image: this.colorRamp }), this.colorRampTexture = null; } resize() { this.heatmapFbo && (this.heatmapFbo.destroy(), this.heatmapFbo = null); } queryRadius(t) { return Fu("heatmap-radius", this, t) } queryIntersectsFeature(t, e, r, n, i, s, a, o) { const l = this.paint.get("heatmap-radius").evaluate(e, r); return qu(t, n, s, a, o, !0, !0, new d(0, 0), l) } hasOffscreenPass() { return 0 !== this.paint.get("heatmap-opacity") && "none" !== this.visibility } getProgramIds() { return ["heatmap", "heatmapTexture"] } getProgramConfiguration(t) { return new po(this, t) } }, hillshade: class extends wo { constructor(t) { super(t, rc); } hasOffscreenPass() { return 0 !== this.paint.get("hillshade-exaggeration") && "none" !== this.visibility } getProgramIds() { return ["hillshade", "hillshadePrepare"] } }, fill: class extends wo { constructor(t) { super(t, Oc); } getProgramIds() { const t = this.paint.get("fill-pattern"), e = t && t.constantOr(1), r = [e ? "fillPattern" : "fill"]; return this.paint.get("fill-antialias") && r.push(e && !this.getPaintProperty("fill-outline-color") ? "fillOutlinePattern" : "fillOutline"), r } getProgramConfiguration(t) { return new po(this, t) } recalculate(t, e) { super.recalculate(t, e); const r = this.paint._values["fill-outline-color"]; "constant" === r.value.kind && void 0 === r.value.value && (this.paint._values["fill-outline-color"] = this.paint._values["fill-color"]); } createBucket(t) { return new $c(t) } queryRadius() { return Ru(this.paint.get("fill-translate")) } queryIntersectsFeature(t, e, r, n, i, s) { return !t.queryGeometry.isAboveHorizon && Mu(ju(t.tilespaceGeometry, this.paint.get("fill-translate"), this.paint.get("fill-translate-anchor"), s.angle, t.pixelToTileUnitsFactor), n) } isTileClipped() { return !0 } }, "fill-extrusion": class extends wo { constructor(t) { super(t, Ah); } createBucket(t) { return new fh(t) } queryRadius() { return Ru(this.paint.get("fill-extrusion-translate")) } is3D() { return !0 } getProgramIds() { return [this.paint.get("fill-extrusion-pattern").constantOr(1) ? "fillExtrusionPattern" : "fillExtrusion"] } getProgramConfiguration(t) { return new po(this, t) } queryIntersectsFeature(t, e, r, n, i, s, a, o, l) { const u = $u(this.paint.get("fill-extrusion-translate"), this.paint.get("fill-extrusion-translate-anchor"), s.angle, t.pixelToTileUnitsFactor), c = this.paint.get("fill-extrusion-height").evaluate(e, r), h = this.paint.get("fill-extrusion-base").evaluate(e, r), p = [0, 0], f = o && s.elevation, y = s.elevation ? s.elevation.exaggeration() : 1, m = t.tile.getBucket(this); if (f && m instanceof fh) { const t = m.centroidVertexArray, e = l + 1; e < t.length && (p[0] = t.geta_centroid_pos0(e), p[1] = t.geta_centroid_pos1(e)); } if (0 === p[0] && 1 === p[1]) return !1; "globe" === s.projection.name && (n = wh([n], [new d(0, 0), new d(ko, ko)], t.tileID.canonical).map((t => t.polygon)).flat()); const g = f ? o : null, [x, v] = function(t, e, r, n, i, s, a, o, l, u, c) { return "globe" === t.projection.name ? function(t, e, r, n, i, s, a, o, l, u, c) { const h = [], p = [], f = t.projection.upVectorScale(c, t.center.lat, t.worldSize).metersToTile, d = [0, 0, 0, 1], y = [0, 0, 0, 1], m = (t, e, r, n) => { t[0] = e, t[1] = r, t[2] = n, t[3] = 1; }, g = bh(); r > 0 && (r += g), n += g; for (const g of e) { const e = [], x = []; for (const h of g) { const p = h.x + i.x, g = h.y + i.y, v = t.projection.projectTilePoint(p, g, c), b = t.projection.upVector(c, h.x, h.y); let w = r, _ = n; if (a) { const t = Ch(p, g, r, n, a, o, l, u); w += t.base, _ += t.top; } 0 !== r ? m(d, v.x + b[0] * f * w, v.y + b[1] * f * w, v.z + b[2] * f * w) : m(d, v.x, v.y, v.z), m(y, v.x + b[0] * f * _, v.y + b[1] * f * _, v.z + b[2] * f * _), el(d, d, s), el(y, y, s), e.push(new zh(d[0], d[1], d[2])), x.push(new zh(y[0], y[1], y[2])); } h.push(e), p.push(x); } return [h, p] }(t, e, r, n, i, s, a, o, l, u, c) : a ? function(t, e, r, n, i, s, a, o, l) { const u = [], c = [], h = [0, 0, 0, 1]; for (const p of t) { const t = [], f = []; for (const u of p) { const c = u.x + n.x, p = u.y + n.y, d = Ch(c, p, e, r, s, a, o, l); h[0] = c, h[1] = p, h[2] = d.base, h[3] = 1, ul(h, h, i), h[3] = Math.max(h[3], 1e-5); const y = new zh(h[0] / h[3], h[1] / h[3], h[2] / h[3]); h[0] = c, h[1] = p, h[2] = d.top, h[3] = 1, ul(h, h, i), h[3] = Math.max(h[3], 1e-5); const m = new zh(h[0] / h[3], h[1] / h[3], h[2] / h[3]); t.push(y), f.push(m); } u.push(t), c.push(f); } return [u, c] }(e, r, n, i, s, a, o, l, u) : function(t, e, r, n, i) { const s = [], a = [], o = i[8] * e, l = i[9] * e, u = i[10] * e, c = i[11] * e, h = i[8] * r, p = i[9] * r, f = i[10] * r, d = i[11] * r; for (const e of t) { const t = [], r = []; for (const s of e) { const e = s.x + n.x, a = s.y + n.y, y = i[0] * e + i[4] * a + i[12], m = i[1] * e + i[5] * a + i[13], g = i[2] * e + i[6] * a + i[14], x = i[3] * e + i[7] * a + i[15], v = y + o, b = m + l, w = g + u, _ = Math.max(x + c, 1e-5), A = y + h, S = m + p, k = g + f, I = Math.max(x + d, 1e-5); t.push(new zh(v / _, b / _, w / _)), r.push(new zh(A / I, S / I, k / I)); } s.push(t), a.push(r); } return [s, a] }(e, r, n, i, s) }(s, n, h, c, u, a, g, p, y, s.center.lat, t.tileID.canonical), b = t.queryGeometry; return function(t, e, r) { let n = 1 / 0; Mu(r, e) && (n = Eh(r, e[0])); for (let i = 0; i < e.length; i++) { const s = e[i], a = t[i]; for (let t = 0; t < s.length - 1; t++) { const e = s[t], i = [e, s[t + 1], a[t + 1], a[t], e]; ku(r, i) && (n = Math.min(n, Eh(r, i))); } } return n !== 1 / 0 && n }(x, v, b.isPointQuery() ? b.screenBounds : b.screenGeometry) } }, line: class extends wo { constructor(t) { super(t, Uh), this.gradientVersion = 0; } _handleSpecialPaintPropertyUpdate(t) { if ("line-gradient" === t) { const t = this._transitionablePaint._values["line-gradient"].value.expression; this.stepInterpolant = t._styleExpression && t._styleExpression.expression instanceof Ir, this.gradientVersion = (this.gradientVersion + 1) % Number.MAX_SAFE_INTEGER; } } gradientExpression() { return this._transitionablePaint._values["line-gradient"].value.expression } widthExpression() { return this._transitionablePaint._values["line-width"].value.expression } recalculate(t, e) { super.recalculate(t, e), this.paint._values["line-floorwidth"] = Oh.possiblyEvaluate(this._transitioningPaint._values["line-width"].value, t); } createBucket(t) { return new jh(t) } getProgramIds() { return [this.paint.get("line-pattern").constantOr(1) ? "linePattern" : "line"] } getProgramConfiguration(t) { return new po(this, t) } queryRadius(t) { const e = t, r = qh(Fu("line-width", this, e), Fu("line-gap-width", this, e)), n = Fu("line-offset", this, e); return r / 2 + Math.abs(n) + Ru(this.paint.get("line-translate")) } queryIntersectsFeature(t, e, r, n, i, s) { if (t.queryGeometry.isAboveHorizon) return !1; const a = ju(t.tilespaceGeometry, this.paint.get("line-translate"), this.paint.get("line-translate-anchor"), s.angle, t.pixelToTileUnitsFactor), o = t.pixelToTileUnitsFactor / 2 * qh(this.paint.get("line-width").evaluate(e, r), this.paint.get("line-gap-width").evaluate(e, r)), l = this.paint.get("line-offset").evaluate(e, r); return l && (n = function(t, e) { const r = [], n = new d(0, 0); for (let i = 0; i < t.length; i++) { const s = t[i], a = []; for (let t = 0; t < s.length; t++) { const r = s[t - 1], i = s[t], o = s[t + 1], l = 0 === t ? n : i.sub(r)._unit()._perp(), u = t === s.length - 1 ? n : o.sub(i)._unit()._perp(), c = l._add(u)._unit(); c._mult(1 / (c.x * u.x + c.y * u.y)), a.push(c._mult(e)._add(i)); } r.push(a); } return r }(n, l * t.pixelToTileUnitsFactor)), function(t, e, r) { for (let n = 0; n < e.length; n++) { const i = e[n]; if (t.length >= 3) for (let e = 0; e < i.length; e++) if (Du(t, i[e])) return !0; if (Tu(t, i, r)) return !0 } return !1 }(a, n, o) } isTileClipped() { return !0 } }, symbol: yd, background: class extends wo { constructor(t) { super(t, md); } getProgramIds() { return [this.paint.get("background-pattern") ? "backgroundPattern" : "background"] } }, raster: class extends wo { constructor(t) { super(t, gd); } getProgramIds() { return ["raster"] } }, sky: class extends wo { constructor(t) { super(t, vd), this._updateColorRamp(); } _handleSpecialPaintPropertyUpdate(t) { "sky-gradient" === t ? this._updateColorRamp() : "sky-atmosphere-sun" !== t && "sky-atmosphere-halo-color" !== t && "sky-atmosphere-color" !== t && "sky-atmosphere-sun-intensity" !== t || (this._skyboxInvalidated = !0); } _updateColorRamp() { this.colorRamp = ec({ expression: this._transitionablePaint._values["sky-gradient"].value.expression, evaluationKey: "skyRadialProgress" }), this.colorRampTexture && (this.colorRampTexture.destroy(), this.colorRampTexture = null); } needsSkyboxCapture(t) { if (this._skyboxInvalidated || !this.skyboxTexture || !this.skyboxGeometry) return !0; if (!this.paint.get("sky-atmosphere-sun")) { const e = t.style.light.properties.get("position"); return this._lightPosition.azimuthal !== e.azimuthal || this._lightPosition.polar !== e.polar } return !1 } getCenter(t, e) { if ("atmosphere" === this.paint.get("sky-type")) { const r = this.paint.get("sky-atmosphere-sun"), n = !r, i = t.style.light, s = i.properties.get("position"); return n && "viewport" === i.properties.get("anchor") && U("The sun direction is attached to a light with viewport anchor, lighting may behave unexpectedly."), n ? bd(s.azimuthal, 90 - s.polar, e) : bd(r[0], 90 - r[1], e) } const r = this.paint.get("sky-gradient-center"); return bd(r[0], 90 - r[1], e) } is3D() { return !1 } isSky() { return !0 } markSkyboxValid(t) { this._skyboxInvalidated = !1, this._lightPosition = t.style.light.properties.get("position"); } hasOffscreenPass() { return !0 } getProgramIds() { const t = this.paint.get("sky-type"); return "atmosphere" === t ? ["skyboxCapture", "skybox"] : "gradient" === t ? ["skyboxGradient"] : null } } }; class _d { constructor(t, e, r, n) { this.context = t, this.format = r, this.texture = t.gl.createTexture(), this.update(e, n); } update(t, r, n) { const { width: i, height: s } = t, { context: a } = this, { gl: o } = a, { HTMLImageElement: l, HTMLCanvasElement: u, HTMLVideoElement: c, ImageData: h, ImageBitmap: p } = e; if (o.bindTexture(o.TEXTURE_2D, this.texture), a.pixelStoreUnpackFlipY.set(!1), a.pixelStoreUnpack.set(1), a.pixelStoreUnpackPremultiplyAlpha.set(this.format === o.RGBA && (!r || !1 !== r.premultiply)), n || this.size && this.size[0] === i && this.size[1] === s) { const { x: e, y: r } = n || { x: 0, y: 0 }; t instanceof l || t instanceof u || t instanceof c || t instanceof h || p && t instanceof p ? o.texSubImage2D(o.TEXTURE_2D, 0, e, r, o.RGBA, o.UNSIGNED_BYTE, t) : o.texSubImage2D(o.TEXTURE_2D, 0, e, r, i, s, o.RGBA, o.UNSIGNED_BYTE, t.data); } else this.size = [i, s], t instanceof l || t instanceof u || t instanceof c || t instanceof h || p && t instanceof p ? o.texImage2D(o.TEXTURE_2D, 0, this.format, this.format, o.UNSIGNED_BYTE, t) : o.texImage2D(o.TEXTURE_2D, 0, this.format, i, s, 0, this.format, o.UNSIGNED_BYTE, t.data); this.useMipmap = Boolean(r && r.useMipmap && this.isSizePowerOfTwo()), this.useMipmap && o.generateMipmap(o.TEXTURE_2D); } bind(t, e) { const { context: r } = this, { gl: n } = r; n.bindTexture(n.TEXTURE_2D, this.texture), t !== this.filter && (n.texParameteri(n.TEXTURE_2D, n.TEXTURE_MAG_FILTER, t), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_MIN_FILTER, this.useMipmap ? t === n.NEAREST ? n.NEAREST_MIPMAP_NEAREST : n.LINEAR_MIPMAP_NEAREST : t), this.filter = t), e !== this.wrap && (n.texParameteri(n.TEXTURE_2D, n.TEXTURE_WRAP_S, e), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_WRAP_T, e), this.wrap = e); } isSizePowerOfTwo() { return this.size[0] === this.size[1] && Math.log(this.size[0]) / Math.LN2 % 1 == 0 } destroy() { const { gl: t } = this.context; t.deleteTexture(this.texture), this.texture = null; } } class Ad { constructor(t) { this._callback = t, this._triggered = !1, "undefined" != typeof MessageChannel && (this._channel = new MessageChannel, this._channel.port2.onmessage = () => { this._triggered = !1, this._callback(); }); } trigger() { this._triggered || (this._triggered = !0, this._channel ? this._channel.port1.postMessage(!0) : setTimeout((() => { this._triggered = !1, this._callback(); }), 0)); } remove() { this._channel = void 0, this._callback = () => {}; } } class Sd { constructor() { this.tasks = {}, this.taskQueue = [], V(["process"], this), this.invoker = new Ad(this.process), this.nextId = 0; } add(t, e) { const r = this.nextId++, n = function({ type: t, isSymbolTile: e, zoom: r }) { return r = r || 0, "message" === t ? 0 : "maybePrepare" !== t || e ? "parseTile" !== t || e ? "parseTile" === t && e ? 300 - r : "maybePrepare" === t && e ? 400 - r : 500 : 200 - r : 100 - r }(e); if (0 === n) { N(); try { t(); } finally {} return { cancel: () => {} } } return this.tasks[r] = { fn: t, metadata: e, priority: n, id: r }, this.taskQueue.push(r), this.invoker.trigger(), { cancel: () => { delete this.tasks[r]; } } } process() { N(); try { if (this.taskQueue = this.taskQueue.filter((t => !!this.tasks[t])), !this.taskQueue.length) return; const t = this.pick(); if (null === t) return; const e = this.tasks[t]; if (delete this.tasks[t], this.taskQueue.length && this.invoker.trigger(), !e) return; e.fn(); } finally {} } pick() { let t = null, e = 1 / 0; for (let r = 0; r < this.taskQueue.length; r++) { const n = this.tasks[this.taskQueue[r]]; n.priority < e && (e = n.priority, t = r); } if (null === t) return null; const r = this.taskQueue[t]; return this.taskQueue.splice(t, 1), r } remove() { this.invoker.remove(); } } class kd { constructor(t) { this._stringToNumber = {}, this._numberToString = []; for (let e = 0; e < t.length; e++) { const r = t[e]; this._stringToNumber[r] = e, this._numberToString[e] = r; } } encode(t) { return this._stringToNumber[t] } decode(t) { return this._numberToString[t] } } const Id = ["tile", "layer", "source", "sourceLayer", "state"]; class Md { constructor(t, e, r, n, i) { this.type = "Feature", this._vectorTileFeature = t, this._z = e, this._x = r, this._y = n, this.properties = t.properties, this.id = i; } get geometry() { return void 0 === this._geometry && (this._geometry = this._vectorTileFeature.toGeoJSON(this._x, this._y, this._z).geometry), this._geometry } set geometry(t) { this._geometry = t; } toJSON() { const t = { type: "Feature", state: void 0, geometry: this.geometry, properties: this.properties }; void 0 !== this.id && (t.id = this.id); for (const e of Id) void 0 !== this[e] && (t[e] = this[e]); return t } } const Td = 32, zd = 33, Bd = new Uint16Array(8184); for (let t = 0; t < 2046; t++) { let e = t + 2, r = 0, n = 0, i = 0, s = 0, a = 0, o = 0; for (1 & e ? i = s = a = Td : r = n = o = Td; (e >>= 1) > 1;) { const t = r + i >> 1, l = n + s >> 1; 1 & e ? (i = r, s = n, r = a, n = o) : (r = i, n = s, i = a, s = o), a = t, o = l; } const l = 4 * t; Bd[l + 0] = r, Bd[l + 1] = n, Bd[l + 2] = i, Bd[l + 3] = s; } const Ed = new Uint16Array(2178), Cd = new Uint8Array(1089), Pd = new Uint16Array(1089); function Dd(t) { return 0 === t ? -.03125 : 32 === t ? .03125 : 0 } var Vd = na([{ name: "a_pos", type: "Int16", components: 2 }, { name: "a_texture_pos", type: "Int16", components: 2 }]); const Ld = { type: 2, extent: ko, loadGeometry: () => [ [new d(0, 0), new d(8193, 0), new d(8193, 8193), new d(0, 8193), new d(0, 0)] ] }; class Fd { constructor(t, e, r, n, i) { this.tileID = t, this.uid = E(), this.uses = 0, this.tileSize = e, this.tileZoom = r, this.buckets = {}, this.expirationTime = null, this.queryPadding = 0, this.hasSymbolBuckets = !1, this.hasRTLText = !1, this.dependencies = {}, this.isRaster = i, this.expiredRequestCount = 0, this.state = "loading", n && n.transform && (this.projection = n.transform.projection); } registerFadeDuration(t) { const e = t + this.timeAdded; e < Nt.now() || this.fadeEndTime && e < this.fadeEndTime || (this.fadeEndTime = e); } wasRequested() { return "errored" === this.state || "loaded" === this.state || "reloading" === this.state } get tileTransform() { return this._tileTransform || (this._tileTransform = Vf(this.tileID.canonical, this.projection)), this._tileTransform } loadVectorData(t, e, r) { if (this.unloadVectorData(), this.state = "loaded", t) { t.featureIndex && (this.latestFeatureIndex = t.featureIndex, t.rawTileData ? (this.latestRawTileData = t.rawTileData, this.latestFeatureIndex.rawTileData = t.rawTileData) : this.latestRawTileData && (this.latestFeatureIndex.rawTileData = this.latestRawTileData)), this.collisionBoxArray = t.collisionBoxArray, this.buckets = function(t, e) { const r = {}; if (!e) return r; for (const n of t) { const t = n.layerIds.map((t => e.getLayer(t))).filter(Boolean); if (0 !== t.length) { n.layers = t, n.stateDependentLayerIds && (n.stateDependentLayers = n.stateDependentLayerIds.map((e => t.filter((t => t.id === e))[0]))); for (const e of t) r[e.id] = n; } } return r }(t.buckets, e.style), this.hasSymbolBuckets = !1; for (const t in this.buckets) { const e = this.buckets[t]; if (e instanceof hd) { if (this.hasSymbolBuckets = !0, !r) break; e.justReloaded = !0; } } if (this.hasRTLText = !1, this.hasSymbolBuckets) for (const t in this.buckets) { const e = this.buckets[t]; if (e instanceof hd && e.hasRTLText) { this.hasRTLText = !0, js.isLoading() || js.isLoaded() || "deferred" !== Fs() || Rs(); break } } this.queryPadding = 0; for (const t in this.buckets) { const r = this.buckets[t]; this.queryPadding = Math.max(this.queryPadding, e.style.getLayer(t).queryRadius(r)); } t.imageAtlas && (this.imageAtlas = t.imageAtlas), t.glyphAtlasImage && (this.glyphAtlasImage = t.glyphAtlasImage), t.lineAtlas && (this.lineAtlas = t.lineAtlas); } else this.collisionBoxArray = new Ea; } unloadVectorData() { if (this.hasData()) { for (const t in this.buckets) this.buckets[t].destroy(); this.buckets = {}, this.imageAtlas && (this.imageAtlas = null), this.lineAtlas && (this.lineAtlas = null), this.imageAtlasTexture && this.imageAtlasTexture.destroy(), this.glyphAtlasTexture && this.glyphAtlasTexture.destroy(), this.lineAtlasTexture && this.lineAtlasTexture.destroy(), this._tileBoundsBuffer && (this._tileBoundsBuffer.destroy(), this._tileBoundsIndexBuffer.destroy(), this._tileBoundsSegments.destroy(), this._tileBoundsBuffer = null), this._tileDebugBuffer && (this._tileDebugBuffer.destroy(), this._tileDebugSegments.destroy(), this._tileDebugBuffer = null), this._tileDebugIndexBuffer && (this._tileDebugIndexBuffer.destroy(), this._tileDebugIndexBuffer = null), this._globeTileDebugBorderBuffer && (this._globeTileDebugBorderBuffer.destroy(), this._globeTileDebugBorderBuffer = null), this._tileDebugTextBuffer && (this._tileDebugTextBuffer.destroy(), this._tileDebugTextSegments.destroy(), this._tileDebugTextIndexBuffer.destroy(), this._tileDebugTextBuffer = null), this._globeTileDebugTextBuffer && (this._globeTileDebugTextBuffer.destroy(), this._globeTileDebugTextBuffer = null), this.latestFeatureIndex = null, this.state = "unloaded"; } } getBucket(t) { return this.buckets[t.id] } upload(t) { for (const e in this.buckets) { const r = this.buckets[e]; r.uploadPending() && r.upload(t); } const e = t.gl; this.imageAtlas && !this.imageAtlas.uploaded && (this.imageAtlasTexture = new _d(t, this.imageAtlas.image, e.RGBA), this.imageAtlas.uploaded = !0), this.glyphAtlasImage && (this.glyphAtlasTexture = new _d(t, this.glyphAtlasImage, e.ALPHA), this.glyphAtlasImage = null), this.lineAtlas && !this.lineAtlas.uploaded && (this.lineAtlasTexture = new _d(t, this.lineAtlas.image, e.ALPHA), this.lineAtlas.uploaded = !0); } prepare(t) { this.imageAtlas && this.imageAtlas.patchUpdatedImages(t, this.imageAtlasTexture); } queryRenderedFeatures(t, e, r, n, i, s, a, o) { return this.latestFeatureIndex && this.latestFeatureIndex.rawTileData ? this.latestFeatureIndex.query({ tileResult: n, pixelPosMatrix: a, transform: s, params: i, tileTransform: this.tileTransform }, t, e, r) : {} } querySourceFeatures(t, e) { const r = this.latestFeatureIndex; if (!r || !r.rawTileData) return; const n = r.loadVTLayers(), i = e ? e.sourceLayer : "", s = n._geojsonTileLayer || n[i]; if (!s) return; const a = ai(e && e.filter), { z: o, x: l, y: u } = this.tileID.canonical, c = { z: o, x: l, y: u }; for (let e = 0; e < s.length; e++) { const n = s.feature(e); if (a.needGeometry) { const t = wu(n, !0); if (!a.filter(new $s(this.tileID.overscaledZ), t, this.tileID.canonical)) continue } else if (!a.filter(new $s(this.tileID.overscaledZ), n)) continue; const h = r.getId(n, i), p = new Md(n, o, l, u, h); p.tile = c, t.push(p); } } hasData() { return "loaded" === this.state || "reloading" === this.state || "expired" === this.state } patternsLoaded() { return !!this.imageAtlas && !!Object.keys(this.imageAtlas.patternPositions).length } setExpiryData(t) { const e = this.expirationTime; if (t.cacheControl) { const e = G(t.cacheControl); e["max-age"] && (this.expirationTime = Date.now() + 1e3 * e["max-age"]); } else t.expires && (this.expirationTime = new Date(t.expires).getTime()); if (this.expirationTime) { const t = Date.now(); let r = !1; if (this.expirationTime > t) r = !1; else if (e) if (this.expirationTime < e) r = !0; else { const n = this.expirationTime - e; n ? this.expirationTime = t + Math.max(n, 3e4) : r = !0; } else r = !0; r ? (this.expiredRequestCount++, this.state = "expired") : this.expiredRequestCount = 0; } } getExpiryTimeout() { if (this.expirationTime) return this.expiredRequestCount ? 1e3 * (1 << Math.min(this.expiredRequestCount - 1, 31)) : Math.min(this.expirationTime - (new Date).getTime(), Math.pow(2, 31) - 1) } setFeatureState(t, e) { if (!this.latestFeatureIndex || !this.latestFeatureIndex.rawTileData || 0 === Object.keys(t).length || !e) return; const r = this.latestFeatureIndex.loadVTLayers(), n = e.style.listImages(); for (const i in this.buckets) { if (!e.style.hasLayer(i)) continue; const s = this.buckets[i], a = s.layers[0].sourceLayer || "_geojsonTileLayer", o = r[a], l = t[a]; if (!o || !l || 0 === Object.keys(l).length) continue; if (s.update(l, o, n, this.imageAtlas && this.imageAtlas.patternPositions || {}), s instanceof jh || s instanceof $c) { const t = e.style._getSourceCache(s.layers[0].source); e._terrain && e._terrain.enabled && t && s.programConfigurations.needsUpload && e._terrain._clearRenderCacheForTile(t.id, this.tileID); } const u = e && e.style && e.style.getLayer(i); u && (this.queryPadding = Math.max(this.queryPadding, u.queryRadius(s))); } } holdingForFade() { return void 0 !== this.symbolFadeHoldUntil } symbolFadeFinished() { return !this.symbolFadeHoldUntil || this.symbolFadeHoldUntil < Nt.now() } clearFadeHold() { this.symbolFadeHoldUntil = void 0; } setHoldDuration(t) { this.symbolFadeHoldUntil = Nt.now() + t; } setTexture(t, e) { const r = e.context, n = r.gl; this.texture = this.texture || e.getTileTexture(t.width), this.texture ? this.texture.update(t, { useMipmap: !0 }) : (this.texture = new _d(r, t, n.RGBA, { useMipmap: !0 }), this.texture.bind(n.LINEAR, n.CLAMP_TO_EDGE)); } setDependencies(t, e) { const r = {}; for (const t of e) r[t] = !0; this.dependencies[t] = r; } hasDependency(t, e) { for (const r of t) { const t = this.dependencies[r]; if (t) for (const r of e) if (t[r]) return !0 } return !1 } clearQueryDebugViz() {} _makeDebugTileBoundsBuffers(t, e) { if (!e || "mercator" === e.name || this._tileDebugBuffer) return; const r = bu(Ld, this.tileID.canonical, this.tileTransform)[0], n = new sa, i = new Ta; for (let t = 0; t < r.length; t++) { const { x: e, y: s } = r[t]; n.emplaceBack(e, s), i.emplaceBack(t); } i.emplaceBack(0), this._tileDebugIndexBuffer = t.createIndexBuffer(i), this._tileDebugBuffer = t.createVertexBuffer(n, xl.members), this._tileDebugSegments = So.simpleSegment(0, 0, n.length, i.length); } _makeTileBoundsBuffers(t, e) { if (this._tileBoundsBuffer || !e || "mercator" === e.name) return; const r = bu(Ld, this.tileID.canonical, this.tileTransform)[0]; let n, i; if (this.isRaster) { const t = function(t, e) { const r = Vf(t, e), n = Math.pow(2, t.z); for (let i = 0; i < zd; i++) for (let s = 0; s < zd; s++) { const a = ou((t.x + (s + Dd(s)) / Td) / n), o = lu((t.y + (i + Dd(i)) / Td) / n), l = e.project(a, o), u = i * zd + s; Ed[2 * u + 0] = Math.round((l.x * r.scale - r.x) * ko), Ed[2 * u + 1] = Math.round((l.y * r.scale - r.y) * ko); } Cd.fill(0), Pd.fill(0); for (let t = 2045; t >= 0; t--) { const e = 4 * t, r = Bd[e + 0], n = Bd[e + 1], i = Bd[e + 2], s = Bd[e + 3], a = r + i >> 1, o = n + s >> 1, l = a + o - n, u = o + r - a, c = n * zd + r, h = s * zd + i, p = o * zd + a, f = Math.hypot((Ed[2 * c + 0] + Ed[2 * h + 0]) / 2 - Ed[2 * p + 0], (Ed[2 * c + 1] + Ed[2 * h + 1]) / 2 - Ed[2 * p + 1]) >= 16; if (Cd[p] = Cd[p] || (f ? 1 : 0), t < 1022) { const t = (n + u >> 1) * zd + (r + l >> 1), e = (s + u >> 1) * zd + (i + l >> 1); Cd[p] = Cd[p] || Cd[t] || Cd[e]; } } const i = new oa, s = new wa; let a = 0; function o(t, e) { const r = e * zd + t; return 0 === Pd[r] && (i.emplaceBack(Ed[2 * r + 0], Ed[2 * r + 1], t * ko / Td, e * ko / Td), Pd[r] = ++a), Pd[r] - 1 } function l(t, e, r, n, i, a) { const u = t + r >> 1, c = e + n >> 1; if (Math.abs(t - i) + Math.abs(e - a) > 1 && Cd[c * zd + u]) l(i, a, t, e, u, c), l(r, n, i, a, u, c); else { const l = o(t, e), u = o(r, n), c = o(i, a); s.emplaceBack(l, u, c); } } return l(0, 0, Td, Td, Td, 0), l(Td, Td, 0, 0, 0, Td), { vertices: i, indices: s } }(this.tileID.canonical, e); n = t.vertices, i = t.indices; } else { n = new oa, i = new wa; for (const { x: t, y: e } of r) n.emplaceBack(t, e, 0, 0); const t = sc(n.int16, void 0, 4); for (let e = 0; e < t.length; e += 3) i.emplaceBack(t[e], t[e + 1], t[e + 2]); } this._tileBoundsBuffer = t.createVertexBuffer(n, Vd.members), this._tileBoundsIndexBuffer = t.createIndexBuffer(i), this._tileBoundsSegments = So.simpleSegment(0, 0, n.length, i.length); } _makeGlobeTileDebugBuffers(t, e) { const r = e.projection; if (!r || "globe" !== r.name || e.freezeTileCoverage) return; const n = this.tileID.canonical, i = Gl(Vl(n, e)), s = Kl(e.zoom); let a; s > 0 && (a = Co(new Float64Array(16), e.globeMatrix)), this._makeGlobeTileDebugBorderBuffer(t, n, e, i, a, s), this._makeGlobeTileDebugTextBuffer(t, n, e, i, a, s); } _globePoint(t, e, r, n, i, s, a) { let o = Ol(t, e, r); if (s) { const i = 1 << r.z, l = iu(n.center.lng), u = su(n.center.lat), c = (r.x + .5) / i - l; let h = 0; c > .5 ? h = -1 : c < -.5 && (h = 1); let p = (t / ko + r.x) / i + h, f = (e / ko + r.y) / i; p = (p - l) * n._pixelsPerMercatorPixel + l, f = (f - u) * n._pixelsPerMercatorPixel + u; const d = [p * n.worldSize, f * n.worldSize, 0]; el(d, d, s), o = Dl(o, d, a); } return el(o, o, i) } _makeGlobeTileDebugBorderBuffer(t, e, r, n, i, s) { const a = new sa, o = new Ta, l = new aa, u = (t, u, c, h, p) => { const f = (c - t) / (p - 1), d = (h - u) / (p - 1), y = a.length; for (let c = 0; c < p; c++) { const h = t + c * f, p = u + c * d; a.emplaceBack(h, p); const m = this._globePoint(h, p, e, r, n, i, s); l.emplaceBack(m[0], m[1], m[2]), o.emplaceBack(y + c); } }, c = ko; u(0, 0, c, 0, 16), u(c, 0, c, c, 16), u(c, c, 0, c, 16), u(0, c, 0, 0, 16), this._tileDebugIndexBuffer = t.createIndexBuffer(o), this._tileDebugBuffer = t.createVertexBuffer(a, xl.members), this._globeTileDebugBorderBuffer = t.createVertexBuffer(l, gl.members), this._tileDebugSegments = So.simpleSegment(0, 0, a.length, o.length); } _makeGlobeTileDebugTextBuffer(t, e, r, n, i, s) { const a = new sa, o = new wa, l = new aa, u = 25; o.reserve(32), a.reserve(u), l.reserve(u); const c = (t, e) => u * t + e; for (let t = 0; t < u; t++) { const o = 2048 * t; for (let t = 0; t < u; t++) { const u = 2048 * t; a.emplaceBack(u, o); const c = this._globePoint(u, o, e, r, n, i, s); l.emplaceBack(c[0], c[1], c[2]); } } for (let t = 0; t < 4; t++) for (let e = 0; e < 4; e++) { const r = c(t, e), n = c(t, e + 1), i = c(t + 1, e), s = c(t + 1, e + 1); o.emplaceBack(r, n, i), o.emplaceBack(i, n, s); } this._tileDebugTextIndexBuffer = t.createIndexBuffer(o), this._tileDebugTextBuffer = t.createVertexBuffer(a, xl.members), this._globeTileDebugTextBuffer = t.createVertexBuffer(l, gl.members), this._tileDebugTextSegments = So.simpleSegment(0, 0, u, 32); } } class Rd { constructor() { this.state = {}, this.stateChanges = {}, this.deletedStates = {}; } updateState(t, e, r) { const n = String(e); if (this.stateChanges[t] = this.stateChanges[t] || {}, this.stateChanges[t][n] = this.stateChanges[t][n] || {}, z(this.stateChanges[t][n], r), null === this.deletedStates[t]) { this.deletedStates[t] = {}; for (const e in this.state[t]) e !== n && (this.deletedStates[t][e] = null); } else if (this.deletedStates[t] && null === this.deletedStates[t][n]) { this.deletedStates[t][n] = {}; for (const e in this.state[t][n]) r[e] || (this.deletedStates[t][n][e] = null); } else for (const e in r) this.deletedStates[t] && this.deletedStates[t][n] && null === this.deletedStates[t][n][e] && delete this.deletedStates[t][n][e]; } removeFeatureState(t, e, r) { if (null === this.deletedStates[t]) return; const n = String(e); if (this.deletedStates[t] = this.deletedStates[t] || {}, r && void 0 !== e) null !== this.deletedStates[t][n] && (this.deletedStates[t][n] = this.deletedStates[t][n] || {}, this.deletedStates[t][n][r] = null); else if (void 0 !== e) if (this.stateChanges[t] && this.stateChanges[t][n]) for (r in this.deletedStates[t][n] = {}, this.stateChanges[t][n]) this.deletedStates[t][n][r] = null; else this.deletedStates[t][n] = null; else this.deletedStates[t] = null; } getState(t, e) { const r = String(e), n = z({}, (this.state[t] || {})[r], (this.stateChanges[t] || {})[r]); if (null === this.deletedStates[t]) return {}; if (this.deletedStates[t]) { const r = this.deletedStates[t][e]; if (null === r) return {}; for (const t in r) delete n[t]; } return n } initializeTileState(t, e) { t.setFeatureState(this.state, e); } coalesceChanges(t, e) { const r = {}; for (const t in this.stateChanges) { this.state[t] = this.state[t] || {}; const e = {}; for (const r in this.stateChanges[t]) this.state[t][r] || (this.state[t][r] = {}), z(this.state[t][r], this.stateChanges[t][r]), e[r] = this.state[t][r]; r[t] = e; } for (const t in this.deletedStates) { this.state[t] = this.state[t] || {}; const e = {}; if (null === this.deletedStates[t]) for (const r in this.state[t]) e[r] = {}, this.state[t][r] = {}; else for (const r in this.deletedStates[t]) { if (null === this.deletedStates[t][r]) this.state[t][r] = {}; else if (this.state[t][r]) for (const e of Object.keys(this.deletedStates[t][r])) delete this.state[t][r][e]; e[r] = this.state[t][r]; } r[t] = r[t] || {}, z(r[t], e); } if (this.stateChanges = {}, this.deletedStates = {}, 0 !== Object.keys(r).length) for (const n in t) t[n].setFeatureState(r, e); } } class jd { constructor(t) { this.size = t, this.minimums = [], this.maximums = [], this.leaves = []; } getElevation(t, e) { const r = this.toIdx(t, e); return { min: this.minimums[r], max: this.maximums[r] } } isLeaf(t, e) { return this.leaves[this.toIdx(t, e)] } toIdx(t, e) { return e * this.size + t } } function $d(t, e, r, n) { let i = 0, s = Number.MAX_VALUE; for (let a = 0; a < 3; a++) if (Math.abs(n[a]) < 1e-15) { if (r[a] < t[a] || r[a] > e[a]) return null } else { const o = 1 / n[a]; let l = (t[a] - r[a]) * o, u = (e[a] - r[a]) * o; if (l > u) { const t = l; l = u, u = t; } if (l > i && (i = l), u < s && (s = u), i > s) return null } return i } function Ud(t, e, r, n, i, s, a, o, l, u, c) { const h = n - t, p = i - e, f = s - r, d = a - t, y = o - e, m = l - r, g = c[1] * m - c[2] * y, x = c[2] * d - c[0] * m, v = c[0] * y - c[1] * d, b = h * g + p * x + f * v; if (Math.abs(b) < 1e-15) return null; const w = 1 / b, _ = u[0] - t, A = u[1] - e, S = u[2] - r, k = (_ * g + A * x + S * v) * w; if (k < 0 || k > 1) return null; const I = A * f - S * p, M = S * h - _ * f, T = _ * p - A * h, z = (c[0] * I + c[1] * M + c[2] * T) * w; return z < 0 || k + z > 1 ? null : (d * I + y * M + m * T) * w } function Od(t, e, r) { return (t - e) / (r - e) } function qd(t, e, r, n, i, s, a, o, l) { const u = 1 << r, c = s - n, h = a - i, p = (t + 1) / u * c + n, f = (e + 0) / u * h + i, d = (e + 1) / u * h + i; o[0] = (t + 0) / u * c + n, o[1] = f, l[0] = p, l[1] = d; } class Nd { constructor(t) { if (this.maximums = [], this.minimums = [], this.leaves = [], this.childOffsets = [], this.nodeCount = 0, this.dem = t, this._siblingOffset = [ [0, 0], [1, 0], [0, 1], [1, 1] ], !this.dem) return; const e = function(t) { const e = Math.ceil(Math.log2(t.dim / 8)), r = []; let n = Math.ceil(Math.pow(2, e)); const i = 1 / n, s = (t, e, r, n, i) => { const s = n ? 1 : 0, a = (t + 1) * r - s, o = e * r, l = (e + 1) * r - s; i[0] = t * r, i[1] = o, i[2] = a, i[3] = l; }; let a = new jd(n); const o = []; for (let e = 0; e < n * n; e++) { s(e % n, Math.floor(e / n), i, !1, o); const r = Zd(o[0], o[1], t), l = Zd(o[2], o[1], t), u = Zd(o[2], o[3], t), c = Zd(o[0], o[3], t); a.minimums.push(Math.min(r, l, u, c)), a.maximums.push(Math.max(r, l, u, c)), a.leaves.push(1); } for (r.push(a), n /= 2; n >= 1; n /= 2) { const t = r[r.length - 1]; a = new jd(n); for (let e = 0; e < n * n; e++) { s(e % n, Math.floor(e / n), 2, !0, o); const r = t.getElevation(o[0], o[1]), i = t.getElevation(o[2], o[1]), l = t.getElevation(o[2], o[3]), u = t.getElevation(o[0], o[3]), c = t.isLeaf(o[0], o[1]), h = t.isLeaf(o[2], o[1]), p = t.isLeaf(o[2], o[3]), f = t.isLeaf(o[0], o[3]), d = Math.min(r.min, i.min, l.min, u.min), y = Math.max(r.max, i.max, l.max, u.max), m = c && h && p && f; a.maximums.push(y), a.minimums.push(d), a.leaves.push(y - d <= 5 && m ? 1 : 0); } r.push(a); } return r }(this.dem), r = e.length - 1, n = e[r]; this._addNode(n.minimums[0], n.maximums[0], n.leaves[0]), this._construct(e, 0, 0, r, 0); } raycastRoot(t, e, r, n, i, s, a = 1) { return $d([t, e, -100], [r, n, this.maximums[0] * a], i, s) } raycast(t, e, r, n, i, s, a = 1) { if (!this.nodeCount) return null; const o = this.raycastRoot(t, e, r, n, i, s, a); if (null == o) return null; const l = [], u = [], c = [], h = [], p = [{ idx: 0, t: o, nodex: 0, nodey: 0, depth: 0 }]; for (; p.length > 0;) { const { idx: o, t: f, nodex: d, nodey: y, depth: m } = p.pop(); if (this.leaves[o]) { qd(d, y, m, t, e, r, n, c, h); const o = 1 << m, l = (d + 0) / o, u = (d + 1) / o, p = (y + 0) / o, g = (y + 1) / o, x = Zd(l, p, this.dem) * a, v = Zd(u, p, this.dem) * a, b = Zd(u, g, this.dem) * a, w = Zd(l, g, this.dem) * a, _ = Ud(c[0], c[1], x, h[0], c[1], v, h[0], h[1], b, i, s), A = Ud(h[0], h[1], b, c[0], h[1], w, c[0], c[1], x, i, s), S = Math.min(null !== _ ? _ : Number.MAX_VALUE, null !== A ? A : Number.MAX_VALUE); if (S !== Number.MAX_VALUE) return S; { const t = Wo([], i, s, f); if (Gd(x, v, w, b, Od(t[0], c[0], h[0]), Od(t[1], c[1], h[1])) >= t[2]) return f } continue } let g = 0; for (let p = 0; p < this._siblingOffset.length; p++) { qd((d << 1) + this._siblingOffset[p][0], (y << 1) + this._siblingOffset[p][1], m + 1, t, e, r, n, c, h), c[2] = -100, h[2] = this.maximums[this.childOffsets[o] + p] * a; const f = $d(c, h, i, s); if (null != f) { const t = f; l[p] = t; let e = !1; for (let r = 0; r < g && !e; r++) t >= l[u[r]] && (u.splice(r, 0, p), e = !0); e || (u[g] = p), g++; } } for (let t = 0; t < g; t++) { const e = u[t]; p.push({ idx: this.childOffsets[o] + e, t: l[e], nodex: (d << 1) + this._siblingOffset[e][0], nodey: (y << 1) + this._siblingOffset[e][1], depth: m + 1 }); } } return null } _addNode(t, e, r) { return this.minimums.push(t), this.maximums.push(e), this.leaves.push(r), this.childOffsets.push(0), this.nodeCount++ } _construct(t, e, r, n, i) { if (1 === t[n].isLeaf(e, r)) return; this.childOffsets[i] || (this.childOffsets[i] = this.nodeCount); const s = n - 1, a = t[s]; let o = 0, l = 0; for (let t = 0; t < this._siblingOffset.length; t++) { const n = 2 * e + this._siblingOffset[t][0], i = 2 * r + this._siblingOffset[t][1], s = a.getElevation(n, i), u = a.isLeaf(n, i), c = this._addNode(s.min, s.max, u); u && (o |= 1 << t), l || (l = c); } for (let n = 0; n < this._siblingOffset.length; n++) o & 1 << n || this._construct(t, 2 * e + this._siblingOffset[n][0], 2 * r + this._siblingOffset[n][1], s, l + n); } } function Gd(t, e, r, n, i, s) { return Mr(Mr(t, r, s), Mr(e, n, s), i) } function Zd(t, e, r) { const n = r.dim, i = S(t * n - .5, 0, n - 1), s = S(e * n - .5, 0, n - 1), a = Math.floor(i), o = Math.floor(s), l = Math.min(a + 1, n - 1), u = Math.min(o + 1, n - 1); return Gd(r.get(a, o), r.get(l, o), r.get(a, u), r.get(l, u), i - a, s - o) } const Xd = { mapbox: [6553.6, 25.6, .1, 1e4], terrarium: [256, 1, 1 / 256, 32768] }; function Kd(t, e, r) { return (256 * t * 256 + 256 * e + r) / 10 - 1e4 } function Yd(t, e, r) { return 256 * t + e + r / 256 - 32768 } class Hd { get tree() { return this._tree || this._buildQuadTree(), this._tree } constructor(t, e, r, n = !1, i = !1) { if (this.uid = t, e.height !== e.width) throw new RangeError("DEM tiles must be square"); if (r && "mapbox" !== r && "terrarium" !== r) return U(`"${r}" is not a valid encoding type. Valid types include "mapbox" and "terrarium".`); this.stride = e.height; const s = this.dim = e.height - 2, a = new Uint32Array(e.data.buffer); if (this.pixels = new Uint8Array(e.data.buffer), this.encoding = r || "mapbox", this.borderReady = n, !n) { for (let t = 0; t < s; t++) a[this._idx(-1, t)] = a[this._idx(0, t)], a[this._idx(s, t)] = a[this._idx(s - 1, t)], a[this._idx(t, -1)] = a[this._idx(t, 0)], a[this._idx(t, s)] = a[this._idx(t, s - 1)]; a[this._idx(-1, -1)] = a[this._idx(0, 0)], a[this._idx(s, -1)] = a[this._idx(s - 1, 0)], a[this._idx(-1, s)] = a[this._idx(0, s - 1)], a[this._idx(s, s)] = a[this._idx(s - 1, s - 1)], i && this._buildQuadTree(); } } _buildQuadTree() { this._tree = new Nd(this); } get(t, e, r = !1) { r && (t = S(t, -1, this.dim), e = S(e, -1, this.dim)); const n = 4 * this._idx(t, e); return ("terrarium" === this.encoding ? Yd : Kd)(this.pixels[n], this.pixels[n + 1], this.pixels[n + 2]) } static getUnpackVector(t) { return Xd[t] } get unpackVector() { return Xd[this.encoding] } _idx(t, e) { if (t < -1 || t >= this.dim + 1 || e < -1 || e >= this.dim + 1) throw new RangeError("out of range source coordinates for DEM data"); return (e + 1) * this.stride + (t + 1) } static pack(t, e) { const r = [0, 0, 0, 0], n = Hd.getUnpackVector(e); let i = Math.floor((t + n[3]) / n[2]); return r[2] = i % 256, i = Math.floor(i / 256), r[1] = i % 256, i = Math.floor(i / 256), r[0] = i, r } getPixels() { return new Qu({ width: this.stride, height: this.stride }, this.pixels) } backfillBorder(t, e, r) { if (this.dim !== t.dim) throw new Error("dem dimension mismatch"); let n = e * this.dim, i = e * this.dim + this.dim, s = r * this.dim, a = r * this.dim + this.dim; switch (e) { case -1: n = i - 1; break; case 1: i = n + 1; } switch (r) { case -1: s = a - 1; break; case 1: a = s + 1; } const o = -e * this.dim, l = -r * this.dim; for (let e = s; e < a; e++) for (let r = n; r < i; r++) { const n = 4 * this._idx(r, e), i = 4 * this._idx(r + o, e + l); this.pixels[n + 0] = t.pixels[i + 0], this.pixels[n + 1] = t.pixels[i + 1], this.pixels[n + 2] = t.pixels[i + 2], this.pixels[n + 3] = t.pixels[i + 3]; } } onDeserialize() { this._tree && (this._tree.dem = this); } } Oi(Hd, "DEMData"), Oi(Nd, "DemMinMaxQuadTree", { omit: ["dem"] }); class Wd { constructor(t, e) { this.max = t, this.onRemove = e, this.reset(); } reset() { for (const t in this.data) for (const e of this.data[t]) e.timeout && clearTimeout(e.timeout), this.onRemove(e.value); return this.data = {}, this.order = [], this } add(t, e, r) { const n = t.wrapped().key; void 0 === this.data[n] && (this.data[n] = []); const i = { value: e, timeout: void 0 }; if (void 0 !== r && (i.timeout = setTimeout((() => { this.remove(t, i); }), r)), this.data[n].push(i), this.order.push(n), this.order.length > this.max) { const t = this._getAndRemoveByKey(this.order[0]); t && this.onRemove(t); } return this } has(t) { return t.wrapped().key in this.data } getAndRemove(t) { return this.has(t) ? this._getAndRemoveByKey(t.wrapped().key) : null } _getAndRemoveByKey(t) { const e = this.data[t].shift(); return e.timeout && clearTimeout(e.timeout), 0 === this.data[t].length && delete this.data[t], this.order.splice(this.order.indexOf(t), 1), e.value } getByKey(t) { const e = this.data[t]; return e ? e[0].value : null } get(t) { return this.has(t) ? this.data[t.wrapped().key][0].value : null } remove(t, e) { if (!this.has(t)) return this; const r = t.wrapped().key, n = void 0 === e ? 0 : this.data[r].indexOf(e), i = this.data[r][n]; return this.data[r].splice(n, 1), i.timeout && clearTimeout(i.timeout), 0 === this.data[r].length && delete this.data[r], this.onRemove(i.value), this.order.splice(this.order.indexOf(r), 1), this } setMaxSize(t) { for (this.max = t; this.order.length > this.max;) { const t = this._getAndRemoveByKey(this.order[0]); t && this.onRemove(t); } return this } filter(t) { const e = []; for (const r in this.data) for (const n of this.data[r]) t(n.value) || e.push(n); for (const t of e) this.remove(t.value.tileID, t); } } class Jd { constructor(t, e, r) { this.func = t, this.mask = e, this.range = r; } } Jd.ReadOnly = !1, Jd.ReadWrite = !0, Jd.disabled = new Jd(519, Jd.ReadOnly, [0, 1]); const Qd = 7680; class ty { constructor(t, e, r, n, i, s) { this.test = t, this.ref = e, this.mask = r, this.fail = n, this.depthFail = i, this.pass = s; } } ty.disabled = new ty({ func: 519, mask: 0 }, 0, 0, Qd, Qd, Qd); class ey { constructor(t, e, r) { this.blendFunction = t, this.blendColor = e, this.mask = r; } } ey.Replace = [1, 0], ey.disabled = new ey(ey.Replace, Me.transparent, [!1, !1, !1, !1]), ey.unblended = new ey(ey.Replace, Me.transparent, [!0, !0, !0, !0]), ey.alphaBlended = new ey([1, 771], Me.transparent, [!0, !0, !0, !0]); const ry = 1029, ny = 2305; class iy { constructor(t, e, r) { this.enable = t, this.mode = e, this.frontFace = r; } } iy.disabled = new iy(!1, ry, ny), iy.backCCW = new iy(!0, ry, ny), iy.backCW = new iy(!0, ry, 2304), iy.frontCW = new iy(!0, 1028, 2304), iy.frontCCW = new iy(!0, 1028, ny); class sy extends Yt { constructor(t, e, r) { super(), this.id = t, this._onlySymbols = r, e.on("data", (t => { "source" === t.dataType && "metadata" === t.sourceDataType && (this._sourceLoaded = !0), this._sourceLoaded && !this._paused && "source" === t.dataType && "content" === t.sourceDataType && (this.reload(), this.transform && this.update(this.transform)); })), e.on("error", (() => { this._sourceErrored = !0; })), this._source = e, this._tiles = {}, this._cache = new Wd(0, this._unloadTile.bind(this)), this._timers = {}, this._cacheTimers = {}, this._minTileCacheSize = e.minTileCacheSize, this._maxTileCacheSize = e.maxTileCacheSize, this._loadedParentTiles = {}, this._coveredTiles = {}, this._state = new Rd, this._isRaster = "raster" === this._source.type || "raster-dem" === this._source.type || "custom" === this._source.type && "raster" === this._source._dataType; } onAdd(t) { this.map = t, this._minTileCacheSize = void 0 === this._minTileCacheSize && t ? t._minTileCacheSize : this._minTileCacheSize, this._maxTileCacheSize = void 0 === this._maxTileCacheSize && t ? t._maxTileCacheSize : this._maxTileCacheSize; } loaded() { if (this._sourceErrored) return !0; if (!this._sourceLoaded) return !1; if (!this._source.loaded()) return !1; for (const t in this._tiles) { const e = this._tiles[t]; if ("loaded" !== e.state && "errored" !== e.state) return !1 } return !0 } getSource() { return this._source } pause() { this._paused = !0; } resume() { if (!this._paused) return; const t = this._shouldReloadOnResume; this._paused = !1, this._shouldReloadOnResume = !1, t && this.reload(), this.transform && this.update(this.transform); } _loadTile(t, e) { return t.isSymbolTile = this._onlySymbols, this._source.loadTile(t, e) } _unloadTile(t) { if (this._source.unloadTile) return this._source.unloadTile(t, (() => {})) } _abortTile(t) { if (this._source.abortTile) return this._source.abortTile(t, (() => {})) } serialize() { return this._source.serialize() } prepare(t) { this._source.prepare && this._source.prepare(), this._state.coalesceChanges(this._tiles, this.map ? this.map.painter : null); for (const e in this._tiles) { const r = this._tiles[e]; r.upload(t), r.prepare(this.map.style.imageManager); } } getIds() { return T(this._tiles).map((t => t.tileID)).sort(ay).map((t => t.key)) } getRenderableIds(t) { const e = []; for (const r in this._tiles) this._isIdRenderable(+r, t) && e.push(this._tiles[r]); return t ? e.sort(((t, e) => { const r = t.tileID, n = e.tileID, i = new d(r.canonical.x, r.canonical.y)._rotate(this.transform.angle), s = new d(n.canonical.x, n.canonical.y)._rotate(this.transform.angle); return r.overscaledZ - n.overscaledZ || s.y - i.y || s.x - i.x })).map((t => t.tileID.key)) : e.map((t => t.tileID)).sort(ay).map((t => t.key)) } hasRenderableParent(t) { const e = this.findLoadedParent(t, 0); return !!e && this._isIdRenderable(e.tileID.key) } _isIdRenderable(t, e) { return this._tiles[t] && this._tiles[t].hasData() && !this._coveredTiles[t] && (e || !this._tiles[t].holdingForFade()) } reload() { if (this._paused) this._shouldReloadOnResume = !0; else { this._cache.reset(); for (const t in this._tiles) "errored" !== this._tiles[t].state && this._reloadTile(+t, "reloading"); } } _reloadTile(t, e) { const r = this._tiles[t]; r && ("loading" !== r.state && (r.state = e), this._loadTile(r, this._tileLoaded.bind(this, r, t, e))); } _tileLoaded(t, e, r, n) { if (n) if (t.state = "errored", 404 !== n.status) this._source.fire(new Kt(n, { tile: t })); else if ("raster-dem" === this._source.type && this.usedForTerrain && this.map.painter.terrain) { const t = this.map.painter.terrain; this.update(this.transform, t.getScaledDemTileSize(), !0), t.resetTileLookupCache(this.id); } else this.update(this.transform); else t.timeAdded = Nt.now(), "expired" === r && (t.refreshedUponExpiration = !0), this._setTileReloadTimer(e, t), "raster-dem" === this._source.type && t.dem && this._backfillDEM(t), this._state.initializeTileState(t, this.map ? this.map.painter : null), this._source.fire(new Xt("data", { dataType: "source", tile: t, coord: t.tileID, sourceCacheId: this.id })); } _backfillDEM(t) { const e = this.getRenderableIds(); for (let n = 0; n < e.length; n++) { const i = e[n]; if (t.neighboringTiles && t.neighboringTiles[i]) { const e = this.getTileByID(i); r(t, e), r(e, t); } } function r(t, e) { if (!t.dem || t.dem.borderReady) return; t.needsHillshadePrepare = !0, t.needsDEMTextureUpload = !0; let r = e.tileID.canonical.x - t.tileID.canonical.x; const n = e.tileID.canonical.y - t.tileID.canonical.y, i = Math.pow(2, t.tileID.canonical.z), s = e.tileID.key; 0 === r && 0 === n || Math.abs(n) > 1 || (Math.abs(r) > 1 && (1 === Math.abs(r + i) ? r += i : 1 === Math.abs(r - i) && (r -= i)), e.dem && t.dem && (t.dem.backfillBorder(e.dem, r, n), t.neighboringTiles && t.neighboringTiles[s] && (t.neighboringTiles[s].backfilled = !0))); } } getTile(t) { return this.getTileByID(t.key) } getTileByID(t) { return this._tiles[t] } _retainLoadedChildren(t, e, r, n) { for (const i in this._tiles) { let s = this._tiles[i]; if (n[i] || !s.hasData() || s.tileID.overscaledZ <= e || s.tileID.overscaledZ > r) continue; let a = s.tileID; for (; s && s.tileID.overscaledZ > e + 1;) { const t = s.tileID.scaledTo(s.tileID.overscaledZ - 1); s = this._tiles[t.key], s && s.hasData() && (a = t); } let o = a; for (; o.overscaledZ > e;) if (o = o.scaledTo(o.overscaledZ - 1), t[o.key]) { n[a.key] = a; break } } } findLoadedParent(t, e) { if (t.key in this._loadedParentTiles) { const r = this._loadedParentTiles[t.key]; return r && r.tileID.overscaledZ >= e ? r : null } for (let r = t.overscaledZ - 1; r >= e; r--) { const e = t.scaledTo(r), n = this._getLoadedTile(e); if (n) return n } } _getLoadedTile(t) { const e = this._tiles[t.key]; return e && e.hasData() ? e : this._cache.getByKey(this._source.reparseOverscaled ? t.wrapped().key : t.canonical.key) } updateCacheSize(t, e) { e = e || this._source.tileSize; const r = Math.ceil(t.width / e) + 1, n = Math.ceil(t.height / e) + 1, i = Math.floor(r * n * 5), s = "number" == typeof this._minTileCacheSize ? Math.max(this._minTileCacheSize, i) : i, a = "number" == typeof this._maxTileCacheSize ? Math.min(this._maxTileCacheSize, s) : s; this._cache.setMaxSize(a); } handleWrapJump(t) { const e = Math.round((t - (void 0 === this._prevLng ? t : this._prevLng)) / 360); if (this._prevLng = t, e) { const t = {}; for (const r in this._tiles) { const n = this._tiles[r]; n.tileID = n.tileID.unwrapTo(n.tileID.wrap + e), t[n.tileID.key] = n; } this._tiles = t; for (const t in this._timers) clearTimeout(this._timers[t]), delete this._timers[t]; for (const t in this._tiles) this._setTileReloadTimer(+t, this._tiles[t]); } } update(t, e, r) { if (this.transform = t, !this._sourceLoaded || this._paused || this.transform.freezeTileCoverage) return; if (this.usedForTerrain && !r) return; let n; this.updateCacheSize(t, e), "globe" !== this.transform.projection.name && this.handleWrapJump(this.transform.center.lng), this._coveredTiles = {}, this.used || this.usedForTerrain ? this._source.tileID ? n = t.getVisibleUnwrappedCoordinates(this._source.tileID).map((t => new Mh(t.canonical.z, t.wrap, t.canonical.z, t.canonical.x, t.canonical.y))) : (n = t.coveringTiles({ tileSize: e || this._source.tileSize, minzoom: this._source.minzoom, maxzoom: this._source.maxzoom, roundZoom: this._source.roundZoom && !r, reparseOverscaled: this._source.reparseOverscaled, isTerrainDEM: this.usedForTerrain }), this._source.hasTile && (n = n.filter((t => this._source.hasTile(t))))) : n = []; const i = this._updateRetainedTiles(n); if (oy(this._source.type) && 0 !== n.length) { const t = {}, e = {}, r = Object.keys(i); for (const n of r) { const r = i[n], s = this._tiles[n]; if (!s || s.fadeEndTime && s.fadeEndTime <= Nt.now()) continue; const a = this.findLoadedParent(r, Math.max(r.overscaledZ - sy.maxOverzooming, this._source.minzoom)); a && (this._addTile(a.tileID), t[a.tileID.key] = a.tileID), e[n] = r; } const s = n[n.length - 1].overscaledZ; for (const t in this._tiles) { const r = this._tiles[t]; if (i[t] || !r.hasData()) continue; let n = r.tileID; for (; n.overscaledZ > s;) { n = n.scaledTo(n.overscaledZ - 1); const s = this._tiles[n.key]; if (s && s.hasData() && e[n.key]) { i[t] = r.tileID; break } } } for (const e in t) i[e] || (this._coveredTiles[e] = !0, i[e] = t[e]); } for (const t in i) this._tiles[t].clearFadeHold(); const s = function(t, e) { const r = []; for (const n in t) n in e || r.push(n); return r }(this._tiles, i); for (const t of s) { const e = this._tiles[t]; e.hasSymbolBuckets && !e.holdingForFade() ? e.setHoldDuration(this.map._fadeDuration) : e.hasSymbolBuckets && !e.symbolFadeFinished() || this._removeTile(+t); } this._updateLoadedParentTileCache(), this._onlySymbols && this._source.afterUpdate && this._source.afterUpdate(); } releaseSymbolFadeTiles() { for (const t in this._tiles) this._tiles[t].holdingForFade() && this._removeTile(+t); } _updateRetainedTiles(t) { const e = {}; if (0 === t.length) return e; const r = {}, n = t.reduce(((t, e) => Math.min(t, e.overscaledZ)), 1 / 0), i = t[0].overscaledZ, s = Math.max(i - sy.maxOverzooming, this._source.minzoom), a = Math.max(i + sy.maxUnderzooming, this._source.minzoom), o = {}; for (const r of t) { const t = this._addTile(r); e[r.key] = r, t.hasData() || n < this._source.maxzoom && (o[r.key] = r); } this._retainLoadedChildren(o, n, a, e); for (const n of t) { let t = this._tiles[n.key]; if (t.hasData()) continue; if (n.canonical.z >= this._source.maxzoom) { const t = n.children(this._source.maxzoom)[0], r = this.getTile(t); if (r && r.hasData()) { e[t.key] = t; continue } } else { const t = n.children(this._source.maxzoom); if (e[t[0].key] && e[t[1].key] && e[t[2].key] && e[t[3].key]) continue } let i = t.wasRequested(); for (let a = n.overscaledZ - 1; a >= s; --a) { const s = n.scaledTo(a); if (r[s.key]) break; if (r[s.key] = !0, t = this.getTile(s), !t && i && (t = this._addTile(s)), t && (e[s.key] = s, i = t.wasRequested(), t.hasData())) break } } return e } _updateLoadedParentTileCache() { this._loadedParentTiles = {}; for (const t in this._tiles) { const e = []; let r, n = this._tiles[t].tileID; for (; n.overscaledZ > 0;) { if (n.key in this._loadedParentTiles) { r = this._loadedParentTiles[n.key]; break } e.push(n.key); const t = n.scaledTo(n.overscaledZ - 1); if (r = this._getLoadedTile(t), r) break; n = t; } for (const t of e) this._loadedParentTiles[t] = r; } } _addTile(t) { let e = this._tiles[t.key]; if (e) return e; e = this._cache.getAndRemove(t), e && (this._setTileReloadTimer(t.key, e), e.tileID = t, this._state.initializeTileState(e, this.map ? this.map.painter : null), this._cacheTimers[t.key] && (clearTimeout(this._cacheTimers[t.key]), delete this._cacheTimers[t.key], this._setTileReloadTimer(t.key, e))); const r = Boolean(e); if (!r) { const r = this.map ? this.map.painter : null; e = new Fd(t, this._source.tileSize * t.overscaleFactor(), this.transform.tileZoom, r, this._isRaster), this._loadTile(e, this._tileLoaded.bind(this, e, t.key, e.state)); } return e ? (e.uses++, this._tiles[t.key] = e, r || this._source.fire(new Xt("dataloading", { tile: e, coord: e.tileID, dataType: "source" })), e) : null } _setTileReloadTimer(t, e) { t in this._timers && (clearTimeout(this._timers[t]), delete this._timers[t]); const r = e.getExpiryTimeout(); r && (this._timers[t] = setTimeout((() => { this._reloadTile(t, "expired"), delete this._timers[t]; }), r)); } _removeTile(t) { const e = this._tiles[t]; e && (e.uses--, delete this._tiles[t], this._timers[t] && (clearTimeout(this._timers[t]), delete this._timers[t]), e.uses > 0 || (e.hasData() && "reloading" !== e.state ? this._cache.add(e.tileID, e, e.getExpiryTimeout()) : (e.aborted = !0, this._abortTile(e), this._unloadTile(e)))); } clearTiles() { this._shouldReloadOnResume = !1, this._paused = !1; for (const t in this._tiles) this._removeTile(+t); this._source._clear && this._source._clear(), this._cache.reset(), this.map && this.usedForTerrain && this.map.painter.terrain && this.map.painter.terrain.resetTileLookupCache(this.id); } tilesIn(t, e, r) { const n = [], i = this.transform; if (!i) return n; const s = "globe" === i.projection.name, a = iu(i.center.lng); for (const o in this._tiles) { const l = this._tiles[o]; if (r && l.clearQueryDebugViz(), l.holdingForFade()) continue; let u; if (s) { const t = l.tileID.canonical; if (0 === t.z) { const e = [Math.abs(S(a, ...ly(t, -1)) - a), Math.abs(S(a, ...ly(t, 1)) - a)]; u = [0, 2 * e.indexOf(Math.min(...e)) - 1]; } else { const e = [Math.abs(S(a, ...ly(t, -1)) - a), Math.abs(S(a, ...ly(t, 0)) - a), Math.abs(S(a, ...ly(t, 1)) - a)]; u = [e.indexOf(Math.min(...e)) - 1]; } } else u = [0]; for (const r of u) { const s = t.containsTile(l, i, e, r); s && n.push(s); } } return n } getVisibleCoordinates(t) { const e = this.getRenderableIds(t).map((t => this._tiles[t].tileID)); for (const t of e) t.projMatrix = this.transform.calculateProjMatrix(t.toUnwrapped()); return e } hasTransition() { if (this._source.hasTransition()) return !0; if (oy(this._source.type)) for (const t in this._tiles) { const e = this._tiles[t]; if (void 0 !== e.fadeEndTime && e.fadeEndTime >= Nt.now()) return !0 } return !1 } setFeatureState(t, e, r) { this._state.updateState(t = t || "_geojsonTileLayer", e, r); } removeFeatureState(t, e, r) { this._state.removeFeatureState(t = t || "_geojsonTileLayer", e, r); } getFeatureState(t, e) { return this._state.getState(t = t || "_geojsonTileLayer", e) } setDependencies(t, e, r) { const n = this._tiles[t]; n && n.setDependencies(e, r); } reloadTilesForDependencies(t, e) { for (const r in this._tiles) this._tiles[r].hasDependency(t, e) && this._reloadTile(+r, "reloading"); this._cache.filter((r => !r.hasDependency(t, e))); } _preloadTiles(t, e) { const r = new Map, n = Array.isArray(t) ? t : [t], i = this.map.painter.terrain, s = this.usedForTerrain && i ? i.getScaledDemTileSize() : this._source.tileSize; for (const t of n) { const e = t.coveringTiles({ tileSize: s, minzoom: this._source.minzoom, maxzoom: this._source.maxzoom, roundZoom: this._source.roundZoom && !this.usedForTerrain, reparseOverscaled: this._source.reparseOverscaled, isTerrainDEM: this.usedForTerrain }); for (const t of e) r.set(t.key, t); this.usedForTerrain && t.updateElevation(!1); } M(Array.from(r.values()), ((t, e) => { const r = new Fd(t, this._source.tileSize * t.overscaleFactor(), this.transform.tileZoom, this.map.painter, this._isRaster); this._loadTile(r, (t => { "raster-dem" === this._source.type && r.dem && this._backfillDEM(r), e(t, r); })); }), e); } } function ay(t, e) { const r = Math.abs(2 * t.wrap) - +(t.wrap < 0), n = Math.abs(2 * e.wrap) - +(e.wrap < 0); return t.overscaledZ - e.overscaledZ || n - r || e.canonical.y - t.canonical.y || e.canonical.x - t.canonical.x } function oy(t) { return "raster" === t || "image" === t || "video" === t || "custom" === t } function ly(t, e) { const r = 1 << t.z; return [t.x / r + e, (t.x + 1) / r + e] } sy.maxOverzooming = 10, sy.maxUnderzooming = 3; class uy { constructor(t, e, r) { this._demTile = t, this._dem = this._demTile.dem, this._scale = e, this._offset = r; } static create(t, e, r) { const n = r || t.findDEMTileFor(e); if (!n || !n.dem) return; const i = n.dem, s = n.tileID, a = 1 << e.canonical.z - s.canonical.z; return new uy(n, n.tileSize / ko / a, [(e.canonical.x / a - s.canonical.x) * i.dim, (e.canonical.y / a - s.canonical.y) * i.dim]) } tileCoordToPixel(t, e) { const r = e * this._scale + this._offset[1], n = Math.floor(t * this._scale + this._offset[0]), i = Math.floor(r); return new d(n, i) } getElevationAt(t, e, r, n) { const i = t * this._scale + this._offset[0], s = e * this._scale + this._offset[1], a = Math.floor(i), o = Math.floor(s), l = this._dem; return n = !!n, r ? Mr(Mr(l.get(a, o, n), l.get(a, o + 1, n), s - o), Mr(l.get(a + 1, o, n), l.get(a + 1, o + 1, n), s - o), i - a) : l.get(a, o, n) } getElevationAtPixel(t, e, r) { return this._dem.get(t, e, !!r) } getMeterToDEM(t) { return (1 << this._demTile.tileID.canonical.z) * au(1, t) * this._dem.stride } } class cy { constructor(t, e) { this.tileID = t, this.x = t.canonical.x, this.y = t.canonical.y, this.z = t.canonical.z, this.grid = new ji(ko, 16, 0), this.featureIndexArray = new ja, this.promoteId = e; } insert(t, e, r, n, i, s = 0) { const a = this.featureIndexArray.length; this.featureIndexArray.emplaceBack(r, n, i, s); const o = this.grid; for (let t = 0; t < e.length; t++) { const r = e[t], n = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; for (let t = 0; t < r.length; t++) { const e = r[t]; n[0] = Math.min(n[0], e.x), n[1] = Math.min(n[1], e.y), n[2] = Math.max(n[2], e.x), n[3] = Math.max(n[3], e.y); } n[0] < ko && n[1] < ko && n[2] >= 0 && n[3] >= 0 && o.insert(a, n[0], n[1], n[2], n[3]); } } loadVTLayers() { if (!this.vtLayers) { this.vtLayers = new sh(new op(this.rawTileData)).layers, this.sourceLayerCoder = new kd(this.vtLayers ? Object.keys(this.vtLayers).sort() : ["_geojsonTileLayer"]), this.vtFeatures = {}; for (const t in this.vtLayers) this.vtFeatures[t] = []; } return this.vtLayers } query(t, e, r, n) { this.loadVTLayers(); const i = t.params || {}, s = ai(i.filter), a = t.tileResult, o = t.transform, l = a.bufferedTilespaceBounds, u = this.grid.query(l.min.x, l.min.y, l.max.x, l.max.y, ((t, e, r, n) => Vu(a.bufferedTilespaceGeometry, t, e, r, n))); u.sort(py); let c = null; o.elevation && u.length > 0 && (c = uy.create(o.elevation, this.tileID)); const h = {}; let p; for (let o = 0; o < u.length; o++) { const l = u[o]; if (l === p) continue; p = l; const f = this.featureIndexArray.get(l); let d = null; this.loadMatchingFeature(h, f, s, i.layers, i.availableImages, e, r, n, ((e, r, n, i = 0) => (d || (d = bu(e, this.tileID.canonical, t.tileTransform)), r.queryIntersectsFeature(a, e, n, d, this.z, t.transform, t.pixelPosMatrix, c, i)))); } return h } loadMatchingFeature(t, e, r, n, i, s, a, o, l) { const { featureIndex: u, bucketIndex: c, sourceLayerIndex: h, layoutVertexArrayOffset: p } = e, f = this.bucketLayerIDs[c]; if (n && ! function(t, e) { for (let r = 0; r < t.length; r++) if (e.indexOf(t[r]) >= 0) return !0; return !1 }(n, f)) return; const d = this.sourceLayerCoder.decode(h), y = this.vtLayers[d].feature(u); if (r.needGeometry) { const t = wu(y, !0); if (!r.filter(new $s(this.tileID.overscaledZ), t, this.tileID.canonical)) return } else if (!r.filter(new $s(this.tileID.overscaledZ), y)) return; const m = this.getId(y, d); for (let e = 0; e < f.length; e++) { const r = f[e]; if (n && n.indexOf(r) < 0) continue; const c = s[r]; if (!c) continue; let h = {}; void 0 !== m && o && (h = o.getState(c.sourceLayer || "_geojsonTileLayer", m)); const d = z({}, a[r]); d.paint = hy(d.paint, c.paint, y, h, i), d.layout = hy(d.layout, c.layout, y, h, i); const g = !l || l(y, c, h, p); if (!g) continue; const x = new Md(y, this.z, this.x, this.y, m); x.layer = d; let v = t[r]; void 0 === v && (v = t[r] = []), v.push({ featureIndex: u, feature: x, intersectionZ: g }); } } lookupSymbolFeatures(t, e, r, n, i, s, a, o) { const l = {}; this.loadVTLayers(); const u = ai(i); for (const i of t) this.loadMatchingFeature(l, { bucketIndex: r, sourceLayerIndex: n, featureIndex: i, layoutVertexArrayOffset: 0 }, u, s, a, o, e); return l } loadFeature(t) { const { featureIndex: e, sourceLayerIndex: r } = t; this.loadVTLayers(); const n = this.sourceLayerCoder.decode(r), i = this.vtFeatures[n]; if (i[e]) return i[e]; const s = this.vtLayers[n].feature(e); return i[e] = s, s } hasLayer(t) { for (const e of this.bucketLayerIDs) for (const r of e) if (t === r) return !0; return !1 } getId(t, e) { let r = t.id; if (this.promoteId) { const n = "string" == typeof this.promoteId ? this.promoteId : this.promoteId[e]; null != n && (r = t.properties[n]), "boolean" == typeof r && (r = Number(r)); } return r } } function hy(t, e, r, n, i) { return F(t, ((t, s) => { const a = e instanceof Ks ? e.get(s) : null; return a && a.evaluate ? a.evaluate(r, n, i) : a })) } function py(t, e) { return e - t } Oi(cy, "FeatureIndex", { omit: ["rawTileData", "sourceLayerCoder"] }); class fy { constructor(t, e) { this.width = t, this.height = e, this.nextRow = 0, this.image = new Ju({ width: t, height: e }), this.positions = {}, this.uploaded = !1; } getDash(t, e) { const r = this.getKey(t, e); return this.positions[r] } trim() { const t = this.width, e = this.height = P(this.nextRow); this.image.resize({ width: t, height: e }); } getKey(t, e) { return t.join(",") + e } getDashRanges(t, e, r) { const n = []; let i = t.length % 2 == 1 ? -t[t.length - 1] * r : 0, s = t[0] * r, a = !0; n.push({ left: i, right: s, isDash: a, zeroLength: 0 === t[0] }); let o = t[0]; for (let e = 1; e < t.length; e++) { a = !a; const l = t[e]; i = o * r, o += l, s = o * r, n.push({ left: i, right: s, isDash: a, zeroLength: 0 === l }); } return n } addRoundDash(t, e, r) { const n = e / 2; for (let e = -r; e <= r; e++) { const i = this.width * (this.nextRow + r + e); let s = 0, a = t[s]; for (let o = 0; o < this.width; o++) { o / a.right > 1 && (a = t[++s]); const l = Math.abs(o - a.left), u = Math.abs(o - a.right), c = Math.min(l, u); let h; const p = e / r * (n + 1); if (a.isDash) { const t = n - Math.abs(p); h = Math.sqrt(c * c + t * t); } else h = n - Math.sqrt(c * c + p * p); this.image.data[i + o] = Math.max(0, Math.min(255, h + 128)); } } } addRegularDash(t, e) { for (let e = t.length - 1; e >= 0; --e) { const r = t[e], n = t[e + 1]; r.zeroLength ? t.splice(e, 1) : n && n.isDash === r.isDash && (n.left = r.left, t.splice(e, 1)); } const r = t[0], n = t[t.length - 1]; r.isDash === n.isDash && (r.left = n.left - this.width, n.right = r.right + this.width); const i = this.width * this.nextRow; let s = 0, a = t[s]; for (let r = 0; r < this.width; r++) { r / a.right > 1 && (a = t[++s]); const n = Math.abs(r - a.left), o = Math.abs(r - a.right), l = Math.min(n, o); this.image.data[i + r] = Math.max(0, Math.min(255, (a.isDash ? l : -l) + e + 128)); } } addDash(t, e) { const r = this.getKey(t, e); if (this.positions[r]) return this.positions[r]; const n = "round" === e, i = n ? 7 : 0, s = 2 * i + 1; if (this.nextRow + s > this.height) return U("LineAtlas out of space"), null; 0 === t.length && t.push(1); let a = 0; for (let e = 0; e < t.length; e++) t[e] < 0 && (U("Negative value is found in line dasharray, replacing values with 0"), t[e] = 0), a += t[e]; if (0 !== a) { const r = this.width / a, s = this.getDashRanges(t, this.width, r); n ? this.addRoundDash(s, r, i) : this.addRegularDash(s, "square" === e ? .5 * r : 0); } const o = this.nextRow + i; this.nextRow += s; const l = { tl: [o, i], br: [a, 0] }; return this.positions[r] = l, l } } Oi(fy, "LineAtlas"); class dy { constructor(t) { const e = {}, r = []; for (const n in t) { const i = t[n], s = e[n] = {}; for (const t in i.glyphs) { const e = i.glyphs[+t]; if (!e || 0 === e.bitmap.width || 0 === e.bitmap.height) continue; const n = e.metrics.localGlyph ? 2 : 1, a = { x: 0, y: 0, w: e.bitmap.width + 2 * n, h: e.bitmap.height + 2 * n }; r.push(a), s[t] = a; } } const { w: n, h: i } = Cp(r), s = new Ju({ width: n || 1, height: i || 1 }); for (const r in t) { const n = t[r]; for (const t in n.glyphs) { const i = n.glyphs[+t]; if (!i || 0 === i.bitmap.width || 0 === i.bitmap.height) continue; const a = e[r][t], o = i.metrics.localGlyph ? 2 : 1; Ju.copy(i.bitmap, s, { x: 0, y: 0 }, { x: a.x + o, y: a.y + o }, i.bitmap); } } this.image = s, this.positions = e; } } Oi(dy, "GlyphAtlas"); class yy { constructor(t) { this.tileID = new Mh(t.tileID.overscaledZ, t.tileID.wrap, t.tileID.canonical.z, t.tileID.canonical.x, t.tileID.canonical.y), this.tileZoom = t.tileZoom, this.uid = t.uid, this.zoom = t.zoom, this.canonical = t.tileID.canonical, this.pixelRatio = t.pixelRatio, this.tileSize = t.tileSize, this.source = t.source, this.overscaling = this.tileID.overscaleFactor(), this.showCollisionBoxes = t.showCollisionBoxes, this.collectResourceTiming = !!t.collectResourceTiming, this.returnDependencies = !!t.returnDependencies, this.promoteId = t.promoteId, this.enableTerrain = !!t.enableTerrain, this.isSymbolTile = t.isSymbolTile, this.tileTransform = Vf(t.tileID.canonical, t.projection), this.projection = t.projection; } parse(t, e, r, n, i) { this.status = "parsing", this.data = t, this.collisionBoxArray = new Ea; const s = new kd(Object.keys(t.layers).sort()), a = new cy(this.tileID, this.promoteId); a.bucketLayerIDs = []; const o = {}, l = new fy(256, 256), u = { featureIndex: a, iconDependencies: {}, patternDependencies: {}, glyphDependencies: {}, lineAtlas: l, availableImages: r }, c = e.familiesBySource[this.source]; for (const e in c) { const n = t.layers[e]; if (!n) continue; let i = !1, l = !1; for (const t of c[e]) "symbol" === t[0].type ? i = !0 : l = !0; if (!0 === this.isSymbolTile && !i) continue; if (!1 === this.isSymbolTile && !l) continue; 1 === n.version && U(`Vector tile source "${this.source}" layer "${e}" does not use vector tile spec v2 and therefore may have some rendering errors.`); const h = s.encode(e), p = []; for (let t = 0; t < n.length; t++) { const r = n.feature(t), i = a.getId(r, e); p.push({ feature: r, id: i, index: t, sourceLayerIndex: h }); } for (const t of c[e]) { const e = t[0]; void 0 !== this.isSymbolTile && "symbol" === e.type !== this.isSymbolTile || e.minzoom && this.zoom < Math.floor(e.minzoom) || e.maxzoom && this.zoom >= e.maxzoom || "none" !== e.visibility && (my(t, this.zoom, r), (o[e.id] = e.createBucket({ index: a.bucketLayerIDs.length, layers: t, zoom: this.zoom, canonical: this.canonical, pixelRatio: this.pixelRatio, overscaling: this.overscaling, collisionBoxArray: this.collisionBoxArray, sourceLayerIndex: h, sourceID: this.source, enableTerrain: this.enableTerrain, projection: this.projection.spec, availableImages: r })).populate(p, u, this.tileID.canonical, this.tileTransform), a.bucketLayerIDs.push(t.map((t => t.id)))); } } let h, p, f, d; l.trim(); const y = { type: "maybePrepare", isSymbolTile: this.isSymbolTile, zoom: this.zoom }, m = F(u.glyphDependencies, (t => Object.keys(t).map(Number))); Object.keys(m).length ? n.send("getGlyphs", { uid: this.uid, stacks: m }, ((t, e) => { h || (h = t, p = e, v.call(this)); }), void 0, !1, y) : p = {}; const g = Object.keys(u.iconDependencies); g.length ? n.send("getImages", { icons: g, source: this.source, tileID: this.tileID, type: "icons" }, ((t, e) => { h || (h = t, f = e, v.call(this)); }), void 0, !1, y) : f = {}; const x = Object.keys(u.patternDependencies); function v() { if (h) return i(h); if (p && f && d) { const t = new dy(p), e = new Dp(f, d); for (const n in o) { const i = o[n]; i instanceof hd ? (my(i.layers, this.zoom, r), kf(i, p, t.positions, f, e.iconPositions, this.showCollisionBoxes, r, this.tileID.canonical, this.tileZoom, this.projection)) : i.hasPattern && (i instanceof jh || i instanceof $c || i instanceof fh) && (my(i.layers, this.zoom, r), i.addFeatures(u, this.tileID.canonical, e.patternPositions, r, this.tileTransform)); } this.status = "done", i(null, { buckets: T(o).filter((t => !t.isEmpty())), featureIndex: a, collisionBoxArray: this.collisionBoxArray, glyphAtlasImage: t.image, lineAtlas: l, imageAtlas: e, glyphMap: this.returnDependencies ? p : null, iconMap: this.returnDependencies ? f : null, glyphPositions: this.returnDependencies ? t.positions : null }); } } x.length ? n.send("getImages", { icons: x, source: this.source, tileID: this.tileID, type: "patterns" }, ((t, e) => { h || (h = t, d = e, v.call(this)); }), void 0, !1, y) : d = {}, v.call(this); } } function my(t, e, r) { const n = new $s(e); for (const e of t) e.recalculate(n, r); } class gy { constructor(t) { this.entries = {}, this.scheduler = t; } request(t, e, r, n) { const i = this.entries[t] = this.entries[t] || { callbacks: [] }; if (i.result) { const [t, r] = i.result; return this.scheduler ? this.scheduler.add((() => { n(t, r); }), e) : n(t, r), () => {} } return i.callbacks.push(n), i.cancel || (i.cancel = r(((r, n) => { i.result = [r, n]; for (const t of i.callbacks) this.scheduler ? this.scheduler.add((() => { t(r, n); }), e) : t(r, n); setTimeout((() => delete this.entries[t]), 3e3); }))), () => { i.result || (i.callbacks = i.callbacks.filter((t => t !== n)), i.callbacks.length || (i.cancel(), delete this.entries[t])); } } } function xy(t, e, r) { const n = JSON.stringify(t.request); return t.data && (this.deduped.entries[n] = { result: [null, t.data] }), this.deduped.request(n, { type: "parseTile", isSymbolTile: t.isSymbolTile, zoom: t.tileZoom }, (e => { const n = ut(t.request, ((t, n, i, s) => { t ? e(t) : n && e(null, { vectorTile: r ? void 0 : new sh(new op(n)), rawData: n, cacheControl: i, expires: s }); })); return () => { n.cancel(), e(); } }), e) } t.ARRAY_TYPE = To, t.AUTH_ERR_MSG = yt, t.Aabb = _l, t.Actor = class { constructor(t, r, n) { this.target = t, this.parent = r, this.mapId = n, this.callbacks = {}, this.cancelCallbacks = {}, V(["receive"], this), this.target.addEventListener("message", this.receive, !1), this.globalScope = N() ? t : e, this.scheduler = new Sd; } send(t, e, r, n, i = !1, s) { const a = Math.round(1e18 * Math.random()).toString(36).substring(0, 10); r && (r.metadata = s, this.callbacks[a] = r); const o = X(this.globalScope) ? void 0 : []; return this.target.postMessage({ id: a, type: t, hasCallback: !!r, targetMapId: n, mustQueue: i, sourceMapId: this.mapId, data: Gi(e, o) }, o), { cancel: () => { r && delete this.callbacks[a], this.target.postMessage({ id: a, type: "<cancel>", targetMapId: n, sourceMapId: this.mapId }); } } } receive(t) { const e = t.data, r = e.id; if (r && (!e.targetMapId || this.mapId === e.targetMapId)) if ("<cancel>" === e.type) { const t = this.cancelCallbacks[r]; delete this.cancelCallbacks[r], t && t.cancel(); } else if (e.mustQueue || N()) { const t = this.callbacks[r]; this.cancelCallbacks[r] = this.scheduler.add((() => this.processTask(r, e)), t && t.metadata || { type: "message" }); } else this.processTask(r, e); } processTask(t, e) { if ("<response>" === e.type) { const r = this.callbacks[t]; delete this.callbacks[t], r && (e.error ? r(Zi(e.error)) : r(null, Zi(e.data))); } else { const r = X(this.globalScope) ? void 0 : [], n = e.hasCallback ? (e, n) => { delete this.cancelCallbacks[t], this.target.postMessage({ id: t, type: "<response>", sourceMapId: this.mapId, error: e ? Gi(e) : null, data: Gi(n, r) }, r); } : t => {}, i = Zi(e.data); if (this.parent[e.type]) this.parent[e.type](e.sourceMapId, i, n); else if (this.parent.getWorkerSource) { const t = e.type.split("."); this.parent.getWorkerSource(e.sourceMapId, t[0], i.source)[t[1]](i, n); } else n(new Error(`Could not find function ${e.type}`)); } } remove() { this.scheduler.remove(), this.target.removeEventListener("message", this.receive, !1); } }, t.CanonicalTileID = kh, t.Color = Me, t.ColorMode = ey, t.CullFaceMode = iy, t.DEMData = Hd, t.DataConstantProperty = Ys, t.DedupedRequest = gy, t.DepthMode = Jd, t.EXTENT = ko, t.Elevation = class { isDataAvailableAtPoint(t) { const e = this._source(); if (this.isUsingMockSource() || !e || t.y < 0 || t.y > 1) return !1; const r = e.getSource().maxzoom, n = 1 << r, i = Math.floor(t.x), s = Math.floor((t.x - i) * n), a = Math.floor(t.y * n), o = this.findDEMTileFor(new Mh(r, i, r, s, a)); return !(!o || !o.dem) } getAtPointOrZero(t, e = 0) { return this.getAtPoint(t, e) || 0 } getAtPoint(t, e, r = !0) { if (this.isUsingMockSource()) return null; null == e && (e = null); const n = this._source(); if (!n) return e; if (t.y < 0 || t.y > 1) return e; const i = n.getSource().maxzoom, s = 1 << i, a = Math.floor(t.x), o = t.x - a, l = new Mh(i, a, i, Math.floor(o * s), Math.floor(t.y * s)), u = this.findDEMTileFor(l); if (!u || !u.dem) return e; const c = u.dem, h = 1 << u.tileID.canonical.z, p = (o * h - u.tileID.canonical.x) * c.dim, f = (t.y * h - u.tileID.canonical.y) * c.dim, d = Math.floor(p), y = Math.floor(f); return (r ? this.exaggeration() : 1) * Mr(Mr(c.get(d, y), c.get(d, y + 1), f - y), Mr(c.get(d + 1, y), c.get(d + 1, y + 1), f - y), p - d) } getAtTileOffset(t, e, r) { const n = 1 << t.canonical.z; return this.getAtPointOrZero(new pu(t.wrap + (t.canonical.x + e / ko) / n, (t.canonical.y + r / ko) / n)) } getAtTileOffsetFunc(t, e, r, n) { return i => { const s = this.getAtTileOffset(t, i.x, i.y), a = n.upVector(t.canonical, i.x, i.y); return Ho(a, a, s * n.upVectorScale(t.canonical, e, r).metersToTile), a } } getForTilePoints(t, e, r, n) { if (this.isUsingMockSource()) return !1; const i = uy.create(this, t, n); return !!i && (e.forEach((t => { t[2] = this.exaggeration() * i.getElevationAt(t[0], t[1], r); })), !0) } getMinMaxForTile(t) { if (this.isUsingMockSource()) return null; const e = this.findDEMTileFor(t); if (!e || !e.dem) return null; const r = e.dem.tree, n = e.tileID, i = 1 << t.canonical.z - n.canonical.z; let s = t.canonical.x / i - n.canonical.x, a = t.canonical.y / i - n.canonical.y, o = 0; for (let e = 0; e < t.canonical.z - n.canonical.z && !r.leaves[o]; e++) { s *= 2, a *= 2; const t = 2 * Math.floor(a) + Math.floor(s); o = r.childOffsets[o] + t, s %= 1, a %= 1; } return { min: this.exaggeration() * r.minimums[o], max: this.exaggeration() * r.maximums[o] } } getMinElevationBelowMSL() { throw new Error("Pure virtual method called.") } raycast(t, e, r) { throw new Error("Pure virtual method called.") } pointCoordinate(t) { throw new Error("Pure virtual method called.") } _source() { throw new Error("Pure virtual method called.") } isUsingMockSource() { throw new Error("Pure virtual method called.") } exaggeration() { throw new Error("Pure virtual method called.") } findDEMTileFor(t) { throw new Error("Pure virtual method called.") } get visibleDemTiles() { throw new Error("Getter must be implemented in subclass.") } }, t.ErrorEvent = Kt, t.EvaluationParameters = $s, t.Event = Xt, t.Evented = Yt, t.FillExtrusionBucket = fh, t.Frustum = wl, t.FrustumCorners = bl, t.GLOBE_RADIUS = Al, t.GLOBE_SCALE_MATCH_LATITUDE = 45, t.GLOBE_ZOOM_THRESHOLD_MAX = 6, t.GLOBE_ZOOM_THRESHOLD_MIN = 5, t.GlobeSharedBuffers = class { constructor(t) { this._createGrid(t), this._createPoles(t); } destroy() { this._poleIndexBuffer.destroy(), this._gridBuffer.destroy(), this._gridIndexBuffer.destroy(), this._poleNorthVertexBuffer.destroy(), this._poleSouthVertexBuffer.destroy(); for (const t of this._poleSegments) t.destroy(); for (const t of this._gridSegments) t.withSkirts.destroy(), t.withoutSkirts.destroy(); if (this._wireframeIndexBuffer) { this._wireframeIndexBuffer.destroy(); for (const t of this._wireframeSegments) t.destroy(); } } _fillGridMeshWithLods(t, e) { const r = new sa, n = new wa, i = [], s = t + 1 + 2, a = e[0] + 1, o = e[0] + 1 + (1 + e.length), l = (t, e, r) => { let n = t === s - 1 ? t - 2 : 0 === t ? t : t - 1; return n += r ? 24575 : 0, [n, e] }; for (let t = 0; t < s; ++t) r.emplaceBack(...l(t, 0, !0)); for (let t = 0; t < a; ++t) for (let e = 0; e < s; ++e) r.emplaceBack(...l(e, t, (0 === e || e === s - 1) && !0)); for (let t = 0; t < e.length; ++t) { const n = e[t]; for (let t = 0; t < s; ++t) r.emplaceBack(...l(t, n, !0)); } for (let t = 0; t < e.length; ++t) { const a = n.length, l = e[t] + 1 + 2, u = new wa; for (let r = 0; r < l - 1; r++) { const i = r === l - 2, a = i ? s * (o - e.length + t - r) : s; for (let t = 0; t < s - 1; t++) { const e = r * s + t; 0 === r || i || 0 === t || t === s - 2 ? (u.emplaceBack(e + 1, e, e + a), u.emplaceBack(e + a, e + a + 1, e + 1)) : (n.emplaceBack(e + 1, e, e + a), n.emplaceBack(e + a, e + a + 1, e + 1)); } } const c = So.simpleSegment(0, a, r.length, n.length - a); for (let t = 0; t < u.uint16.length; t += 3) n.emplaceBack(u.uint16[t], u.uint16[t + 1], u.uint16[t + 2]); const h = So.simpleSegment(0, a, r.length, n.length - a); i.push({ withoutSkirts: c, withSkirts: h }); } return { vertices: r, indices: n, segments: i } } _createGrid(t) { const e = this._fillGridMeshWithLods(Sl, kl); this._gridSegments = e.segments, this._gridBuffer = t.createVertexBuffer(e.vertices, xl.members), this._gridIndexBuffer = t.createIndexBuffer(e.indices, !0); } _createPoles(t) { const e = new wa; for (let t = 0; t <= Sl; t++) e.emplaceBack(0, t + 1, t + 2); this._poleIndexBuffer = t.createIndexBuffer(e, !0); const r = new ka, n = new ka; this._poleSegments = []; for (let t = 0, e = 0; t < 5; t++) { const i = 360 / (1 << t); r.emplaceBack(0, -Al, 0, .5, 0), n.emplaceBack(0, -Al, 0, .5, 1); for (let t = 0; t <= Sl; t++) { const e = t / Sl, s = Mr(0, i, e), [a, o, l] = $l(Jl, Ql, s, Al); r.emplaceBack(a, o, l, e, 0), n.emplaceBack(a, o, l, e, 1); } this._poleSegments.push(So.simpleSegment(e, 0, 66, 64)), e += 66; } this._poleNorthVertexBuffer = t.createVertexBuffer(r, ml, !1), this._poleSouthVertexBuffer = t.createVertexBuffer(n, ml, !1); } getGridBuffers(t, e) { return [this._gridBuffer, this._gridIndexBuffer, e ? this._gridSegments[t].withSkirts : this._gridSegments[t].withoutSkirts] } getPoleBuffers(t) { return [this._poleNorthVertexBuffer, this._poleSouthVertexBuffer, this._poleIndexBuffer, this._poleSegments[t]] } getWirefameBuffers(t, e) { if (!this._wireframeSegments) { const e = new Ma, r = Sl, n = r + 1 + 2, i = 1; this._wireframeSegments = []; for (let t = 0, s = 0; t < kl.length; t++) { const a = kl[t]; for (let t = i; t < a + i; t++) for (let s = i; s < r + i; s++) { const r = t * n + s; e.emplaceBack(r, r + 1), e.emplaceBack(r, r + n), e.emplaceBack(r, r + n + 1); } const o = a * r * 3; this._wireframeSegments.push(So.simpleSegment(0, s, (a + 1) * n, o)), s += o; } this._wireframeIndexBuffer = t.createIndexBuffer(e); } return [this._gridBuffer, this._wireframeIndexBuffer, this._wireframeSegments[e]] } }, t.GlyphManager = cf, t.ImagePosition = Pp, t.LivePerformanceUtils = Lt, t.LngLat = ru, t.LngLatBounds = Io, t.LocalGlyphMode = uf, t.MAX_MERCATOR_LATITUDE = cu, t.MercatorCoordinate = pu, t.ONE_EM = Wh, t.OverscaledTileID = Mh, t.PerformanceMarkers = Vt, t.Properties = Js, t.RGBAImage = Qu, t.Ray = vl, t.RequestManager = class { constructor(t, e, r) { this._transformRequestFn = t, this._customAccessToken = e, this._silenceAuthErrors = !!r, this._createSkuToken(); } _createSkuToken() { const t = function() { let t = ""; for (let e = 0; e < 10; e++) t += "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" [Math.floor(62 * Math.random())]; return { token: ["1", h, t].join(""), tokenExpiresAt: Date.now() + 432e5 } }(); this._skuToken = t.token, this._skuTokenExpiresAt = t.tokenExpiresAt; } _isSkuTokenExpired() { return Date.now() > this._skuTokenExpiresAt } transformRequest(t, e) { return this._transformRequestFn && this._transformRequestFn(t, e) || { url: t } } normalizeStyleURL(t, e) { if (!mt(t)) return t; const r = _t(t); return r.path = `/styles/v1${r.path}`, this._makeAPIURL(r, this._customAccessToken || e) } normalizeGlyphsURL(t, e) { if (!mt(t)) return t; const r = _t(t); return r.path = `/fonts/v1${r.path}`, this._makeAPIURL(r, this._customAccessToken || e) } normalizeSourceURL(t, e, r, n) { if (!mt(t)) return t; const i = _t(t); return i.path = `/v4/${i.authority}.json`, i.params.push("secure"), r && i.params.push(`language=${r}`), n && i.params.push(`worldview=${n}`), this._makeAPIURL(i, this._customAccessToken || e) } normalizeSpriteURL(t, e, r, n) { const i = _t(t); return mt(t) ? (i.path = `/styles/v1${i.path}/sprite${e}${r}`, this._makeAPIURL(i, this._customAccessToken || n)) : (i.path += `${e}${r}`, At(i)) } normalizeTileURL(t, e, r) { if (this._isSkuTokenExpired() && this._createSkuToken(), t && !mt(t)) return t; const n = _t(t); n.path = n.path.replace(/(\.(png|jpg)\d*)(?=$)/, `${e||r&&"raster"!==n.authority&&512===r?"@2x":""}${s.supported?".webp":"$1"}`), "raster" === n.authority ? n.path = `/${i.RASTER_URL_PREFIX}${n.path}` : (n.path = n.path.replace(/^.+\/v4\//, "/"), n.path = `/${i.TILE_URL_VERSION}${n.path}`); const a = this._customAccessToken || function(t) { for (const e of t) { const t = e.match(/^access_token=(.*)$/); if (t) return t[1] } return null }(n.params) || i.ACCESS_TOKEN; return i.REQUIRE_ACCESS_TOKEN && a && this._skuToken && n.params.push(`sku=${this._skuToken}`), this._makeAPIURL(n, a) } canonicalizeTileURL(t, e) { const r = _t(t); if (!r.path.match(/^(\/v4\/|\/raster\/v1\/)/) || !r.path.match(/\.[\w]+$/)) return t; let n = "mapbox://"; r.path.match(/^\/raster\/v1\//) ? n += `raster/${r.path.replace(`/${i.RASTER_URL_PREFIX}/`,"")}` : n += `tiles/${r.path.replace(`/${i.TILE_URL_VERSION}/`,"")}`; let s = r.params; return e && (s = s.filter((t => !t.match(/^access_token=/)))), s.length && (n += `?${s.join("&")}`), n } canonicalizeTileset(t, e) { const r = !!e && mt(e), n = []; for (const e of t.tiles || []) gt(e) ? n.push(this.canonicalizeTileURL(e, r)) : n.push(e); return n } _makeAPIURL(t, e) { const r = "See https://docs.mapbox.com/api/overview/#access-tokens-and-token-scopes", n = _t(i.API_URL); if (t.protocol = n.protocol, t.authority = n.authority, "http" === t.protocol) { const e = t.params.indexOf("secure"); e >= 0 && t.params.splice(e, 1); } if ("/" !== n.path && (t.path = `${n.path}${t.path}`), !i.REQUIRE_ACCESS_TOKEN) return At(t); if (e = e || i.ACCESS_TOKEN, !this._silenceAuthErrors) { if (!e) throw new Error(`An API access token is required to use Mapbox GL. ${r}`); if ("s" === e[0]) throw new Error(`Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). ${r}`) } return t.params = t.params.filter((t => -1 === t.indexOf("access_token"))), t.params.push(`access_token=${e||""}`), At(t) } }, t.ResourceType = st, t.SegmentVector = So, t.SourceCache = sy, t.StencilMode = ty, t.StructArrayLayout1ui2 = Ta, t.StructArrayLayout2f1f2i16 = xa, t.StructArrayLayout2i4 = sa, t.StructArrayLayout2ui4 = Ma, t.StructArrayLayout3f12 = ba, t.StructArrayLayout3ui6 = wa, t.StructArrayLayout4i8 = oa, t.StructArrayLayout5f20 = ka, t.Texture = _d, t.Tile = Fd, t.Transitionable = qs, t.Uniform1f = to, t.Uniform1i = class extends Qa { constructor(t) { super(t), this.current = 0; } set(t, e, r) { this.fetchUniformLocation(t, e) && this.current !== r && (this.current = r, this.gl.uniform1i(this.location, r)); } }, t.Uniform2f = class extends Qa { constructor(t) { super(t), this.current = [0, 0]; } set(t, e, r) { this.fetchUniformLocation(t, e) && (r[0] === this.current[0] && r[1] === this.current[1] || (this.current = r, this.gl.uniform2f(this.location, r[0], r[1]))); } }, t.Uniform3f = class extends Qa { constructor(t) { super(t), this.current = [0, 0, 0]; } set(t, e, r) { this.fetchUniformLocation(t, e) && (r[0] === this.current[0] && r[1] === this.current[1] && r[2] === this.current[2] || (this.current = r, this.gl.uniform3f(this.location, r[0], r[1], r[2]))); } }, t.Uniform4f = eo, t.UniformColor = ro, t.UniformMatrix2f = class extends Qa { constructor(t) { super(t), this.current = so; } set(t, e, r) { if (this.fetchUniformLocation(t, e)) for (let t = 0; t < 4; t++) if (r[t] !== this.current[t]) { this.current = r, this.gl.uniformMatrix2fv(this.location, !1, r); break } } }, t.UniformMatrix3f = class extends Qa { constructor(t) { super(t), this.current = io; } set(t, e, r) { if (this.fetchUniformLocation(t, e)) for (let t = 0; t < 9; t++) if (r[t] !== this.current[t]) { this.current = r, this.gl.uniformMatrix3fv(this.location, !1, r); break } } }, t.UniformMatrix4f = class extends Qa { constructor(t) { super(t), this.current = no; } set(t, e, r) { if (this.fetchUniformLocation(t, e)) { if (r[12] !== this.current[12] || r[0] !== this.current[0]) return this.current = r, void this.gl.uniformMatrix4fv(this.location, !1, r); for (let t = 1; t < 16; t++) if (r[t] !== this.current[t]) { this.current = r, this.gl.uniformMatrix4fv(this.location, !1, r); break } } } }, t.UnwrappedTileID = Ih, t.ValidationError = Wn, t.VectorTileFeature = ah, t.VectorTileWorkerSource = class extends Yt { constructor(t, e, r, n, i) { super(), this.actor = t, this.layerIndex = e, this.availableImages = r, this.loadVectorData = i || xy, this.loading = {}, this.loaded = {}, this.deduped = new gy(t.scheduler), this.isSpriteLoaded = n, this.scheduler = t.scheduler; } loadTile(t, e) { const r = t.uid, n = t && t.request, i = n && n.collectResourceTiming, s = this.loading[r] = new yy(t); s.abort = this.loadVectorData(t, ((a, o) => { const l = !this.loading[r]; if (delete this.loading[r], l || a || !o) return s.status = "done", l || (this.loaded[r] = s), e(a); const u = o.rawData, c = {}; o.expires && (c.expires = o.expires), o.cacheControl && (c.cacheControl = o.cacheControl), s.vectorTile = o.vectorTile || new sh(new op(u)); const h = () => { s.parse(s.vectorTile, this.layerIndex, this.availableImages, this.actor, ((t, r) => { if (t || !r) return e(t); const s = {}; if (i) { const t = jt(n); t.length > 0 && (s.resourceTiming = JSON.parse(JSON.stringify(t))); } e(null, z({ rawTileData: u.slice(0) }, r, c, s)); })); }; this.isSpriteLoaded ? h() : this.once("isSpriteLoaded", (() => { this.scheduler ? this.scheduler.add(h, { type: "parseTile", isSymbolTile: t.isSymbolTile, zoom: t.tileZoom }) : h(); })), this.loaded = this.loaded || {}, this.loaded[r] = s; })); } reloadTile(t, e) { const r = this.loaded, n = t.uid, i = this; if (r && r[n]) { const s = r[n]; s.showCollisionBoxes = t.showCollisionBoxes, s.enableTerrain = !!t.enableTerrain, s.projection = t.projection, s.tileTransform = Vf(t.tileID.canonical, t.projection); const a = (t, r) => { const n = s.reloadCallback; n && (delete s.reloadCallback, s.parse(s.vectorTile, i.layerIndex, this.availableImages, i.actor, n)), e(t, r); }; "parsing" === s.status ? s.reloadCallback = a : "done" === s.status && (s.vectorTile ? s.parse(s.vectorTile, this.layerIndex, this.availableImages, this.actor, a) : a()); } } abortTile(t, e) { const r = t.uid, n = this.loading[r]; n && (n.abort && n.abort(), delete this.loading[r]), e(); } removeTile(t, e) { const r = this.loaded, n = t.uid; r && r[n] && delete r[n], e(); } }, t.WritingMode = Vp, t.ZoomDependentExpression = Xn, t.add = Go, t.addDynamicAttributes = od, t.adjoint = function(t, e) { var r = e[0], n = e[1], i = e[2], s = e[3], a = e[4], o = e[5], l = e[6], u = e[7], c = e[8]; return t[0] = a * c - o * u, t[1] = i * u - n * c, t[2] = n * o - i * a, t[3] = o * l - s * c, t[4] = r * c - i * l, t[5] = i * s - r * o, t[6] = s * u - a * l, t[7] = n * l - r * u, t[8] = r * a - n * s, t }, t.asyncAll = M, t.bezier = _, t.bindAll = V, t.boundsAttributes = Vd, t.bufferConvexPolygon = function(t, e) { const r = []; for (let n = 0; n < t.length; n++) { const i = I(n - 1, -1, t.length - 1), s = I(n + 1, -1, t.length - 1), a = t[n], o = t[s], l = t[i].sub(a).unit(), u = o.sub(a).unit(), c = u.angleWithSep(l.x, l.y), h = l.add(u).unit().mult(-1 * e / Math.sin(c / 2)); r.push(a.add(h)); } return r }, t.cacheEntryPossiblyAdded = function(t) { it++, it > tt && (t.getActor().send("enforceCacheSizeLimit", Q), it = 0); }, t.calculateGlobeLabelMatrix = function(t, e) { const { x: r, y: n } = t.point, i = Xl(r, n, t.worldSize / t._pixelsPerMercatorPixel, 0, 0); return Po(i, i, Zl(Pl(e))) }, t.calculateGlobeMatrix = function(t) { const { x: e, y: r } = t.point, { lng: n, lat: i } = t._center; return Xl(e, r, t.worldSize, n, i) }, t.calculateGlobeMercatorMatrix = function(t) { const e = t.pixelsPerMeter, r = e / au(1, t.center.lat), n = Eo(new Float64Array(16)); return Do(n, n, [t.point.x, t.point.y, 0]), Vo(n, n, [r, r, e]), Float32Array.from(n) }, t.circumferenceAtLatitude = nu, t.clamp = S, t.clearTileCache = function(t) { if (!et()) return; const r = e.caches.delete(H); t && r.catch(t).then((() => t())); }, t.clipLine = sf, t.clone = function(t) { var e = new To(16); return e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e[4] = t[4], e[5] = t[5], e[6] = t[6], e[7] = t[7], e[8] = t[8], e[9] = t[9], e[10] = t[10], e[11] = t[11], e[12] = t[12], e[13] = t[13], e[14] = t[14], e[15] = t[15], e }, t.clone$1 = j, t.collisionCircleLayout = Hh, t.config = i, t.conjugate = function(t, e) { return t[0] = -e[0], t[1] = -e[1], t[2] = -e[2], t[3] = e[3], t }, t.create = function() { var t = new To(16); return To != Float32Array && (t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0), t[0] = 1, t[5] = 1, t[10] = 1, t[15] = 1, t }, t.create$1 = zo, t.createExpression = Gn, t.createLayout = na, t.createStyleLayer = function(t) { return "custom" === t.type ? new xd(t) : new wd[t.type](t) }, t.cross = tl, t.degToRad = x, t.distance = function(t, e) { return Math.hypot(e[0] - t[0], e[1] - t[1], e[2] - t[2]) }, t.div = function(t, e, r) { return t[0] = e[0] / r[0], t[1] = e[1] / r[1], t[2] = e[2] / r[2], t }, t.dot = Qo, t.earthRadius = tu, t.ease = A, t.easeCubicInOut = w, t.ecefToLatLng = function([t, e, r]) { const n = Math.hypot(t, e, r), i = Math.atan2(t, r), s = .5 * Math.PI - Math.acos(-e / n); return new ru(v(i), v(s)) }, t.emitValidationErrors = Ri, t.endsWith = L, t.enforceCacheSizeLimit = function(t) { rt(), W && W.then((e => { e.keys().then((r => { for (let n = 0; n < r.length - t; n++) e.delete(r[n]); })); })); }, t.evaluateSizeForFeature = tp, t.evaluateSizeForZoom = ep, t.evaluateVariableOffset = Sf, t.evented = Ls, t.exactEquals = function(t, e) { return t[0] === e[0] && t[1] === e[1] && t[2] === e[2] && t[3] === e[3] }, t.exactEquals$1 = function(t, e) { return t[0] === e[0] && t[1] === e[1] && t[2] === e[2] }, t.exported = Nt, t.exported$1 = s, t.extend = z, t.extend$1 = Wt, t.fillExtrusionHeightLift = bh, t.filterObject = R, t.fromMat4 = function(t, e) { return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[4], t[4] = e[5], t[5] = e[6], t[6] = e[8], t[7] = e[9], t[8] = e[10], t }, t.fromQuat = function(t, e) { var r = e[0], n = e[1], i = e[2], s = e[3], a = r + r, o = n + n, l = i + i, u = r * a, c = n * a, h = n * o, p = i * a, f = i * o, d = i * l, y = s * a, m = s * o, g = s * l; return t[0] = 1 - h - d, t[1] = c + g, t[2] = p - m, t[3] = 0, t[4] = c - g, t[5] = 1 - u - d, t[6] = f + y, t[7] = 0, t[8] = p + m, t[9] = f - y, t[10] = 1 - u - h, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, t }, t.fromRotation = function(t, e) { var r = Math.sin(e), n = Math.cos(e); return t[0] = n, t[1] = r, t[2] = 0, t[3] = -r, t[4] = n, t[5] = 0, t[6] = 0, t[7] = 0, t[8] = 1, t }, t.fromScaling = Ro, t.furthestTileCorner = function(t) { const e = Math.round((t + 45 + 360) % 360 / 90) % 4; return b[e] }, t.getAABBPointSquareDist = function(t, e, r) { let n = 0; for (let i = 0; i < 2; ++i) { const s = r ? r[i] : 0; t[i] > s && (n += (t[i] - s) * (t[i] - s)), e[i] < s && (n += (s - e[i]) * (s - e[i])); } return n }, t.getAnchorAlignment = Zp, t.getAnchorJustification = If, t.getBounds = function(t) { let e = 1 / 0, r = 1 / 0, n = -1 / 0, i = -1 / 0; for (const s of t) e = Math.min(e, s.x), r = Math.min(r, s.y), n = Math.max(n, s.x), i = Math.max(i, s.y); return { min: new d(e, r), max: new d(n, i) } }, t.getColumn = Y, t.getGridMatrix = function(t, e, r, n) { const i = e.getNorth(), s = e.getSouth(), a = e.getWest(), o = e.getEast(), l = 1 << t.z, u = o - a, c = i - s, h = u / Sl, p = -c / kl[r], f = [0, h, 0, p, 0, 0, i, a, 0]; if (t.z > 0) { const t = 180 / n; Bo(f, f, [t / u + 1, 0, 0, 0, t / c + 1, 0, -.5 * t / h, .5 * t / p, 1]); } return f[2] = l, f[5] = t.x, f[8] = t.y, f }, t.getImage = dt, t.getJSON = function(t, e) { return lt(z(t, { type: "json" }), e) }, t.getLatitudinalLod = function(t) { const e = cu - 5; t = S(t, -e, e) / e * 90; const r = Math.pow(Math.abs(Math.sin(x(t))), 3); return Math.round(r * (kl.length - 1)) }, t.getMapSessionAPI = Pt, t.getPerformanceMeasurement = jt, t.getProjection = rd, t.getRTLTextPluginStatus = Fs, t.getReferrer = ot, t.getTilePoint = function(t, { x: e, y: r }, n = 0) { return new d(((e - n) * t.scale - t.x) * ko, (r * t.scale - t.y) * ko) }, t.getTileVec3 = function(t, e, r = 0) { return No(((e.x - r) * t.scale - t.x) * ko, (e.y * t.scale - t.y) * ko, uu(e.z, e.y)) }, t.getVideo = function(t, r) { const n = e.document.createElement("video"); n.muted = !0, n.onloadstart = function() { r(null, n); }; for (let r = 0; r < t.length; r++) { const i = e.document.createElement("source"); ct(t[r]) || (n.crossOrigin = "Anonymous"), i.src = t[r], n.appendChild(i); } return { cancel: () => {} } }, t.globeCenterToScreenPoint = function(t) { const e = [0, 0, 0], r = Eo(new Float64Array(16)); return Po(r, t.pixelMatrix, t.globeMatrix), el(e, e, r), new d(e[0], e[1]) }, t.globeDenormalizeECEF = Zl, t.globeECEFOrigin = function(t, e) { const r = [0, 0, 0]; return el(r, r, Gl(Pl(e.canonical))), el(r, r, t), r }, t.globeMetersToEcef = zl, t.globeNormalizeECEF = Gl, t.globePixelsToTileUnits = function(t, e) { return ko / (512 * Math.pow(2, t)) * ql(Pl(e)) }, t.globePoleMatrixForTile = function(t, e, r) { const n = Eo(new Float64Array(16)), i = (e / (1 << t) - .5) * Math.PI * 2; return Fo(n, r.globeMatrix, i), Float32Array.from(n) }, t.globeTileBounds = Pl, t.globeTiltAtLngLat = Yl, t.globeToMercatorTransition = Kl, t.globeUseCustomAntiAliasing = function(t, e, r) { const n = Kl(r.zoom), i = t.style.map._antialias, s = !!e.extStandardDerivatives, a = e.extStandardDerivativesForceOff || t.terrain && t.terrain.exaggeration() > 0; return 0 === n && !i && !a && s }, t.identity = Eo, t.identity$1 = hl, t.invert = Co, t.isFullscreen = function() { return !!e.document.fullscreenElement || !!e.document.webkitFullscreenElement }, t.isLngLatBehindGlobe = Hl, t.isMapAuthenticated = function(t) { return Dt.has(t) }, t.isMapboxURL = mt, t.isSafariWithAntialiasingBug = function(t) { const e = t.navigator ? t.navigator.userAgent : null; return !!X(t) && e && (e.match("Version/15.4") || e.match("Version/15.5") || e.match(/CPU (OS|iPhone OS) (15_4|15_5) like Mac OS X/)) }, t.latFromMercatorY = lu, t.latLngToECEF = Ul, t.len = al, t.length = qo, t.length$1 = function(t) { return Math.hypot(t[0], t[1], t[2], t[3]) }, t.lngFromMercatorX = ou, t.loadVectorTile = xy, t.makeRequest = lt, t.mapValue = function(t, e, r, n, i) { return S((t - e) / (r - e) * (i - n) + n, n, i) }, t.mercatorScale = hu, t.mercatorXfromLng = iu, t.mercatorYfromLat = su, t.mercatorZfromAltitude = au, t.mul = $o, t.mul$1 = sl, t.multiply = Po, t.multiply$1 = Bo, t.multiply$2 = Xo, t.nextPowerOfTwo = P, t.normalize = Jo, t.normalize$1 = dl, t.normalize$2 = ll, t.number = Mr, t.ortho = function(t, e, r, n, i, s, a) { var o = 1 / (e - r), l = 1 / (n - i), u = 1 / (s - a); return t[0] = -2 * o, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = -2 * l, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = 2 * u, t[11] = 0, t[12] = (e + r) * o, t[13] = (i + n) * l, t[14] = (a + s) * u, t[15] = 1, t }, t.pbf = op, t.perspective = function(t, e, r, n, i) { var s, a = 1 / Math.tan(e / 2); return t[0] = a / r, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = a, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[11] = -1, t[12] = 0, t[13] = 0, t[15] = 0, null != i && i !== 1 / 0 ? (t[10] = (i + n) * (s = 1 / (n - i)), t[14] = 2 * i * n * s) : (t[10] = -1, t[14] = -2 * n), t }, t.pick = function(t, e) { const r = {}; for (let n = 0; n < e.length; n++) { const i = e[n]; i in t && (r[i] = t[i]); } return r }, t.plugin = js, t.pointGeometry = d, t.polesInViewport = function(t) { const e = Eo(new Float64Array(16)); Po(e, t.pixelMatrix, t.globeMatrix); const r = [0, Il, 0], n = [0, Ml, 0]; return el(r, r, e), el(n, n, e), [r[0] > 0 && r[0] <= t.width && r[1] > 0 && r[1] <= t.height && !Hl(t, new ru(t.center.lat, 90)), n[0] > 0 && n[0] <= t.width && n[1] > 0 && n[1] <= t.height && !Hl(t, new ru(t.center.lat, -90))] }, t.polygonContainsPoint = Du, t.polygonIntersectsBox = Vu, t.polygonIntersectsPolygon = ku, t.polygonizeBounds = function(t, e, r = 0, n = !0) { const i = new d(r, r), s = t.sub(i), a = e.add(i), o = [s, new d(a.x, s.y), a, new d(s.x, a.y)]; return n && o.push(s.clone()), o }, t.posAttributes = xl, t.postMapLoadEvent = zt, t.postPerformanceEvent = Et, t.postTurnstileEvent = Mt, t.potpack = Cp, t.prevPowerOfTwo = function(t) { return t <= 1 ? 1 : Math.pow(2, Math.floor(Math.log(t) / Math.LN2)) }, t.radToDeg = v, t.refProperties = ["type", "source", "source-layer", "minzoom", "maxzoom", "filter", "layout"], t.registerForPluginStateChange = function(t) { return t({ pluginStatus: Cs, pluginURL: Ps }), Ls.on("pluginStateChange", t), t }, t.removeAuthState = function(t) { Dt.delete(t); }, t.renderColorRamp = ec, t.resample = du, t.rotateX = Lo, t.rotateX$1 = pl, t.rotateY = Fo, t.rotateY$1 = fl, t.rotateZ = function(t, e, r) { var n = Math.sin(r), i = Math.cos(r), s = e[0], a = e[1], o = e[2], l = e[3], u = e[4], c = e[5], h = e[6], p = e[7]; return e !== t && (t[8] = e[8], t[9] = e[9], t[10] = e[10], t[11] = e[11], t[12] = e[12], t[13] = e[13], t[14] = e[14], t[15] = e[15]), t[0] = s * i + u * n, t[1] = a * i + c * n, t[2] = o * i + h * n, t[3] = l * i + p * n, t[4] = u * i - s * n, t[5] = c * i - a * n, t[6] = h * i - o * n, t[7] = p * i - l * n, t }, t.rotateZ$1 = function(t, e, r) { r *= .5; var n = e[0], i = e[1], s = e[2], a = e[3], o = Math.sin(r), l = Math.cos(r); return t[0] = n * l + i * o, t[1] = i * l - n * o, t[2] = s * l + a * o, t[3] = a * l - s * o, t }, t.scale = Vo, t.scale$1 = ol, t.scale$2 = Ho, t.scaleAndAdd = Wo, t.set = function(t, e, r, n) { return t[0] = e, t[1] = r, t[2] = n, t }, t.setCacheLimits = function(t, e) { Q = t, tt = e; }, t.setColumn = function(t, e, r) { t[4 * e + 0] = r[0], t[4 * e + 1] = r[1], t[4 * e + 2] = r[2], t[4 * e + 3] = r[3]; }, t.setRTLTextPlugin = function(t, e, r = !1) { if (Cs === Ts || Cs === zs || Cs === Bs) throw new Error("setRTLTextPlugin cannot be called multiple times."); Ps = Nt.resolveURL(t), Cs = Ts, Es = e, Vs(), r || Rs(); }, t.smoothstep = k, t.spec = Ht, t.squaredLength = function(t) { var e = t[0], r = t[1], n = t[2]; return e * e + r * r + n * n }, t.storeAuthState = function(t, e) { e ? Dt.add(t) : Dt.delete(t); }, t.sub = il, t.subtract = Zo, t.symbolSize = rp, t.tileAABB = function(t, e, r, n, i, s, a, o, l) { if ("globe" === l.name) return Fl(t, e, new kh(r, n, i)); const u = Vf({ z: r, x: n, y: i }, l); return new _l([(s + u.x / u.scale) * e, e * (u.y / u.scale), a], [(s + u.x2 / u.scale) * e, e * (u.y2 / u.scale), o]) }, t.tileCornersToBounds = Rl, t.tileTransform = Vf, t.transformMat3 = function(t, e, r) { var n = e[0], i = e[1], s = e[2]; return t[0] = n * r[0] + i * r[3] + s * r[6], t[1] = n * r[1] + i * r[4] + s * r[7], t[2] = n * r[2] + i * r[5] + s * r[8], t }, t.transformMat4 = el, t.transformMat4$1 = ul, t.transformQuat = rl, t.transitionTileAABBinECEF = Vl, t.translate = Do, t.transpose = function(t, e) { if (t === e) { var r = e[1], n = e[2], i = e[5]; t[1] = e[3], t[2] = e[6], t[3] = r, t[5] = e[7], t[6] = n, t[7] = i; } else t[0] = e[0], t[1] = e[3], t[2] = e[6], t[3] = e[1], t[4] = e[4], t[5] = e[7], t[6] = e[2], t[7] = e[5], t[8] = e[8]; return t }, t.triggerPluginCompletionEvent = Ds, t.uniqueId = E, t.updateGlobeVertexNormal = function(t, e, r, n, i) { const s = 5 * e + 2; t.float32[s + 0] = r, t.float32[s + 1] = n, t.float32[s + 2] = i; }, t.validateCustomStyleLayer = function(t) { const e = [], r = t.id; return void 0 === r && e.push({ message: `layers.${r}: missing required property "id"` }), void 0 === t.render && e.push({ message: `layers.${r}: missing required method "render"` }), t.renderingMode && "2d" !== t.renderingMode && "3d" !== t.renderingMode && e.push({ message: `layers.${r}: property "renderingMode" must be either "2d" or "3d"` }), e }, t.validateFilter = t => Fi(xi(t)), t.validateFog = t => Fi(Bi(t)), t.validateLayer = t => Fi(Ai(t)), t.validateLight = t => Fi(Ti(t)), t.validateSource = t => Fi(Ii(t)), t.validateStyle = Di, t.validateTerrain = t => Fi(zi(t)), t.values = T, t.vectorTile = Xc, t.version = r, t.warnOnce = U, t.window = e, t.wrap = I; })); define(["./shared"], (function(e) { "use strict"; function t(e) { if ("number" == typeof e || "boolean" == typeof e || "string" == typeof e || null == e) return JSON.stringify(e); if (Array.isArray(e)) { let r = "["; for (const o of e) r += `${t(o)},`; return `${r}]` } let r = "{"; for (const o of Object.keys(e).sort()) r += `${o}:${t(e[o])},`; return `${r}}` } function r(r) { let o = ""; for (const n of e.refProperties) o += `/${t(r[n])}`; return o } class o { constructor(e) { this.keyCache = {}, e && this.replace(e); } replace(e) { this._layerConfigs = {}, this._layers = {}, this.update(e, []); } update(t, o) { for (const r of t) this._layerConfigs[r.id] = r, (this._layers[r.id] = e.createStyleLayer(r)).compileFilter(), this.keyCache[r.id] && delete this.keyCache[r.id]; for (const e of o) delete this.keyCache[e], delete this._layerConfigs[e], delete this._layers[e]; this.familiesBySource = {}; const n = function(e, t) { const o = {}; for (let n = 0; n < e.length; n++) { const i = t && t[e[n].id] || r(e[n]); t && (t[e[n].id] = i); let s = o[i]; s || (s = o[i] = []), s.push(e[n]); } const n = []; for (const e in o) n.push(o[e]); return n }(e.values(this._layerConfigs), this.keyCache); for (const e of n) { const t = e.map((e => this._layers[e.id])), r = t[0]; if ("none" === r.visibility) continue; const o = r.source || ""; let n = this.familiesBySource[o]; n || (n = this.familiesBySource[o] = {}); const i = r.sourceLayer || "_geojsonTileLayer"; let s = n[i]; s || (s = n[i] = []), s.push(t); } } } class n { loadTile(t, r) { const { uid: o, encoding: n, rawImageData: i, padding: s, buildQuadTree: a } = t, l = e.window.ImageBitmap && i instanceof e.window.ImageBitmap ? this.getImageData(i, s) : i; r(null, new e.DEMData(o, l, n, s < 1, a)); } getImageData(e, t) { this.offscreenCanvas && this.offscreenCanvasContext || (this.offscreenCanvas = new OffscreenCanvas(e.width, e.height), this.offscreenCanvasContext = this.offscreenCanvas.getContext("2d", { willReadFrequently: !0 })), this.offscreenCanvas.width = e.width, this.offscreenCanvas.height = e.height, this.offscreenCanvasContext.drawImage(e, 0, 0, e.width, e.height); const r = this.offscreenCanvasContext.getImageData(-t, -t, e.width + 2 * t, e.height + 2 * t); return this.offscreenCanvasContext.clearRect(0, 0, this.offscreenCanvas.width, this.offscreenCanvas.height), r } } var i = function e(t, r) { var o, n = t && t.type; if ("FeatureCollection" === n) for (o = 0; o < t.features.length; o++) e(t.features[o], r); else if ("GeometryCollection" === n) for (o = 0; o < t.geometries.length; o++) e(t.geometries[o], r); else if ("Feature" === n) e(t.geometry, r); else if ("Polygon" === n) s(t.coordinates, r); else if ("MultiPolygon" === n) for (o = 0; o < t.coordinates.length; o++) s(t.coordinates[o], r); return t }; function s(e, t) { if (0 !== e.length) { a(e[0], t); for (var r = 1; r < e.length; r++) a(e[r], !t); } } function a(e, t) { for (var r = 0, o = 0, n = 0, i = e.length, s = i - 1; n < i; s = n++) { var a = (e[n][0] - e[s][0]) * (e[s][1] + e[n][1]), l = r + a; o += Math.abs(r) >= Math.abs(a) ? r - l + a : a - l + r, r = l; } r + o >= 0 != !!t && e.reverse(); } const l = e.VectorTileFeature.prototype.toGeoJSON; class u { constructor(t) { this._feature = t, this.extent = e.EXTENT, this.type = t.type, this.properties = t.tags, "id" in t && !isNaN(t.id) && (this.id = parseInt(t.id, 10)); } loadGeometry() { if (1 === this._feature.type) { const t = []; for (const r of this._feature.geometry) t.push([new e.pointGeometry(r[0], r[1])]); return t } { const t = []; for (const r of this._feature.geometry) { const o = []; for (const t of r) o.push(new e.pointGeometry(t[0], t[1])); t.push(o); } return t } } toGeoJSON(e, t, r) { return l.call(this, e, t, r) } } class h { constructor(t) { this.layers = { _geojsonTileLayer: this }, this.name = "_geojsonTileLayer", this.extent = e.EXTENT, this.length = t.length, this._features = t; } feature(e) { return new u(this._features[e]) } } var c = {}, f = { get exports() { return c }, set exports(e) { c = e; } }, p = e.pointGeometry, g = e.vectorTile.VectorTileFeature, d = m; function m(e, t) { this.options = t || {}, this.features = e, this.length = e.length; } function y(e, t) { this.id = "number" == typeof e.id ? e.id : void 0, this.type = e.type, this.rawGeometry = 1 === e.type ? [e.geometry] : e.geometry, this.properties = e.tags, this.extent = t || 4096; } m.prototype.feature = function(e) { return new y(this.features[e], this.options.extent) }, y.prototype.loadGeometry = function() { var e = this.rawGeometry; this.geometry = []; for (var t = 0; t < e.length; t++) { for (var r = e[t], o = [], n = 0; n < r.length; n++) o.push(new p(r[n][0], r[n][1])); this.geometry.push(o); } return this.geometry }, y.prototype.bbox = function() { this.geometry || this.loadGeometry(); for (var e = this.geometry, t = 1 / 0, r = -1 / 0, o = 1 / 0, n = -1 / 0, i = 0; i < e.length; i++) for (var s = e[i], a = 0; a < s.length; a++) { var l = s[a]; t = Math.min(t, l.x), r = Math.max(r, l.x), o = Math.min(o, l.y), n = Math.max(n, l.y); } return [t, o, r, n] }, y.prototype.toGeoJSON = g.prototype.toGeoJSON; var v = e.pbf, x = d; function w(e) { var t = new v; return function(e, t) { for (var r in e.layers) t.writeMessage(3, S, e.layers[r]); }(e, t), t.finish() } function S(e, t) { var r; t.writeVarintField(15, e.version || 1), t.writeStringField(1, e.name || ""), t.writeVarintField(5, e.extent || 4096); var o = { keys: [], values: [], keycache: {}, valuecache: {} }; for (r = 0; r < e.length; r++) o.feature = e.feature(r), t.writeMessage(2, M, o); var n = o.keys; for (r = 0; r < n.length; r++) t.writeStringField(3, n[r]); var i = o.values; for (r = 0; r < i.length; r++) t.writeMessage(4, T, i[r]); } function M(e, t) { var r = e.feature; void 0 !== r.id && t.writeVarintField(1, r.id), t.writeMessage(2, P, e), t.writeVarintField(3, r.type), t.writeMessage(4, I, r); } function P(e, t) { var r = e.feature, o = e.keys, n = e.values, i = e.keycache, s = e.valuecache; for (var a in r.properties) { var l = r.properties[a], u = i[a]; if (null !== l) { void 0 === u && (o.push(a), i[a] = u = o.length - 1), t.writeVarint(u); var h = typeof l; "string" !== h && "boolean" !== h && "number" !== h && (l = JSON.stringify(l)); var c = h + ":" + l, f = s[c]; void 0 === f && (n.push(l), s[c] = f = n.length - 1), t.writeVarint(f); } } } function b(e, t) { return (t << 3) + (7 & e) } function k(e) { return e << 1 ^ e >> 31 } function I(e, t) { for (var r = e.loadGeometry(), o = e.type, n = 0, i = 0, s = r.length, a = 0; a < s; a++) { var l = r[a], u = 1; 1 === o && (u = l.length), t.writeVarint(b(1, u)); for (var h = 3 === o ? l.length - 1 : l.length, c = 0; c < h; c++) { 1 === c && 1 !== o && t.writeVarint(b(2, h - 1)); var f = l[c].x - n, p = l[c].y - i; t.writeVarint(k(f)), t.writeVarint(k(p)), n += f, i += p; } 3 === o && t.writeVarint(b(7, 1)); } } function T(e, t) { var r = typeof e; "string" === r ? t.writeStringField(1, e) : "boolean" === r ? t.writeBooleanField(7, e) : "number" === r && (e % 1 != 0 ? t.writeDoubleField(3, e) : e < 0 ? t.writeSVarintField(6, e) : t.writeVarintField(5, e)); } function _(e, t, r, o, n, i) { if (n - o <= r) return; const s = o + n >> 1; L(e, t, s, o, n, i % 2), _(e, t, r, o, s - 1, i + 1), _(e, t, r, s + 1, n, i + 1); } function L(e, t, r, o, n, i) { for (; n > o;) { if (n - o > 600) { const s = n - o + 1, a = r - o + 1, l = Math.log(s), u = .5 * Math.exp(2 * l / 3), h = .5 * Math.sqrt(l * u * (s - u) / s) * (a - s / 2 < 0 ? -1 : 1); L(e, t, r, Math.max(o, Math.floor(r - a * u / s + h)), Math.min(n, Math.floor(r + (s - a) * u / s + h)), i); } const s = t[2 * r + i]; let a = o, l = n; for (C(e, t, o, r), t[2 * n + i] > s && C(e, t, o, n); a < l;) { for (C(e, t, a, l), a++, l--; t[2 * a + i] < s;) a++; for (; t[2 * l + i] > s;) l--; } t[2 * o + i] === s ? C(e, t, o, l) : (l++, C(e, t, l, n)), l <= r && (o = l + 1), r <= l && (n = l - 1); } } function C(e, t, r, o) { O(e, r, o), O(t, 2 * r, 2 * o), O(t, 2 * r + 1, 2 * o + 1); } function O(e, t, r) { const o = e[t]; e[t] = e[r], e[r] = o; } function z(e, t, r, o) { const n = e - r, i = t - o; return n * n + i * i } f.exports = w, c.fromVectorTileJs = w, c.fromGeojsonVt = function(e, t) { t = t || {}; var r = {}; for (var o in e) r[o] = new x(e[o].features, t), r[o].name = o, r[o].version = t.version, r[o].extent = t.extent; return w({ layers: r }) }, c.GeoJSONWrapper = x; const E = e => e[0], F = e => e[1]; class N { constructor(e, t = E, r = F, o = 64, n = Float64Array) { this.nodeSize = o, this.points = e; const i = e.length < 65536 ? Uint16Array : Uint32Array, s = this.ids = new i(e.length), a = this.coords = new n(2 * e.length); for (let o = 0; o < e.length; o++) s[o] = o, a[2 * o] = t(e[o]), a[2 * o + 1] = r(e[o]); _(s, a, o, 0, s.length - 1, 0); } range(e, t, r, o) { return function(e, t, r, o, n, i, s) { const a = [0, e.length - 1, 0], l = []; let u, h; for (; a.length;) { const c = a.pop(), f = a.pop(), p = a.pop(); if (f - p <= s) { for (let s = p; s <= f; s++) u = t[2 * s], h = t[2 * s + 1], u >= r && u <= n && h >= o && h <= i && l.push(e[s]); continue } const g = Math.floor((p + f) / 2); u = t[2 * g], h = t[2 * g + 1], u >= r && u <= n && h >= o && h <= i && l.push(e[g]); const d = (c + 1) % 2; (0 === c ? r <= u : o <= h) && (a.push(p), a.push(g - 1), a.push(d)), (0 === c ? n >= u : i >= h) && (a.push(g + 1), a.push(f), a.push(d)); } return l }(this.ids, this.coords, e, t, r, o, this.nodeSize) } within(e, t, r) { return function(e, t, r, o, n, i) { const s = [0, e.length - 1, 0], a = [], l = n * n; for (; s.length;) { const u = s.pop(), h = s.pop(), c = s.pop(); if (h - c <= i) { for (let n = c; n <= h; n++) z(t[2 * n], t[2 * n + 1], r, o) <= l && a.push(e[n]); continue } const f = Math.floor((c + h) / 2), p = t[2 * f], g = t[2 * f + 1]; z(p, g, r, o) <= l && a.push(e[f]); const d = (u + 1) % 2; (0 === u ? r - n <= p : o - n <= g) && (s.push(c), s.push(f - 1), s.push(d)), (0 === u ? r + n >= p : o + n >= g) && (s.push(f + 1), s.push(h), s.push(d)); } return a }(this.ids, this.coords, e, t, r, this.nodeSize) } } const j = { minZoom: 0, maxZoom: 16, minPoints: 2, radius: 40, extent: 512, nodeSize: 64, log: !1, generateId: !1, reduce: null, map: e => e }, Z = Math.fround || (G = new Float32Array(1), e => (G[0] = +e, G[0])); var G; class J { constructor(e) { this.options = B(Object.create(j), e), this.trees = new Array(this.options.maxZoom + 1); } load(e) { const { log: t, minZoom: r, maxZoom: o, nodeSize: n } = this.options; t && console.time("total time"); const i = `prepare ${e.length} points`; t && console.time(i), this.points = e; let s = []; for (let t = 0; t < e.length; t++) e[t].geometry && s.push(Y(e[t], t)); this.trees[o + 1] = new N(s, R, q, n, Float32Array), t && console.timeEnd(i); for (let e = o; e >= r; e--) { const r = +Date.now(); s = this._cluster(s, e), this.trees[e] = new N(s, R, q, n, Float32Array), t && console.log("z%d: %d clusters in %dms", e, s.length, +Date.now() - r); } return t && console.timeEnd("total time"), this } getClusters(e, t) { let r = ((e[0] + 180) % 360 + 360) % 360 - 180; const o = Math.max(-90, Math.min(90, e[1])); let n = 180 === e[2] ? 180 : ((e[2] + 180) % 360 + 360) % 360 - 180; const i = Math.max(-90, Math.min(90, e[3])); if (e[2] - e[0] >= 360) r = -180, n = 180; else if (r > n) { const e = this.getClusters([r, o, 180, i], t), s = this.getClusters([-180, o, n, i], t); return e.concat(s) } const s = this.trees[this._limitZoom(t)], a = s.range(A(r), D(i), A(n), D(o)), l = []; for (const e of a) { const t = s.points[e]; l.push(t.numPoints ? X(t) : this.points[t.index]); } return l } getChildren(e) { const t = this._getOriginId(e), r = this._getOriginZoom(e), o = "No cluster with the specified id.", n = this.trees[r]; if (!n) throw new Error(o); const i = n.points[t]; if (!i) throw new Error(o); const s = this.options.radius / (this.options.extent * Math.pow(2, r - 1)), a = n.within(i.x, i.y, s), l = []; for (const t of a) { const r = n.points[t]; r.parentId === e && l.push(r.numPoints ? X(r) : this.points[r.index]); } if (0 === l.length) throw new Error(o); return l } getLeaves(e, t, r) { const o = []; return this._appendLeaves(o, e, t = t || 10, r = r || 0, 0), o } getTile(e, t, r) { const o = this.trees[this._limitZoom(e)], n = Math.pow(2, e), { extent: i, radius: s } = this.options, a = s / i, l = (r - a) / n, u = (r + 1 + a) / n, h = { features: [] }; return this._addTileFeatures(o.range((t - a) / n, l, (t + 1 + a) / n, u), o.points, t, r, n, h), 0 === t && this._addTileFeatures(o.range(1 - a / n, l, 1, u), o.points, n, r, n, h), t === n - 1 && this._addTileFeatures(o.range(0, l, a / n, u), o.points, -1, r, n, h), h.features.length ? h : null } getClusterExpansionZoom(e) { let t = this._getOriginZoom(e) - 1; for (; t <= this.options.maxZoom;) { const r = this.getChildren(e); if (t++, 1 !== r.length) break; e = r[0].properties.cluster_id; } return t } _appendLeaves(e, t, r, o, n) { const i = this.getChildren(t); for (const t of i) { const i = t.properties; if (i && i.cluster ? n + i.point_count <= o ? n += i.point_count : n = this._appendLeaves(e, i.cluster_id, r, o, n) : n < o ? n++ : e.push(t), e.length === r) break } return n } _addTileFeatures(e, t, r, o, n, i) { for (const s of e) { const e = t[s], a = e.numPoints; let l, u, h; if (a) l = V(e), u = e.x, h = e.y; else { const t = this.points[e.index]; l = t.properties, u = A(t.geometry.coordinates[0]), h = D(t.geometry.coordinates[1]); } const c = { type: 1, geometry: [ [Math.round(this.options.extent * (u * n - r)), Math.round(this.options.extent * (h * n - o))] ], tags: l }; let f; a ? f = e.id : this.options.generateId ? f = e.index : this.points[e.index].id && (f = this.points[e.index].id), void 0 !== f && (c.id = f), i.features.push(c); } } _limitZoom(e) { return Math.max(this.options.minZoom, Math.min(Math.floor(+e), this.options.maxZoom + 1)) } _cluster(e, t) { const r = [], { radius: o, extent: n, reduce: i, minPoints: s } = this.options, a = o / (n * Math.pow(2, t)); for (let o = 0; o < e.length; o++) { const n = e[o]; if (n.zoom <= t) continue; n.zoom = t; const l = this.trees[t + 1], u = l.within(n.x, n.y, a), h = n.numPoints || 1; let c = h; for (const e of u) { const r = l.points[e]; r.zoom > t && (c += r.numPoints || 1); } if (c > h && c >= s) { let e = n.x * h, s = n.y * h, a = i && h > 1 ? this._map(n, !0) : null; const f = (o << 5) + (t + 1) + this.points.length; for (const r of u) { const o = l.points[r]; if (o.zoom <= t) continue; o.zoom = t; const u = o.numPoints || 1; e += o.x * u, s += o.y * u, o.parentId = f, i && (a || (a = this._map(n, !0)), i(a, this._map(o))); } n.parentId = f, r.push(W(e / c, s / c, f, c, a)); } else if (r.push(n), c > 1) for (const e of u) { const o = l.points[e]; o.zoom <= t || (o.zoom = t, r.push(o)); } } return r } _getOriginId(e) { return e - this.points.length >> 5 } _getOriginZoom(e) { return (e - this.points.length) % 32 } _map(e, t) { if (e.numPoints) return t ? B({}, e.properties) : e.properties; const r = this.points[e.index].properties, o = this.options.map(r); return t && o === r ? B({}, o) : o } } function W(e, t, r, o, n) { return { x: Z(e), y: Z(t), zoom: 1 / 0, id: r, parentId: -1, numPoints: o, properties: n } } function Y(e, t) { const [r, o] = e.geometry.coordinates; return { x: Z(A(r)), y: Z(D(o)), zoom: 1 / 0, index: t, parentId: -1 } } function X(e) { return { type: "Feature", id: e.id, properties: V(e), geometry: { type: "Point", coordinates: [(t = e.x, 360 * (t - .5)), $(e.y)] } }; var t; } function V(e) { const t = e.numPoints, r = t >= 1e4 ? `${Math.round(t/1e3)}k` : t >= 1e3 ? Math.round(t / 100) / 10 + "k" : t; return B(B({}, e.properties), { cluster: !0, cluster_id: e.id, point_count: t, point_count_abbreviated: r }) } function A(e) { return e / 360 + .5 } function D(e) { const t = Math.sin(e * Math.PI / 180), r = .5 - .25 * Math.log((1 + t) / (1 - t)) / Math.PI; return r < 0 ? 0 : r > 1 ? 1 : r } function $(e) { const t = (180 - 360 * e) * Math.PI / 180; return 360 * Math.atan(Math.exp(t)) / Math.PI - 90 } function B(e, t) { for (const r in t) e[r] = t[r]; return e } function R(e) { return e.x } function q(e) { return e.y } function U(e, t, r, o) { for (var n, i = o, s = r - t >> 1, a = r - t, l = e[t], u = e[t + 1], h = e[r], c = e[r + 1], f = t + 3; f < r; f += 3) { var p = Q(e[f], e[f + 1], l, u, h, c); if (p > i) n = f, i = p; else if (p === i) { var g = Math.abs(f - s); g < a && (n = f, a = g); } } i > o && (n - t > 3 && U(e, t, n, o), e[n + 2] = i, r - n > 3 && U(e, n, r, o)); } function Q(e, t, r, o, n, i) { var s = n - r, a = i - o; if (0 !== s || 0 !== a) { var l = ((e - r) * s + (t - o) * a) / (s * s + a * a); l > 1 ? (r = n, o = i) : l > 0 && (r += s * l, o += a * l); } return (s = e - r) * s + (a = t - o) * a } function H(e, t, r, o) { var n = { id: void 0 === e ? null : e, type: t, geometry: r, tags: o, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0 }; return function(e) { var t = e.geometry, r = e.type; if ("Point" === r || "MultiPoint" === r || "LineString" === r) K(e, t); else if ("Polygon" === r || "MultiLineString" === r) for (var o = 0; o < t.length; o++) K(e, t[o]); else if ("MultiPolygon" === r) for (o = 0; o < t.length; o++) for (var n = 0; n < t[o].length; n++) K(e, t[o][n]); }(n), n } function K(e, t) { for (var r = 0; r < t.length; r += 3) e.minX = Math.min(e.minX, t[r]), e.minY = Math.min(e.minY, t[r + 1]), e.maxX = Math.max(e.maxX, t[r]), e.maxY = Math.max(e.maxY, t[r + 1]); } function ee(e, t, r, o) { if (t.geometry) { var n = t.geometry.coordinates, i = t.geometry.type, s = Math.pow(r.tolerance / ((1 << r.maxZoom) * r.extent), 2), a = [], l = t.id; if (r.promoteId ? l = t.properties[r.promoteId] : r.generateId && (l = o || 0), "Point" === i) te(n, a); else if ("MultiPoint" === i) for (var u = 0; u < n.length; u++) te(n[u], a); else if ("LineString" === i) re(n, a, s, !1); else if ("MultiLineString" === i) { if (r.lineMetrics) { for (u = 0; u < n.length; u++) re(n[u], a = [], s, !1), e.push(H(l, "LineString", a, t.properties)); return } oe(n, a, s, !1); } else if ("Polygon" === i) oe(n, a, s, !0); else { if ("MultiPolygon" !== i) { if ("GeometryCollection" === i) { for (u = 0; u < t.geometry.geometries.length; u++) ee(e, { id: l, geometry: t.geometry.geometries[u], properties: t.properties }, r, o); return } throw new Error("Input data is not a valid GeoJSON object.") } for (u = 0; u < n.length; u++) { var h = []; oe(n[u], h, s, !0), a.push(h); } } e.push(H(l, i, a, t.properties)); } } function te(e, t) { t.push(ne(e[0])), t.push(ie(e[1])), t.push(0); } function re(e, t, r, o) { for (var n, i, s = 0, a = 0; a < e.length; a++) { var l = ne(e[a][0]), u = ie(e[a][1]); t.push(l), t.push(u), t.push(0), a > 0 && (s += o ? (n * u - l * i) / 2 : Math.sqrt(Math.pow(l - n, 2) + Math.pow(u - i, 2))), n = l, i = u; } var h = t.length - 3; t[2] = 1, U(t, 0, h, r), t[h + 2] = 1, t.size = Math.abs(s), t.start = 0, t.end = t.size; } function oe(e, t, r, o) { for (var n = 0; n < e.length; n++) { var i = []; re(e[n], i, r, o), t.push(i); } } function ne(e) { return e / 360 + .5 } function ie(e) { var t = Math.sin(e * Math.PI / 180), r = .5 - .25 * Math.log((1 + t) / (1 - t)) / Math.PI; return r < 0 ? 0 : r > 1 ? 1 : r } function se(e, t, r, o, n, i, s, a) { if (o /= t, i >= (r /= t) && s < o) return e; if (s < r || i >= o) return null; for (var l = [], u = 0; u < e.length; u++) { var h = e[u], c = h.geometry, f = h.type, p = 0 === n ? h.minX : h.minY, g = 0 === n ? h.maxX : h.maxY; if (p >= r && g < o) l.push(h); else if (!(g < r || p >= o)) { var d = []; if ("Point" === f || "MultiPoint" === f) ae(c, d, r, o, n); else if ("LineString" === f) le(c, d, r, o, n, !1, a.lineMetrics); else if ("MultiLineString" === f) he(c, d, r, o, n, !1); else if ("Polygon" === f) he(c, d, r, o, n, !0); else if ("MultiPolygon" === f) for (var m = 0; m < c.length; m++) { var y = []; he(c[m], y, r, o, n, !0), y.length && d.push(y); } if (d.length) { if (a.lineMetrics && "LineString" === f) { for (m = 0; m < d.length; m++) l.push(H(h.id, f, d[m], h.tags)); continue } "LineString" !== f && "MultiLineString" !== f || (1 === d.length ? (f = "LineString", d = d[0]) : f = "MultiLineString"), "Point" !== f && "MultiPoint" !== f || (f = 3 === d.length ? "Point" : "MultiPoint"), l.push(H(h.id, f, d, h.tags)); } } } return l.length ? l : null } function ae(e, t, r, o, n) { for (var i = 0; i < e.length; i += 3) { var s = e[i + n]; s >= r && s <= o && (t.push(e[i]), t.push(e[i + 1]), t.push(e[i + 2])); } } function le(e, t, r, o, n, i, s) { for (var a, l, u = ue(e), h = 0 === n ? fe : pe, c = e.start, f = 0; f < e.length - 3; f += 3) { var p = e[f], g = e[f + 1], d = e[f + 2], m = e[f + 3], y = e[f + 4], v = 0 === n ? p : g, x = 0 === n ? m : y, w = !1; s && (a = Math.sqrt(Math.pow(p - m, 2) + Math.pow(g - y, 2))), v < r ? x > r && (l = h(u, p, g, m, y, r), s && (u.start = c + a * l)) : v > o ? x < o && (l = h(u, p, g, m, y, o), s && (u.start = c + a * l)) : ce(u, p, g, d), x < r && v >= r && (l = h(u, p, g, m, y, r), w = !0), x > o && v <= o && (l = h(u, p, g, m, y, o), w = !0), !i && w && (s && (u.end = c + a * l), t.push(u), u = ue(e)), s && (c += a); } var S = e.length - 3; p = e[S], g = e[S + 1], d = e[S + 2], (v = 0 === n ? p : g) >= r && v <= o && ce(u, p, g, d), S = u.length - 3, i && S >= 3 && (u[S] !== u[0] || u[S + 1] !== u[1]) && ce(u, u[0], u[1], u[2]), u.length && t.push(u); } function ue(e) { var t = []; return t.size = e.size, t.start = e.start, t.end = e.end, t } function he(e, t, r, o, n, i) { for (var s = 0; s < e.length; s++) le(e[s], t, r, o, n, i, !1); } function ce(e, t, r, o) { e.push(t), e.push(r), e.push(o); } function fe(e, t, r, o, n, i) { var s = (i - t) / (o - t); return e.push(i), e.push(r + (n - r) * s), e.push(1), s } function pe(e, t, r, o, n, i) { var s = (i - r) / (n - r); return e.push(t + (o - t) * s), e.push(i), e.push(1), s } function ge(e, t) { for (var r = [], o = 0; o < e.length; o++) { var n, i = e[o], s = i.type; if ("Point" === s || "MultiPoint" === s || "LineString" === s) n = de(i.geometry, t); else if ("MultiLineString" === s || "Polygon" === s) { n = []; for (var a = 0; a < i.geometry.length; a++) n.push(de(i.geometry[a], t)); } else if ("MultiPolygon" === s) for (n = [], a = 0; a < i.geometry.length; a++) { for (var l = [], u = 0; u < i.geometry[a].length; u++) l.push(de(i.geometry[a][u], t)); n.push(l); } r.push(H(i.id, s, n, i.tags)); } return r } function de(e, t) { var r = []; r.size = e.size, void 0 !== e.start && (r.start = e.start, r.end = e.end); for (var o = 0; o < e.length; o += 3) r.push(e[o] + t, e[o + 1], e[o + 2]); return r } function me(e, t) { if (e.transformed) return e; var r, o, n, i = 1 << e.z, s = e.x, a = e.y; for (r = 0; r < e.features.length; r++) { var l = e.features[r], u = l.geometry, h = l.type; if (l.geometry = [], 1 === h) for (o = 0; o < u.length; o += 2) l.geometry.push(ye(u[o], u[o + 1], t, i, s, a)); else for (o = 0; o < u.length; o++) { var c = []; for (n = 0; n < u[o].length; n += 2) c.push(ye(u[o][n], u[o][n + 1], t, i, s, a)); l.geometry.push(c); } } return e.transformed = !0, e } function ye(e, t, r, o, n, i) { return [Math.round(r * (e * o - n)), Math.round(r * (t * o - i))] } function ve(e, t, r, o, n) { for (var i = t === n.maxZoom ? 0 : n.tolerance / ((1 << t) * n.extent), s = { features: [], numPoints: 0, numSimplified: 0, numFeatures: 0, source: null, x: r, y: o, z: t, transformed: !1, minX: 2, minY: 1, maxX: -1, maxY: 0 }, a = 0; a < e.length; a++) { s.numFeatures++, xe(s, e[a], i, n); var l = e[a].minX, u = e[a].minY, h = e[a].maxX, c = e[a].maxY; l < s.minX && (s.minX = l), u < s.minY && (s.minY = u), h > s.maxX && (s.maxX = h), c > s.maxY && (s.maxY = c); } return s } function xe(e, t, r, o) { var n = t.geometry, i = t.type, s = []; if ("Point" === i || "MultiPoint" === i) for (var a = 0; a < n.length; a += 3) s.push(n[a]), s.push(n[a + 1]), e.numPoints++, e.numSimplified++; else if ("LineString" === i) we(s, n, e, r, !1, !1); else if ("MultiLineString" === i || "Polygon" === i) for (a = 0; a < n.length; a++) we(s, n[a], e, r, "Polygon" === i, 0 === a); else if ("MultiPolygon" === i) for (var l = 0; l < n.length; l++) { var u = n[l]; for (a = 0; a < u.length; a++) we(s, u[a], e, r, !0, 0 === a); } if (s.length) { var h = t.tags || null; if ("LineString" === i && o.lineMetrics) { for (var c in h = {}, t.tags) h[c] = t.tags[c]; h.mapbox_clip_start = n.start / n.size, h.mapbox_clip_end = n.end / n.size; } var f = { geometry: s, type: "Polygon" === i || "MultiPolygon" === i ? 3 : "LineString" === i || "MultiLineString" === i ? 2 : 1, tags: h }; null !== t.id && (f.id = t.id), e.features.push(f); } } function we(e, t, r, o, n, i) { var s = o * o; if (o > 0 && t.size < (n ? s : o)) r.numPoints += t.length / 3; else { for (var a = [], l = 0; l < t.length; l += 3)(0 === o || t[l + 2] > s) && (r.numSimplified++, a.push(t[l]), a.push(t[l + 1])), r.numPoints++; n && function(e, t) { for (var r = 0, o = 0, n = e.length, i = n - 2; o < n; i = o, o += 2) r += (e[o] - e[i]) * (e[o + 1] + e[i + 1]); if (r > 0 === t) for (o = 0, n = e.length; o < n / 2; o += 2) { var s = e[o], a = e[o + 1]; e[o] = e[n - 2 - o], e[o + 1] = e[n - 1 - o], e[n - 2 - o] = s, e[n - 1 - o] = a; } }(a, i), e.push(a); } } function Se(e, t) { var r = (t = this.options = function(e, t) { for (var r in t) e[r] = t[r]; return e }(Object.create(this.options), t)).debug; if (r && console.time("preprocess data"), t.maxZoom < 0 || t.maxZoom > 24) throw new Error("maxZoom should be in the 0-24 range"); if (t.promoteId && t.generateId) throw new Error("promoteId and generateId cannot be used together."); var o = function(e, t) { var r = []; if ("FeatureCollection" === e.type) for (var o = 0; o < e.features.length; o++) ee(r, e.features[o], t, o); else ee(r, "Feature" === e.type ? e : { geometry: e }, t); return r }(e, t); this.tiles = {}, this.tileCoords = [], r && (console.timeEnd("preprocess data"), console.log("index: maxZoom: %d, maxPoints: %d", t.indexMaxZoom, t.indexMaxPoints), console.time("generate tiles"), this.stats = {}, this.total = 0), o = function(e, t) { var r = t.buffer / t.extent, o = e, n = se(e, 1, -1 - r, r, 0, -1, 2, t), i = se(e, 1, 1 - r, 2 + r, 0, -1, 2, t); return (n || i) && (o = se(e, 1, -r, 1 + r, 0, -1, 2, t) || [], n && (o = ge(n, 1).concat(o)), i && (o = o.concat(ge(i, -1)))), o }(o, t), o.length && this.splitTile(o, 0, 0, 0), r && (o.length && console.log("features: %d, points: %d", this.tiles[0].numFeatures, this.tiles[0].numPoints), console.timeEnd("generate tiles"), console.log("tiles generated:", this.total, JSON.stringify(this.stats))); } function Me(e, t, r) { return 32 * ((1 << e) * r + t) + e } function Pe(e, t) { const r = e.tileID.canonical; if (!this._geoJSONIndex) return t(null, null); const o = this._geoJSONIndex.getTile(r.z, r.x, r.y); if (!o) return t(null, null); const n = new h(o.features); let i = c(n); 0 === i.byteOffset && i.byteLength === i.buffer.byteLength || (i = new Uint8Array(i)), t(null, { vectorTile: n, rawData: i.buffer }); } Se.prototype.options = { maxZoom: 14, indexMaxZoom: 5, indexMaxPoints: 1e5, tolerance: 3, extent: 4096, buffer: 64, lineMetrics: !1, promoteId: null, generateId: !1, debug: 0 }, Se.prototype.splitTile = function(e, t, r, o, n, i, s) { for (var a = [e, t, r, o], l = this.options, u = l.debug; a.length;) { o = a.pop(), r = a.pop(), t = a.pop(), e = a.pop(); var h = 1 << t, c = Me(t, r, o), f = this.tiles[c]; if (!f && (u > 1 && console.time("creation"), f = this.tiles[c] = ve(e, t, r, o, l), this.tileCoords.push({ z: t, x: r, y: o }), u)) { u > 1 && (console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)", t, r, o, f.numFeatures, f.numPoints, f.numSimplified), console.timeEnd("creation")); var p = "z" + t; this.stats[p] = (this.stats[p] || 0) + 1, this.total++; } if (f.source = e, n) { if (t === l.maxZoom || t === n) continue; var g = 1 << n - t; if (r !== Math.floor(i / g) || o !== Math.floor(s / g)) continue } else if (t === l.indexMaxZoom || f.numPoints <= l.indexMaxPoints) continue; if (f.source = null, 0 !== e.length) { u > 1 && console.time("clipping"); var d, m, y, v, x, w, S = .5 * l.buffer / l.extent, M = .5 - S, P = .5 + S, b = 1 + S; d = m = y = v = null, x = se(e, h, r - S, r + P, 0, f.minX, f.maxX, l), w = se(e, h, r + M, r + b, 0, f.minX, f.maxX, l), e = null, x && (d = se(x, h, o - S, o + P, 1, f.minY, f.maxY, l), m = se(x, h, o + M, o + b, 1, f.minY, f.maxY, l), x = null), w && (y = se(w, h, o - S, o + P, 1, f.minY, f.maxY, l), v = se(w, h, o + M, o + b, 1, f.minY, f.maxY, l), w = null), u > 1 && console.timeEnd("clipping"), a.push(d || [], t + 1, 2 * r, 2 * o), a.push(m || [], t + 1, 2 * r, 2 * o + 1), a.push(y || [], t + 1, 2 * r + 1, 2 * o), a.push(v || [], t + 1, 2 * r + 1, 2 * o + 1); } } }, Se.prototype.getTile = function(e, t, r) { var o = this.options, n = o.extent, i = o.debug; if (e < 0 || e > 24) return null; var s = 1 << e, a = Me(e, t = (t % s + s) % s, r); if (this.tiles[a]) return me(this.tiles[a], n); i > 1 && console.log("drilling down to z%d-%d-%d", e, t, r); for (var l, u = e, h = t, c = r; !l && u > 0;) u--, h = Math.floor(h / 2), c = Math.floor(c / 2), l = this.tiles[Me(u, h, c)]; return l && l.source ? (i > 1 && console.log("found parent tile z%d-%d-%d", u, h, c), i > 1 && console.time("drilling down"), this.splitTile(l.source, u, h, c, e, t, r), i > 1 && console.timeEnd("drilling down"), this.tiles[a] ? me(this.tiles[a], n) : null) : null }; class be extends e.VectorTileWorkerSource { constructor(e, t, r, o, n) { super(e, t, r, o, Pe), n && (this.loadGeoJSON = n); } loadData(t, r) { const o = t && t.request, n = o && o.collectResourceTiming; this.loadGeoJSON(t, ((s, a) => { if (s || !a) return r(s); if ("object" != typeof a) return r(new Error(`Input data given to '${t.source}' is not a valid GeoJSON object.`)); { i(a, !0); try { if (t.filter) { const r = e.createExpression(t.filter, { type: "boolean", "property-type": "data-driven", overridable: !1, transition: !1 }); if ("error" === r.result) throw new Error(r.value.map((e => `${e.key}: ${e.message}`)).join(", ")); const o = a.features.filter((e => r.value.evaluate({ zoom: 0 }, e))); a = { type: "FeatureCollection", features: o }; } this._geoJSONIndex = t.cluster ? new J(function({ superclusterOptions: t, clusterProperties: r }) { if (!r || !t) return t; const o = {}, n = {}, i = { accumulated: null, zoom: 0 }, s = { properties: null }, a = Object.keys(r); for (const t of a) { const [i, s] = r[t], a = e.createExpression(s), l = e.createExpression("string" == typeof i ? [i, ["accumulated"], ["get", t] ] : i); o[t] = a.value, n[t] = l.value; } return t.map = e => { s.properties = e; const t = {}; for (const e of a) t[e] = o[e].evaluate(i, s); return t }, t.reduce = (e, t) => { s.properties = t; for (const t of a) i.accumulated = e[t], e[t] = n[t].evaluate(i, s); }, t }(t)).load(a.features) : function(e, t) { return new Se(e, t) }(a, t.geojsonVtOptions); } catch (s) { return r(s) } this.loaded = {}; const l = {}; if (n) { const r = e.getPerformanceMeasurement(o); r && (l.resourceTiming = {}, l.resourceTiming[t.source] = JSON.parse(JSON.stringify(r))); } r(null, l); } })); } reloadTile(e, t) { const r = this.loaded; return r && r[e.uid] ? super.reloadTile(e, t) : this.loadTile(e, t) } loadGeoJSON(t, r) { if (t.request) e.getJSON(t.request, r); else { if ("string" != typeof t.data) return r(new Error(`Input data given to '${t.source}' is not a valid GeoJSON object.`)); try { return r(null, JSON.parse(t.data)) } catch (e) { return r(new Error(`Input data given to '${t.source}' is not a valid GeoJSON object.`)) } } } getClusterExpansionZoom(e, t) { try { t(null, this._geoJSONIndex.getClusterExpansionZoom(e.clusterId)); } catch (e) { t(e); } } getClusterChildren(e, t) { try { t(null, this._geoJSONIndex.getChildren(e.clusterId)); } catch (e) { t(e); } } getClusterLeaves(e, t) { try { t(null, this._geoJSONIndex.getLeaves(e.clusterId, e.limit, e.offset)); } catch (e) { t(e); } } } class ke { constructor(t) { this.self = t, this.actor = new e.Actor(t, this), this.layerIndexes = {}, this.availableImages = {}, this.isSpriteLoaded = {}, this.projections = {}, this.defaultProjection = e.getProjection({ name: "mercator" }), this.workerSourceTypes = { vector: e.VectorTileWorkerSource, geojson: be }, this.workerSources = {}, this.demWorkerSources = {}, this.self.registerWorkerSource = (e, t) => { if (this.workerSourceTypes[e]) throw new Error(`Worker source with name "${e}" already registered.`); this.workerSourceTypes[e] = t; }, this.self.registerRTLTextPlugin = t => { if (e.plugin.isParsed()) throw new Error("RTL text plugin already registered."); e.plugin.applyArabicShaping = t.applyArabicShaping, e.plugin.processBidirectionalText = t.processBidirectionalText, e.plugin.processStyledBidirectionalText = t.processStyledBidirectionalText; }; } clearCaches(e, t, r) { delete this.layerIndexes[e], delete this.availableImages[e], delete this.workerSources[e], delete this.demWorkerSources[e], r(); } checkIfReady(e, t, r) { r(); } setReferrer(e, t) { this.referrer = t; } spriteLoaded(t, r) { this.isSpriteLoaded[t] = r; for (const o in this.workerSources[t]) { const n = this.workerSources[t][o]; for (const t in n) n[t] instanceof e.VectorTileWorkerSource && (n[t].isSpriteLoaded = r, n[t].fire(new e.Event("isSpriteLoaded"))); } } setImages(e, t, r) { this.availableImages[e] = t; for (const r in this.workerSources[e]) { const o = this.workerSources[e][r]; for (const e in o) o[e].availableImages = t; } r(); } enableTerrain(e, t, r) { this.terrain = t, r(); } setProjection(t, r) { this.projections[t] = e.getProjection(r); } setLayers(e, t, r) { this.getLayerIndex(e).replace(t), r(); } updateLayers(e, t, r) { this.getLayerIndex(e).update(t.layers, t.removedIds), r(); } loadTile(t, r, o) { const n = this.enableTerrain ? e.extend({ enableTerrain: this.terrain }, r) : r; n.projection = this.projections[t] || this.defaultProjection, this.getWorkerSource(t, r.type, r.source).loadTile(n, o); } loadDEMTile(t, r, o) { const n = this.enableTerrain ? e.extend({ buildQuadTree: this.terrain }, r) : r; this.getDEMWorkerSource(t, r.source).loadTile(n, o); } reloadTile(t, r, o) { const n = this.enableTerrain ? e.extend({ enableTerrain: this.terrain }, r) : r; n.projection = this.projections[t] || this.defaultProjection, this.getWorkerSource(t, r.type, r.source).reloadTile(n, o); } abortTile(e, t, r) { this.getWorkerSource(e, t.type, t.source).abortTile(t, r); } removeTile(e, t, r) { this.getWorkerSource(e, t.type, t.source).removeTile(t, r); } removeSource(e, t, r) { if (!this.workerSources[e] || !this.workerSources[e][t.type] || !this.workerSources[e][t.type][t.source]) return; const o = this.workerSources[e][t.type][t.source]; delete this.workerSources[e][t.type][t.source], void 0 !== o.removeSource ? o.removeSource(t, r) : r(); } loadWorkerSource(e, t, r) { try { this.self.importScripts(t.url), r(); } catch (e) { r(e.toString()); } } syncRTLPluginState(t, r, o) { try { e.plugin.setState(r); const t = e.plugin.getPluginURL(); if (e.plugin.isLoaded() && !e.plugin.isParsed() && null != t) { this.self.importScripts(t); const r = e.plugin.isParsed(); o(r ? void 0 : new Error(`RTL Text Plugin failed to import scripts from ${t}`), r); } } catch (e) { o(e.toString()); } } getAvailableImages(e) { let t = this.availableImages[e]; return t || (t = []), t } getLayerIndex(e) { let t = this.layerIndexes[e]; return t || (t = this.layerIndexes[e] = new o), t } getWorkerSource(e, t, r) { if (this.workerSources[e] || (this.workerSources[e] = {}), this.workerSources[e][t] || (this.workerSources[e][t] = {}), !this.workerSources[e][t][r]) { const o = { send: (t, r, o, n, i, s) => { this.actor.send(t, r, o, e, i, s); }, scheduler: this.actor.scheduler }; this.workerSources[e][t][r] = new this.workerSourceTypes[t](o, this.getLayerIndex(e), this.getAvailableImages(e), this.isSpriteLoaded[e]); } return this.workerSources[e][t][r] } getDEMWorkerSource(e, t) { return this.demWorkerSources[e] || (this.demWorkerSources[e] = {}), this.demWorkerSources[e][t] || (this.demWorkerSources[e][t] = new n), this.demWorkerSources[e][t] } enforceCacheSizeLimit(t, r) { e.enforceCacheSizeLimit(r); } getWorkerPerformanceMetrics(e, t, r) { r(void 0, void 0); } } return "undefined" != typeof WorkerGlobalScope && "undefined" != typeof self && self instanceof WorkerGlobalScope && (self.worker = new ke(self)), ke })); define(["./shared"], (function(e) { "use strict"; function t(e, i) { if (Array.isArray(e)) { if (!Array.isArray(i) || e.length !== i.length) return !1; for (let o = 0; o < e.length; o++) if (!t(e[o], i[o])) return !1; return !0 } if ("object" == typeof e && null !== e && null !== i) { if ("object" != typeof i) return !1; if (Object.keys(e).length !== Object.keys(i).length) return !1; for (const o in e) if (!t(e[o], i[o])) return !1; return !0 } return e === i } var i = o; function o(e) { return ! function(e) { return "undefined" == typeof window || "undefined" == typeof document ? "not a browser" : Array.prototype && Array.prototype.every && Array.prototype.filter && Array.prototype.forEach && Array.prototype.indexOf && Array.prototype.lastIndexOf && Array.prototype.map && Array.prototype.some && Array.prototype.reduce && Array.prototype.reduceRight && Array.isArray ? Function.prototype && Function.prototype.bind ? Object.keys && Object.create && Object.getPrototypeOf && Object.getOwnPropertyNames && Object.isSealed && Object.isFrozen && Object.isExtensible && Object.getOwnPropertyDescriptor && Object.defineProperty && Object.defineProperties && Object.seal && Object.freeze && Object.preventExtensions ? "JSON" in window && "parse" in JSON && "stringify" in JSON ? function() { if (!("Worker" in window && "Blob" in window && "URL" in window)) return !1; var e, t, i = new Blob([""], { type: "text/javascript" }), o = URL.createObjectURL(i); try { t = new Worker(o), e = !0; } catch (t) { e = !1; } return t && t.terminate(), URL.revokeObjectURL(o), e }() ? "Uint8ClampedArray" in window ? ArrayBuffer.isView ? function() { var e = document.createElement("canvas"); e.width = e.height = 1; var t = e.getContext("2d"); if (!t) return !1; var i = t.getImageData(0, 0, 1, 1); return i && i.width === e.width }() ? (void 0 === r[t = e && e.failIfMajorPerformanceCaveat] && (r[t] = function(e) { var t, i = function(e) { var t = document.createElement("canvas"), i = Object.create(o.webGLContextAttributes); return i.failIfMajorPerformanceCaveat = e, t.getContext("webgl", i) || t.getContext("experimental-webgl", i) }(e); if (!i) return !1; try { t = i.createShader(i.VERTEX_SHADER); } catch (e) { return !1 } return !(!t || i.isContextLost()) && (i.shaderSource(t, "void main() {}"), i.compileShader(t), !0 === i.getShaderParameter(t, i.COMPILE_STATUS)) }(t)), r[t] ? document.documentMode ? "insufficient ECMAScript 6 support" : void 0 : "insufficient WebGL support") : "insufficient Canvas/getImageData support" : "insufficient ArrayBuffer support" : "insufficient Uint8ClampedArray support" : "insufficient worker support" : "insufficient JSON support" : "insufficient Object support" : "insufficient Function support" : "insufficent Array support"; var t; }(e) } var r = {}; function n(t, i, o) { const r = e.window.document.createElement(t); return void 0 !== i && (r.className = i), o && o.appendChild(r), r } function s(t, i, o) { const r = e.window.document.createElementNS("http://www.w3.org/2000/svg", t); for (const e of Object.keys(i)) r.setAttributeNS(null, e, i[e]); return o && o.appendChild(r), r } o.webGLContextAttributes = { antialias: !1, alpha: !0, stencil: !0, depth: !0 }; const a = e.window.document && e.window.document.documentElement.style, l = a && void 0 !== a.userSelect ? "userSelect" : "WebkitUserSelect"; let c; function h() { a && l && (c = a[l], a[l] = "none"); } function u() { a && l && (a[l] = c); } function _(t) { t.preventDefault(), t.stopPropagation(), e.window.removeEventListener("click", _, !0); } function d() { e.window.addEventListener("click", _, !0), e.window.setTimeout((() => { e.window.removeEventListener("click", _, !0); }), 0); } function p(e, t) { const i = e.getBoundingClientRect(); return g(e, i, t) } function m(e, t) { const i = e.getBoundingClientRect(), o = []; for (let r = 0; r < t.length; r++) o.push(g(e, i, t[r])); return o } function f(t) { return void 0 !== e.window.InstallTrigger && 2 === t.button && t.ctrlKey && e.window.navigator.platform.toUpperCase().indexOf("MAC") >= 0 ? 0 : t.button } function g(t, i, o) { const r = t.offsetWidth === i.width ? 1 : t.offsetWidth / i.width; return new e.pointGeometry((o.clientX - i.left) * r, (o.clientY - i.top) * r) } function v(e, t) { var i = t[0], o = t[1], r = t[2], n = t[3], s = i * n - r * o; return s ? (e[0] = n * (s = 1 / s), e[1] = -o * s, e[2] = -r * s, e[3] = i * s, e) : null } function x(e) { const { userImage: t } = e; return !!(t && t.render && t.render()) && (e.data.replace(new Uint8Array(t.data.buffer)), !0) } class y extends e.Evented { constructor() { super(), this.images = {}, this.updatedImages = {}, this.callbackDispatchedThisFrame = {}, this.loaded = !1, this.requestors = [], this.patterns = {}, this.atlasImage = new e.RGBAImage({ width: 1, height: 1 }), this.dirty = !0; } isLoaded() { return this.loaded } setLoaded(e) { if (this.loaded !== e && (this.loaded = e, e)) { for (const { ids: e, callback: t } of this.requestors) this._notify(e, t); this.requestors = []; } } hasImage(e) { return !!this.getImage(e) } getImage(e) { return this.images[e] } addImage(e, t) { this._validate(e, t) && (this.images[e] = t); } _validate(t, i) { let o = !0; return this._validateStretch(i.stretchX, i.data && i.data.width) || (this.fire(new e.ErrorEvent(new Error(`Image "${t}" has invalid "stretchX" value`))), o = !1), this._validateStretch(i.stretchY, i.data && i.data.height) || (this.fire(new e.ErrorEvent(new Error(`Image "${t}" has invalid "stretchY" value`))), o = !1), this._validateContent(i.content, i) || (this.fire(new e.ErrorEvent(new Error(`Image "${t}" has invalid "content" value`))), o = !1), o } _validateStretch(e, t) { if (!e) return !0; let i = 0; for (const o of e) { if (o[0] < i || o[1] < o[0] || t < o[1]) return !1; i = o[1]; } return !0 } _validateContent(e, t) { return !(e && (4 !== e.length || e[0] < 0 || t.data.width < e[0] || e[1] < 0 || t.data.height < e[1] || e[2] < 0 || t.data.width < e[2] || e[3] < 0 || t.data.height < e[3] || e[2] < e[0] || e[3] < e[1])) } updateImage(e, t) { t.version = this.images[e].version + 1, this.images[e] = t, this.updatedImages[e] = !0; } removeImage(e) { const t = this.images[e]; delete this.images[e], delete this.patterns[e], t.userImage && t.userImage.onRemove && t.userImage.onRemove(); } listImages() { return Object.keys(this.images) } getImages(e, t) { let i = !0; if (!this.isLoaded()) for (const t of e) this.images[t] || (i = !1); this.isLoaded() || i ? this._notify(e, t) : this.requestors.push({ ids: e, callback: t }); } _notify(t, i) { const o = {}; for (const i of t) { this.images[i] || this.fire(new e.Event("styleimagemissing", { id: i })); const t = this.images[i]; t ? o[i] = { data: t.data.clone(), pixelRatio: t.pixelRatio, sdf: t.sdf, version: t.version, stretchX: t.stretchX, stretchY: t.stretchY, content: t.content, hasRenderCallback: Boolean(t.userImage && t.userImage.render) } : e.warnOnce(`Image "${i}" could not be loaded. Please make sure you have added the image with map.addImage() or a "sprite" property in your style. You can provide missing images by listening for the "styleimagemissing" map event.`); } i(null, o); } getPixelSize() { const { width: e, height: t } = this.atlasImage; return { width: e, height: t } } getPattern(t) { const i = this.patterns[t], o = this.getImage(t); if (!o) return null; if (i && i.position.version === o.version) return i.position; if (i) i.position.version = o.version; else { const i = { w: o.data.width + 2, h: o.data.height + 2, x: 0, y: 0 }, r = new e.ImagePosition(i, o); this.patterns[t] = { bin: i, position: r }; } return this._updatePatternAtlas(), this.patterns[t].position } bind(t) { const i = t.gl; this.atlasTexture ? this.dirty && (this.atlasTexture.update(this.atlasImage), this.dirty = !1) : this.atlasTexture = new e.Texture(t, this.atlasImage, i.RGBA), this.atlasTexture && this.atlasTexture.bind(i.LINEAR, i.CLAMP_TO_EDGE); } _updatePatternAtlas() { const t = []; for (const e in this.patterns) t.push(this.patterns[e].bin); const { w: i, h: o } = e.potpack(t), r = this.atlasImage; r.resize({ width: i || 1, height: o || 1 }); for (const t in this.patterns) { const { bin: i } = this.patterns[t], o = i.x + 1, n = i.y + 1, s = this.images[t].data, a = s.width, l = s.height; e.RGBAImage.copy(s, r, { x: 0, y: 0 }, { x: o, y: n }, { width: a, height: l }), e.RGBAImage.copy(s, r, { x: 0, y: l - 1 }, { x: o, y: n - 1 }, { width: a, height: 1 }), e.RGBAImage.copy(s, r, { x: 0, y: 0 }, { x: o, y: n + l }, { width: a, height: 1 }), e.RGBAImage.copy(s, r, { x: a - 1, y: 0 }, { x: o - 1, y: n }, { width: 1, height: l }), e.RGBAImage.copy(s, r, { x: 0, y: 0 }, { x: o + a, y: n }, { width: 1, height: l }); } this.dirty = !0; } beginFrame() { this.callbackDispatchedThisFrame = {}; } dispatchRenderCallbacks(e) { for (const t of e) { if (this.callbackDispatchedThisFrame[t]) continue; this.callbackDispatchedThisFrame[t] = !0; const e = this.images[t]; x(e) && this.updateImage(t, e); } } } const b = new e.Properties({ anchor: new e.DataConstantProperty(e.spec.light.anchor), position: new class { constructor() { this.specification = e.spec.light.position; } possiblyEvaluate(t, i) { return function([t, i, o]) { const r = e.degToRad(i + 90), n = e.degToRad(o); return { x: t * Math.cos(r) * Math.sin(n), y: t * Math.sin(r) * Math.sin(n), z: t * Math.cos(n), azimuthal: i, polar: o } }(t.expression.evaluate(i)) } interpolate(t, i, o) { return { x: e.number(t.x, i.x, o), y: e.number(t.y, i.y, o), z: e.number(t.z, i.z, o), azimuthal: e.number(t.azimuthal, i.azimuthal, o), polar: e.number(t.polar, i.polar, o) } } }, color: new e.DataConstantProperty(e.spec.light.color), intensity: new e.DataConstantProperty(e.spec.light.intensity) }), w = "-transition"; class T extends e.Evented { constructor(t) { super(), this._transitionable = new e.Transitionable(b), this.setLight(t), this._transitioning = this._transitionable.untransitioned(); } getLight() { return this._transitionable.serialize() } setLight(t, i = {}) { if (!this._validate(e.validateLight, t, i)) for (const i in t) { const o = t[i]; e.endsWith(i, w) ? this._transitionable.setTransition(i.slice(0, -w.length), o) : this._transitionable.setValue(i, o); } } updateTransitions(e) { this._transitioning = this._transitionable.transitioned(e, this._transitioning); } hasTransition() { return this._transitioning.hasTransition() } recalculate(e) { this.properties = this._transitioning.possiblyEvaluate(e); } _validate(t, i, o) { return (!o || !1 !== o.validate) && e.emitValidationErrors(this, t.call(e.validateStyle, e.extend({ value: i, style: { glyphs: !0, sprite: !0 }, styleSpec: e.spec }))) } } const E = new e.Properties({ source: new e.DataConstantProperty(e.spec.terrain.source), exaggeration: new e.DataConstantProperty(e.spec.terrain.exaggeration) }), C = "-transition"; class M extends e.Evented { constructor(t, i) { super(), this._transitionable = new e.Transitionable(E), this.set(t), this._transitioning = this._transitionable.untransitioned(), this.drapeRenderMode = i; } get() { return this._transitionable.serialize() } set(t) { for (const i in t) { const o = t[i]; e.endsWith(i, C) ? this._transitionable.setTransition(i.slice(0, -C.length), o) : this._transitionable.setValue(i, o); } } updateTransitions(e) { this._transitioning = this._transitionable.transitioned(e, this._transitioning); } hasTransition() { return this._transitioning.hasTransition() } recalculate(e) { this.properties = this._transitioning.possiblyEvaluate(e); } } function I(t, i, o, r) { const n = e.smoothstep(45, 65, o), [s, a] = S(t, r), l = e.length(i); let c = 1 - Math.min(1, Math.exp((l - s) / (a - s) * -6)); return c *= c * c, c = Math.min(1, 1.00747 * c), c * n * t.alpha } function S(e, t) { const i = .5 / Math.tan(.5 * t); return [e.range[0] + i, e.range[1] + i] } const D = new e.Properties({ range: new e.DataConstantProperty(e.spec.fog.range), color: new e.DataConstantProperty(e.spec.fog.color), "high-color": new e.DataConstantProperty(e.spec.fog["high-color"]), "space-color": new e.DataConstantProperty(e.spec.fog["space-color"]), "horizon-blend": new e.DataConstantProperty(e.spec.fog["horizon-blend"]), "star-intensity": new e.DataConstantProperty(e.spec.fog["star-intensity"]) }), L = "-transition"; class A extends e.Evented { constructor(t, i) { super(), this._transitionable = new e.Transitionable(D), this.set(t), this._transitioning = this._transitionable.untransitioned(), this._transform = i; } get state() { const t = this._transform, i = "globe" === t.projection.name, o = e.globeToMercatorTransition(t.zoom), r = this.properties.get("range"), n = [.5, 3]; return { range: i ? [e.number(n[0], r[0], o), e.number(n[1], r[1], o)] : r, horizonBlend: this.properties.get("horizon-blend"), alpha: this.properties.get("color").a } } get() { return this._transitionable.serialize() } set(t, i = {}) { if (!this._validate(e.validateFog, t, i)) { for (const i of Object.keys(e.spec.fog)) t && void 0 === t[i] && (t[i] = e.spec.fog[i].default); for (const i in t) { const o = t[i]; e.endsWith(i, L) ? this._transitionable.setTransition(i.slice(0, -L.length), o) : this._transitionable.setValue(i, o); } } } getOpacity(t) { if (!this._transform.projection.supportsFog) return 0; const i = this.properties && this.properties.get("color") || 1; return ("globe" === this._transform.projection.name ? 1 : e.smoothstep(45, 65, t)) * i.a } getOpacityAtLatLng(t, i) { return this._transform.projection.supportsFog ? function(t, i, o) { const r = e.MercatorCoordinate.fromLngLat(i), n = o.elevation ? o.elevation.getAtPointOrZero(r) : 0, s = [r.x, r.y, n]; return e.transformMat4(s, s, o.mercatorFogMatrix), I(t, s, o.pitch, o._fov) }(this.state, t, i) : 0 } getFovAdjustedRange(e) { return this._transform.projection.supportsFog ? S(this.state, e) : [0, 1] } updateTransitions(e) { this._transitioning = this._transitionable.transitioned(e, this._transitioning); } hasTransition() { return this._transitioning.hasTransition() } recalculate(e) { this.properties = this._transitioning.possiblyEvaluate(e); } _validate(t, i, o) { return (!o || !1 !== o.validate) && e.emitValidationErrors(this, t.call(e.validateStyle, e.extend({ value: i, style: { glyphs: !0, sprite: !0 }, styleSpec: e.spec }))) } } class z { constructor(t, i) { this.workerPool = t, this.actors = [], this.currentActor = 0, this.id = e.uniqueId(); const o = this.workerPool.acquire(this.id); for (let e = 0; e < o.length; e++) { const t = new z.Actor(o[e], i, this.id); t.name = `Worker ${e}`, this.actors.push(t); } this.ready = !1, this.broadcast("checkIfReady", null, (() => { this.ready = !0; })); } broadcast(t, i, o) { e.asyncAll(this.actors, ((e, o) => { e.send(t, i, o); }), o = o || function() {}); } getActor() { return this.currentActor = (this.currentActor + 1) % this.actors.length, this.actors[this.currentActor] } remove() { this.actors.forEach((e => { e.remove(); })), this.actors = [], this.workerPool.release(this.id); } } function P(t, i, o) { return i * (e.EXTENT / (t.tileSize * Math.pow(2, o - t.tileID.overscaledZ))) } z.Actor = e.Actor; class R { constructor(e, t, i, o) { this.screenBounds = e, this.cameraPoint = t, this._screenRaycastCache = {}, this._cameraRaycastCache = {}, this.isAboveHorizon = i, this.screenGeometry = this.bufferedScreenGeometry(0), this.screenGeometryMercator = this._bufferedScreenMercator(0, o); } static createFromScreenPoints(t, i) { let o, r; if (t instanceof e.pointGeometry || "number" == typeof t[0]) { const n = e.pointGeometry.convert(t); o = [n], r = i.isPointAboveHorizon(n); } else { const n = e.pointGeometry.convert(t[0]), s = e.pointGeometry.convert(t[1]); o = [n, s], r = e.polygonizeBounds(n, s).every((e => i.isPointAboveHorizon(e))); } return new R(o, i.getCameraPoint(), r, i) } isPointQuery() { return 1 === this.screenBounds.length } bufferedScreenGeometry(t) { return e.polygonizeBounds(this.screenBounds[0], 1 === this.screenBounds.length ? this.screenBounds[0] : this.screenBounds[1], t) } bufferedCameraGeometry(t) { const i = this.screenBounds[0], o = 1 === this.screenBounds.length ? this.screenBounds[0].add(new e.pointGeometry(1, 1)) : this.screenBounds[1], r = e.polygonizeBounds(i, o, 0, !1); return this.cameraPoint.y > o.y && (this.cameraPoint.x > i.x && this.cameraPoint.x < o.x ? r.splice(3, 0, this.cameraPoint) : this.cameraPoint.x >= o.x ? r[2] = this.cameraPoint : this.cameraPoint.x <= i.x && (r[3] = this.cameraPoint)), e.bufferConvexPolygon(r, t) } bufferedCameraGeometryGlobe(t) { const i = this.screenBounds[0], o = 1 === this.screenBounds.length ? this.screenBounds[0].add(new e.pointGeometry(1, 1)) : this.screenBounds[1], r = e.polygonizeBounds(i, o, t), n = this.cameraPoint.clone(); switch (3 * ((n.y > i.y) + (n.y > o.y)) + ((n.x > i.x) + (n.x > o.x))) { case 0: r[0] = n, r[4] = n.clone(); break; case 1: r.splice(1, 0, n); break; case 2: r[1] = n; break; case 3: r.splice(4, 0, n); break; case 5: r.splice(2, 0, n); break; case 6: r[3] = n; break; case 7: r.splice(3, 0, n); break; case 8: r[2] = n; } return r } containsTile(t, i, o, r = 0) { const n = t.queryPadding / i._pixelsPerMercatorPixel + 1, s = o ? this._bufferedCameraMercator(n, i) : this._bufferedScreenMercator(n, i); let a = t.tileID.wrap + (s.unwrapped ? r : 0); const l = s.polygon.map((i => e.getTilePoint(t.tileTransform, i, a))); if (!e.polygonIntersectsBox(l, 0, 0, e.EXTENT, e.EXTENT)) return; a = t.tileID.wrap + (this.screenGeometryMercator.unwrapped ? r : 0); const c = this.screenGeometryMercator.polygon.map((i => e.getTileVec3(t.tileTransform, i, a))), h = c.map((t => new e.pointGeometry(t[0], t[1]))), u = i.getFreeCameraOptions().position || new e.MercatorCoordinate(0, 0, 0), _ = e.getTileVec3(t.tileTransform, u, a), d = c.map((t => { const i = e.sub(t, t, _); return e.normalize(i, i), new e.Ray(_, i) })), p = P(t, 1, i.zoom) * i._pixelsPerMercatorPixel; return { queryGeometry: this, tilespaceGeometry: h, tilespaceRays: d, bufferedTilespaceGeometry: l, bufferedTilespaceBounds: (m = e.getBounds(l), m.min.x = e.clamp(m.min.x, 0, e.EXTENT), m.min.y = e.clamp(m.min.y, 0, e.EXTENT), m.max.x = e.clamp(m.max.x, 0, e.EXTENT), m.max.y = e.clamp(m.max.y, 0, e.EXTENT), m), tile: t, tileID: t.tileID, pixelToTileUnitsFactor: p }; var m; } _bufferedScreenMercator(e, t) { const i = k(e); if (this._screenRaycastCache[i]) return this._screenRaycastCache[i]; { let o; return o = "globe" === t.projection.name ? this._projectAndResample(this.bufferedScreenGeometry(e), t) : { polygon: this.bufferedScreenGeometry(e).map((e => t.pointCoordinate3D(e))), unwrapped: !0 }, this._screenRaycastCache[i] = o, o } } _bufferedCameraMercator(e, t) { const i = k(e); if (this._cameraRaycastCache[i]) return this._cameraRaycastCache[i]; { let o; return o = "globe" === t.projection.name ? this._projectAndResample(this.bufferedCameraGeometryGlobe(e), t) : { polygon: this.bufferedCameraGeometry(e).map((e => t.pointCoordinate3D(e))), unwrapped: !0 }, this._cameraRaycastCache[i] = o, o } } _projectAndResample(t, i) { const o = function(t, i) { const o = e.multiply([], i.pixelMatrix, i.globeMatrix), r = [0, -e.GLOBE_RADIUS, 0, 1], n = [0, e.GLOBE_RADIUS, 0, 1], s = [0, 0, 0, 1]; e.transformMat4$1(r, r, o), e.transformMat4$1(n, n, o), e.transformMat4$1(s, s, o); const a = new e.pointGeometry(r[0] / r[3], r[1] / r[3]), l = new e.pointGeometry(n[0] / n[3], n[1] / n[3]), c = e.polygonContainsPoint(t, a) && r[3] < s[3], h = e.polygonContainsPoint(t, l) && n[3] < s[3]; if (!c && !h) return null; const u = function(e, t, i) { for (let o = 1; o < e.length; o++) { const r = B(t.pointCoordinate3D(e[o - 1]).x), n = B(t.pointCoordinate3D(e[o]).x); if (i < 0) { if (r < n) return { idx: o, t: -r / (n - 1 - r) } } else if (n < r) return { idx: o, t: (1 - r) / (n + 1 - r) } } return null }(t, i, c ? -1 : 1); if (!u) return null; const { idx: _, t: d } = u; let p = _ > 1 ? O(t.slice(0, _), i) : [], m = _ < t.length ? O(t.slice(_), i) : []; p = p.map((t => new e.pointGeometry(B(t.x), t.y))), m = m.map((t => new e.pointGeometry(B(t.x), t.y))); const f = [...p]; 0 === f.length && f.push(m[m.length - 1]); const g = e.number(f[f.length - 1].y, (0 === m.length ? p[0] : m[0]).y, d); let v; return v = c ? [new e.pointGeometry(0, g), new e.pointGeometry(0, 0), new e.pointGeometry(1, 0), new e.pointGeometry(1, g)] : [new e.pointGeometry(1, g), new e.pointGeometry(1, 1), new e.pointGeometry(0, 1), new e.pointGeometry(0, g)], f.push(...v), 0 === m.length ? f.push(p[0]) : f.push(...m), { polygon: f.map((t => new e.MercatorCoordinate(t.x, t.y))), unwrapped: !1 } }(t, i); if (o) return o; const r = function(t, i) { let o = !1, r = -1 / 0, n = 0; for (let e = 0; e < t.length - 1; e++) t[e].x > r && (r = t[e].x, n = e); for (let e = 0; e < t.length - 1; e++) { const i = (n + e) % (t.length - 1), r = t[i], s = t[i + 1]; Math.abs(r.x - s.x) > .5 && (r.x < s.x ? (r.x += 1, 0 === i && (t[t.length - 1].x += 1)) : (s.x += 1, i + 1 === t.length - 1 && (t[0].x += 1)), o = !0); } const s = e.mercatorXfromLng(i.center.lng); return o && s < Math.abs(s - 1) && t.forEach((e => { e.x -= 1; })), { polygon: t, unwrapped: o } }(O(t, i).map((t => new e.pointGeometry(B(t.x), t.y))), i); return { polygon: r.polygon.map((t => new e.MercatorCoordinate(t.x, t.y))), unwrapped: r.unwrapped } } } function O(t, i) { return e.resample(t, (e => { const t = i.pointCoordinate3D(e); e.x = t.x, e.y = t.y; }), 1 / 256) } function B(e) { return e < 0 ? 1 + e % 1 : e % 1 } function k(e) { return 100 * e | 0 } function F(t, i, o, r, n) { const s = function(o, r) { if (o) return n(o); if (r) { t.url && r.tiles && t.tiles && delete t.tiles; const o = e.pick(e.extend(r, t), ["tiles", "minzoom", "maxzoom", "attribution", "mapbox_logo", "bounds", "scheme", "tileSize", "encoding"]); r.vector_layers && (o.vectorLayers = r.vector_layers, o.vectorLayerIds = o.vectorLayers.map((e => e.id))), o.tiles = i.canonicalizeTileset(o, t.url), n(null, o); } }; return t.url ? e.getJSON(i.transformRequest(i.normalizeSourceURL(t.url, null, o, r), e.ResourceType.Source), s) : e.exported.frame((() => s(null, t))) } class U { constructor(t, i, o) { this.bounds = e.LngLatBounds.convert(this.validateBounds(t)), this.minzoom = i || 0, this.maxzoom = o || 24; } validateBounds(e) { return Array.isArray(e) && 4 === e.length ? [Math.max(-180, e[0]), Math.max(-90, e[1]), Math.min(180, e[2]), Math.min(90, e[3])] : [-180, -90, 180, 90] } contains(t) { const i = Math.pow(2, t.z), o = Math.floor(e.mercatorXfromLng(this.bounds.getWest()) * i), r = Math.floor(e.mercatorYfromLat(this.bounds.getNorth()) * i), n = Math.ceil(e.mercatorXfromLng(this.bounds.getEast()) * i), s = Math.ceil(e.mercatorYfromLat(this.bounds.getSouth()) * i); return t.x >= o && t.x < n && t.y >= r && t.y < s } } class N { constructor(e, t, i) { this.context = e; const o = e.gl; this.buffer = o.createBuffer(), this.dynamicDraw = Boolean(i), this.context.unbindVAO(), e.bindElementBuffer.set(this.buffer), o.bufferData(o.ELEMENT_ARRAY_BUFFER, t.arrayBuffer, this.dynamicDraw ? o.DYNAMIC_DRAW : o.STATIC_DRAW), this.dynamicDraw || t.destroy(); } bind() { this.context.bindElementBuffer.set(this.buffer); } updateData(e) { const t = this.context.gl; this.context.unbindVAO(), this.bind(), t.bufferSubData(t.ELEMENT_ARRAY_BUFFER, 0, e.arrayBuffer); } destroy() { this.buffer && (this.context.gl.deleteBuffer(this.buffer), delete this.buffer); } } const G = { Int8: "BYTE", Uint8: "UNSIGNED_BYTE", Int16: "SHORT", Uint16: "UNSIGNED_SHORT", Int32: "INT", Uint32: "UNSIGNED_INT", Float32: "FLOAT" }; class j { constructor(e, t, i, o) { this.length = t.length, this.attributes = i, this.itemSize = t.bytesPerElement, this.dynamicDraw = o, this.context = e; const r = e.gl; this.buffer = r.createBuffer(), e.bindVertexBuffer.set(this.buffer), r.bufferData(r.ARRAY_BUFFER, t.arrayBuffer, this.dynamicDraw ? r.DYNAMIC_DRAW : r.STATIC_DRAW), this.dynamicDraw || t.destroy(); } bind() { this.context.bindVertexBuffer.set(this.buffer); } updateData(e) { const t = this.context.gl; this.bind(), t.bufferSubData(t.ARRAY_BUFFER, 0, e.arrayBuffer); } enableAttributes(e, t) { for (let i = 0; i < this.attributes.length; i++) { const o = t.attributes[this.attributes[i].name]; void 0 !== o && e.enableVertexAttribArray(o); } } setVertexAttribPointers(e, t, i) { for (let o = 0; o < this.attributes.length; o++) { const r = this.attributes[o], n = t.attributes[r.name]; void 0 !== n && e.vertexAttribPointer(n, r.components, e[G[r.type]], !1, this.itemSize, r.offset + this.itemSize * (i || 0)); } } destroy() { this.buffer && (this.context.gl.deleteBuffer(this.buffer), delete this.buffer); } } class Z { constructor(e) { this.gl = e.gl, this.default = this.getDefault(), this.current = this.default, this.dirty = !1; } get() { return this.current } set(e) {} getDefault() { return this.default } setDefault() { this.set(this.default); } } class V extends Z { getDefault() { return e.Color.transparent } set(e) { const t = this.current; (e.r !== t.r || e.g !== t.g || e.b !== t.b || e.a !== t.a || this.dirty) && (this.gl.clearColor(e.r, e.g, e.b, e.a), this.current = e, this.dirty = !1); } } class W extends Z { getDefault() { return 1 } set(e) { (e !== this.current || this.dirty) && (this.gl.clearDepth(e), this.current = e, this.dirty = !1); } } class X extends Z { getDefault() { return 0 } set(e) { (e !== this.current || this.dirty) && (this.gl.clearStencil(e), this.current = e, this.dirty = !1); } } class q extends Z { getDefault() { return [!0, !0, !0, !0] } set(e) { const t = this.current; (e[0] !== t[0] || e[1] !== t[1] || e[2] !== t[2] || e[3] !== t[3] || this.dirty) && (this.gl.colorMask(e[0], e[1], e[2], e[3]), this.current = e, this.dirty = !1); } } class $ extends Z { getDefault() { return !0 } set(e) { (e !== this.current || this.dirty) && (this.gl.depthMask(e), this.current = e, this.dirty = !1); } } class H extends Z { getDefault() { return 255 } set(e) { (e !== this.current || this.dirty) && (this.gl.stencilMask(e), this.current = e, this.dirty = !1); } } class Y extends Z { getDefault() { return { func: this.gl.ALWAYS, ref: 0, mask: 255 } } set(e) { const t = this.current; (e.func !== t.func || e.ref !== t.ref || e.mask !== t.mask || this.dirty) && (this.gl.stencilFunc(e.func, e.ref, e.mask), this.current = e, this.dirty = !1); } } class K extends Z { getDefault() { const e = this.gl; return [e.KEEP, e.KEEP, e.KEEP] } set(e) { const t = this.current; (e[0] !== t[0] || e[1] !== t[1] || e[2] !== t[2] || this.dirty) && (this.gl.stencilOp(e[0], e[1], e[2]), this.current = e, this.dirty = !1); } } class J extends Z { getDefault() { return !1 } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; e ? t.enable(t.STENCIL_TEST) : t.disable(t.STENCIL_TEST), this.current = e, this.dirty = !1; } } class Q extends Z { getDefault() { return [0, 1] } set(e) { const t = this.current; (e[0] !== t[0] || e[1] !== t[1] || this.dirty) && (this.gl.depthRange(e[0], e[1]), this.current = e, this.dirty = !1); } } class ee extends Z { getDefault() { return !1 } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; e ? t.enable(t.DEPTH_TEST) : t.disable(t.DEPTH_TEST), this.current = e, this.dirty = !1; } } class te extends Z { getDefault() { return this.gl.LESS } set(e) { (e !== this.current || this.dirty) && (this.gl.depthFunc(e), this.current = e, this.dirty = !1); } } class ie extends Z { getDefault() { return !1 } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; e ? t.enable(t.BLEND) : t.disable(t.BLEND), this.current = e, this.dirty = !1; } } class oe extends Z { getDefault() { const e = this.gl; return [e.ONE, e.ZERO] } set(e) { const t = this.current; (e[0] !== t[0] || e[1] !== t[1] || this.dirty) && (this.gl.blendFunc(e[0], e[1]), this.current = e, this.dirty = !1); } } class re extends Z { getDefault() { return e.Color.transparent } set(e) { const t = this.current; (e.r !== t.r || e.g !== t.g || e.b !== t.b || e.a !== t.a || this.dirty) && (this.gl.blendColor(e.r, e.g, e.b, e.a), this.current = e, this.dirty = !1); } } class ne extends Z { getDefault() { return this.gl.FUNC_ADD } set(e) { (e !== this.current || this.dirty) && (this.gl.blendEquation(e), this.current = e, this.dirty = !1); } } class se extends Z { getDefault() { return !1 } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; e ? t.enable(t.CULL_FACE) : t.disable(t.CULL_FACE), this.current = e, this.dirty = !1; } } class ae extends Z { getDefault() { return this.gl.BACK } set(e) { (e !== this.current || this.dirty) && (this.gl.cullFace(e), this.current = e, this.dirty = !1); } } class le extends Z { getDefault() { return this.gl.CCW } set(e) { (e !== this.current || this.dirty) && (this.gl.frontFace(e), this.current = e, this.dirty = !1); } } class ce extends Z { getDefault() { return null } set(e) { (e !== this.current || this.dirty) && (this.gl.useProgram(e), this.current = e, this.dirty = !1); } } class he extends Z { getDefault() { return this.gl.TEXTURE0 } set(e) { (e !== this.current || this.dirty) && (this.gl.activeTexture(e), this.current = e, this.dirty = !1); } } class ue extends Z { getDefault() { const e = this.gl; return [0, 0, e.drawingBufferWidth, e.drawingBufferHeight] } set(e) { const t = this.current; (e[0] !== t[0] || e[1] !== t[1] || e[2] !== t[2] || e[3] !== t[3] || this.dirty) && (this.gl.viewport(e[0], e[1], e[2], e[3]), this.current = e, this.dirty = !1); } } class _e extends Z { getDefault() { return null } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; t.bindFramebuffer(t.FRAMEBUFFER, e), this.current = e, this.dirty = !1; } } class de extends Z { getDefault() { return null } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; t.bindRenderbuffer(t.RENDERBUFFER, e), this.current = e, this.dirty = !1; } } class pe extends Z { getDefault() { return null } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; t.bindTexture(t.TEXTURE_2D, e), this.current = e, this.dirty = !1; } } class me extends Z { getDefault() { return null } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; t.bindBuffer(t.ARRAY_BUFFER, e), this.current = e, this.dirty = !1; } } class fe extends Z { getDefault() { return null } set(e) { const t = this.gl; t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, e), this.current = e, this.dirty = !1; } } class ge extends Z { constructor(e) { super(e), this.vao = e.extVertexArrayObject; } getDefault() { return null } set(e) { this.vao && (e !== this.current || this.dirty) && (this.vao.bindVertexArrayOES(e), this.current = e, this.dirty = !1); } } class ve extends Z { getDefault() { return 4 } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; t.pixelStorei(t.UNPACK_ALIGNMENT, e), this.current = e, this.dirty = !1; } } class xe extends Z { getDefault() { return !1 } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL, e), this.current = e, this.dirty = !1; } } class ye extends Z { getDefault() { return !1 } set(e) { if (e === this.current && !this.dirty) return; const t = this.gl; t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL, e), this.current = e, this.dirty = !1; } } class be extends Z { constructor(e, t) { super(e), this.context = e, this.parent = t; } getDefault() { return null } } class we extends be { setDirty() { this.dirty = !0; } set(e) { if (e === this.current && !this.dirty) return; this.context.bindFramebuffer.set(this.parent); const t = this.gl; t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, e, 0), this.current = e, this.dirty = !1; } } class Te extends be { attachment() { return this.gl.DEPTH_ATTACHMENT } set(e) { if (e === this.current && !this.dirty) return; this.context.bindFramebuffer.set(this.parent); const t = this.gl; t.framebufferRenderbuffer(t.FRAMEBUFFER, this.attachment(), t.RENDERBUFFER, e), this.current = e, this.dirty = !1; } } class Ee extends Te { attachment() { return this.gl.DEPTH_STENCIL_ATTACHMENT } } class Ce { constructor(e, t, i, o) { this.context = e, this.width = t, this.height = i; const r = this.framebuffer = e.gl.createFramebuffer(); this.colorAttachment = new we(e, r), o && (this.depthAttachment = new Te(e, r)); } destroy() { const e = this.context.gl, t = this.colorAttachment.get(); if (t && e.deleteTexture(t), this.depthAttachment) { const t = this.depthAttachment.get(); t && e.deleteRenderbuffer(t); } e.deleteFramebuffer(this.framebuffer); } } class Me { constructor(e, t = !1) { if (this.gl = e, this.isWebGL2 = t, this.extVertexArrayObject = this.gl.getExtension("OES_vertex_array_object"), t) { const t = e; this.extVertexArrayObject = { createVertexArrayOES: t.createVertexArray.bind(e), deleteVertexArrayOES: t.deleteVertexArray.bind(e), bindVertexArrayOES: t.bindVertexArray.bind(e) }; } this.clearColor = new V(this), this.clearDepth = new W(this), this.clearStencil = new X(this), this.colorMask = new q(this), this.depthMask = new $(this), this.stencilMask = new H(this), this.stencilFunc = new Y(this), this.stencilOp = new K(this), this.stencilTest = new J(this), this.depthRange = new Q(this), this.depthTest = new ee(this), this.depthFunc = new te(this), this.blend = new ie(this), this.blendFunc = new oe(this), this.blendColor = new re(this), this.blendEquation = new ne(this), this.cullFace = new se(this), this.cullFaceSide = new ae(this), this.frontFace = new le(this), this.program = new ce(this), this.activeTexture = new he(this), this.viewport = new ue(this), this.bindFramebuffer = new _e(this), this.bindRenderbuffer = new de(this), this.bindTexture = new pe(this), this.bindVertexBuffer = new me(this), this.bindElementBuffer = new fe(this), this.bindVertexArrayOES = this.extVertexArrayObject && new ge(this), this.pixelStoreUnpack = new ve(this), this.pixelStoreUnpackPremultiplyAlpha = new xe(this), this.pixelStoreUnpackFlipY = new ye(this), this.extTextureFilterAnisotropic = e.getExtension("EXT_texture_filter_anisotropic") || e.getExtension("MOZ_EXT_texture_filter_anisotropic") || e.getExtension("WEBKIT_EXT_texture_filter_anisotropic"), this.extTextureFilterAnisotropic && (this.extTextureFilterAnisotropicMax = e.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)), this.extTextureFilterAnisotropicForceOff = !1, this.extStandardDerivativesForceOff = !1, this.extDebugRendererInfo = e.getExtension("WEBGL_debug_renderer_info"), this.extDebugRendererInfo && (this.renderer = e.getParameter(this.extDebugRendererInfo.UNMASKED_RENDERER_WEBGL), this.vendor = e.getParameter(this.extDebugRendererInfo.UNMASKED_VENDOR_WEBGL)), t || (this.extTextureHalfFloat = e.getExtension("OES_texture_half_float")), (t || this.extTextureHalfFloat && e.getExtension("OES_texture_half_float_linear")) && (this.extRenderToTextureHalfFloat = e.getExtension("EXT_color_buffer_half_float")), this.extStandardDerivatives = t || e.getExtension("OES_standard_derivatives"), this.extTimerQuery = e.getExtension("EXT_disjoint_timer_query"), this.maxTextureSize = e.getParameter(e.MAX_TEXTURE_SIZE); } setDefault() { this.unbindVAO(), this.clearColor.setDefault(), this.clearDepth.setDefault(), this.clearStencil.setDefault(), this.colorMask.setDefault(), this.depthMask.setDefault(), this.stencilMask.setDefault(), this.stencilFunc.setDefault(), this.stencilOp.setDefault(), this.stencilTest.setDefault(), this.depthRange.setDefault(), this.depthTest.setDefault(), this.depthFunc.setDefault(), this.blend.setDefault(), this.blendFunc.setDefault(), this.blendColor.setDefault(), this.blendEquation.setDefault(), this.cullFace.setDefault(), this.cullFaceSide.setDefault(), this.frontFace.setDefault(), this.program.setDefault(), this.activeTexture.setDefault(), this.bindFramebuffer.setDefault(), this.pixelStoreUnpack.setDefault(), this.pixelStoreUnpackPremultiplyAlpha.setDefault(), this.pixelStoreUnpackFlipY.setDefault(); } setDirty() { this.clearColor.dirty = !0, this.clearDepth.dirty = !0, this.clearStencil.dirty = !0, this.colorMask.dirty = !0, this.depthMask.dirty = !0, this.stencilMask.dirty = !0, this.stencilFunc.dirty = !0, this.stencilOp.dirty = !0, this.stencilTest.dirty = !0, this.depthRange.dirty = !0, this.depthTest.dirty = !0, this.depthFunc.dirty = !0, this.blend.dirty = !0, this.blendFunc.dirty = !0, this.blendColor.dirty = !0, this.blendEquation.dirty = !0, this.cullFace.dirty = !0, this.cullFaceSide.dirty = !0, this.frontFace.dirty = !0, this.program.dirty = !0, this.activeTexture.dirty = !0, this.viewport.dirty = !0, this.bindFramebuffer.dirty = !0, this.bindRenderbuffer.dirty = !0, this.bindTexture.dirty = !0, this.bindVertexBuffer.dirty = !0, this.bindElementBuffer.dirty = !0, this.extVertexArrayObject && (this.bindVertexArrayOES.dirty = !0), this.pixelStoreUnpack.dirty = !0, this.pixelStoreUnpackPremultiplyAlpha.dirty = !0, this.pixelStoreUnpackFlipY.dirty = !0; } createIndexBuffer(e, t) { return new N(this, e, t) } createVertexBuffer(e, t, i) { return new j(this, e, t, i) } createRenderbuffer(e, t, i) { const o = this.gl, r = o.createRenderbuffer(); return this.bindRenderbuffer.set(r), o.renderbufferStorage(o.RENDERBUFFER, e, t, i), this.bindRenderbuffer.set(null), r } createFramebuffer(e, t, i) { return new Ce(this, e, t, i) } clear({ color: e, depth: t, stencil: i }) { const o = this.gl; let r = 0; e && (r |= o.COLOR_BUFFER_BIT, this.clearColor.set(e), this.colorMask.set([!0, !0, !0, !0])), void 0 !== t && (r |= o.DEPTH_BUFFER_BIT, this.depthRange.set([0, 1]), this.clearDepth.set(t), this.depthMask.set(!0)), void 0 !== i && (r |= o.STENCIL_BUFFER_BIT, this.clearStencil.set(i), this.stencilMask.set(255)), o.clear(r); } setCullFace(e) { !1 === e.enable ? this.cullFace.set(!1) : (this.cullFace.set(!0), this.cullFaceSide.set(e.mode), this.frontFace.set(e.frontFace)); } setDepthMode(e) { e.func !== this.gl.ALWAYS || e.mask ? (this.depthTest.set(!0), this.depthFunc.set(e.func), this.depthMask.set(e.mask), this.depthRange.set(e.range)) : this.depthTest.set(!1); } setStencilMode(e) { e.test.func !== this.gl.ALWAYS || e.mask ? (this.stencilTest.set(!0), this.stencilMask.set(e.mask), this.stencilOp.set([e.fail, e.depthFail, e.pass]), this.stencilFunc.set({ func: e.test.func, ref: e.ref, mask: e.test.mask })) : this.stencilTest.set(!1); } setColorMode(i) { t(i.blendFunction, e.ColorMode.Replace) ? this.blend.set(!1) : (this.blend.set(!0), this.blendFunc.set(i.blendFunction), this.blendColor.set(i.blendColor)), this.colorMask.set(i.mask); } unbindVAO() { this.extVertexArrayObject && this.bindVertexArrayOES.set(null); } } class Ie extends e.Evented { constructor(t, i, o, r) { if (super(), this.id = t, this.dispatcher = o, this.type = "vector", this.minzoom = 0, this.maxzoom = 22, this.scheme = "xyz", this.tileSize = 512, this.reparseOverscaled = !0, this.isTileClipped = !0, this._loaded = !1, e.extend(this, e.pick(i, ["url", "scheme", "tileSize", "promoteId"])), this._options = e.extend({ type: "vector" }, i), this._collectResourceTiming = i.collectResourceTiming, 512 !== this.tileSize) throw new Error("vector tile sources must have a tileSize of 512"); this.setEventedParent(r), this._tileWorkers = {}, this._deduped = new e.DedupedRequest; } load(t) { this._loaded = !1, this.fire(new e.Event("dataloading", { dataType: "source" })); const i = Array.isArray(this.map._language) ? this.map._language.join() : this.map._language, o = this.map._worldview; this._tileJSONRequest = F(this._options, this.map._requestManager, i, o, ((r, n) => { this._tileJSONRequest = null, this._loaded = !0, r ? (i && console.warn(`Ensure that your requested language string is a valid BCP-47 code or list of codes. Found: ${i}`), o && 2 !== o.length && console.warn(`Requested worldview strings must be a valid ISO alpha-2 code. Found: ${o}`), this.fire(new e.ErrorEvent(r))) : n && (e.extend(this, n), n.bounds && (this.tileBounds = new U(n.bounds, this.minzoom, this.maxzoom)), e.postTurnstileEvent(n.tiles, this.map._requestManager._customAccessToken), this.fire(new e.Event("data", { dataType: "source", sourceDataType: "metadata" })), this.fire(new e.Event("data", { dataType: "source", sourceDataType: "content" }))), t && t(r); })); } loaded() { return this._loaded } hasTile(e) { return !this.tileBounds || this.tileBounds.contains(e.canonical) } onAdd(e) { this.map = e, this.load(); } reload() { this.cancelTileJSONRequest(), this.load((() => this.map.style._clearSource(this.id))); } setTiles(e) { return this._options.tiles = e, this.reload(), this } setUrl(e) { return this.url = e, this._options.url = e, this.reload(), this } onRemove() { this.cancelTileJSONRequest(); } serialize() { return e.extend({}, this._options) } loadTile(t, i) { const o = this.map._requestManager.normalizeTileURL(t.tileID.canonical.url(this.tiles, this.scheme)), r = { request: this.map._requestManager.transformRequest(o, e.ResourceType.Tile), data: void 0, uid: t.uid, tileID: t.tileID, tileZoom: t.tileZoom, zoom: t.tileID.overscaledZ, tileSize: this.tileSize * t.tileID.overscaleFactor(), type: this.type, source: this.id, pixelRatio: e.exported.devicePixelRatio, showCollisionBoxes: this.map.showCollisionBoxes, promoteId: this.promoteId, isSymbolTile: t.isSymbolTile }; if (r.request.collectResourceTiming = this._collectResourceTiming, t.actor && "expired" !== t.state) "loading" === t.state ? t.reloadCallback = i : t.request = t.actor.send("reloadTile", r, n.bind(this)); else if (t.actor = this._tileWorkers[o] = this._tileWorkers[o] || this.dispatcher.getActor(), this.dispatcher.ready) t.request = t.actor.send("loadTile", r, n.bind(this), void 0, !0); else { const i = e.loadVectorTile.call({ deduped: this._deduped }, r, ((e, i) => { e || !i ? n.call(this, e) : (r.data = { cacheControl: i.cacheControl, expires: i.expires, rawData: i.rawData.slice(0) }, t.actor && t.actor.send("loadTile", r, n.bind(this), void 0, !0)); }), !0); t.request = { cancel: i }; } function n(o, r) { return delete t.request, t.aborted ? i(null) : o && 404 !== o.status ? i(o) : (r && r.resourceTiming && (t.resourceTiming = r.resourceTiming), this.map._refreshExpiredTiles && r && t.setExpiryData(r), t.loadVectorData(r, this.map.painter), e.cacheEntryPossiblyAdded(this.dispatcher), i(null), void(t.reloadCallback && (this.loadTile(t, t.reloadCallback), t.reloadCallback = null))) } } abortTile(e) { e.request && (e.request.cancel(), delete e.request), e.actor && e.actor.send("abortTile", { uid: e.uid, type: this.type, source: this.id }); } unloadTile(e) { e.unloadVectorData(), e.actor && e.actor.send("removeTile", { uid: e.uid, type: this.type, source: this.id }); } hasTransition() { return !1 } afterUpdate() { this._tileWorkers = {}; } cancelTileJSONRequest() { this._tileJSONRequest && (this._tileJSONRequest.cancel(), this._tileJSONRequest = null); } } class Se extends e.Evented { constructor(t, i, o, r) { super(), this.id = t, this.dispatcher = o, this.setEventedParent(r), this.type = "raster", this.minzoom = 0, this.maxzoom = 22, this.roundZoom = !0, this.scheme = "xyz", this.tileSize = 512, this._loaded = !1, this._options = e.extend({ type: "raster" }, i), e.extend(this, e.pick(i, ["url", "scheme", "tileSize"])); } load(t) { this._loaded = !1, this.fire(new e.Event("dataloading", { dataType: "source" })), this._tileJSONRequest = F(this._options, this.map._requestManager, null, null, ((i, o) => { this._tileJSONRequest = null, this._loaded = !0, i ? this.fire(new e.ErrorEvent(i)) : o && (e.extend(this, o), o.bounds && (this.tileBounds = new U(o.bounds, this.minzoom, this.maxzoom)), e.postTurnstileEvent(o.tiles), this.fire(new e.Event("data", { dataType: "source", sourceDataType: "metadata" })), this.fire(new e.Event("data", { dataType: "source", sourceDataType: "content" }))), t && t(i); })); } loaded() { return this._loaded } onAdd(e) { this.map = e, this.load(); } reload() { this.cancelTileJSONRequest(), this.load((() => this.map.style._clearSource(this.id))); } setTiles(e) { return this._options.tiles = e, this.reload(), this } setUrl(e) { return this.url = e, this._options.url = e, this.reload(), this } onRemove() { this.cancelTileJSONRequest(); } serialize() { return e.extend({}, this._options) } hasTile(e) { return !this.tileBounds || this.tileBounds.contains(e.canonical) } loadTile(t, i) { const o = e.exported.devicePixelRatio >= 2, r = this.map._requestManager.normalizeTileURL(t.tileID.canonical.url(this.tiles, this.scheme), o, this.tileSize); t.request = e.getImage(this.map._requestManager.transformRequest(r, e.ResourceType.Tile), ((o, r, n, s) => (delete t.request, t.aborted ? (t.state = "unloaded", i(null)) : o ? (t.state = "errored", i(o)) : r ? (this.map._refreshExpiredTiles && t.setExpiryData({ cacheControl: n, expires: s }), t.setTexture(r, this.map.painter), t.state = "loaded", e.cacheEntryPossiblyAdded(this.dispatcher), void i(null)) : i(null)))); } static loadTileData(e, t, i) { e.setTexture(t, i); } static unloadTileData(e, t) { e.texture && t.saveTileTexture(e.texture); } abortTile(e, t) { e.request && (e.request.cancel(), delete e.request), t(); } unloadTile(e, t) { e.texture && this.map.painter.saveTileTexture(e.texture), t(); } hasTransition() { return !1 } cancelTileJSONRequest() { this._tileJSONRequest && (this._tileJSONRequest.cancel(), this._tileJSONRequest = null); } } let De; function Le(t, i, o, r, n, s, a, l) { const c = [t, o, n, i, r, s, 1, 1, 1], h = [a, l, 1], u = e.adjoint([], c), [_, d, p] = e.transformMat3(h, h, e.transpose(u, u)); return e.multiply$1(c, [_, 0, 0, 0, d, 0, 0, 0, p], c) } class Ae extends e.Evented { constructor(e, t, i, o) { super(), this.id = e, this.dispatcher = i, this.coordinates = t.coordinates, this.type = "image", this.minzoom = 0, this.maxzoom = 22, this.tileSize = 512, this.tiles = {}, this._loaded = !1, this.setEventedParent(o), this.options = t, this._dirty = !1; } load(t, i) { this._loaded = i || !1, this.fire(new e.Event("dataloading", { dataType: "source" })), this.url = this.options.url, this._imageRequest = e.getImage(this.map._requestManager.transformRequest(this.url, e.ResourceType.Image), ((i, o) => { if (this._imageRequest = null, this._loaded = !0, i) this.fire(new e.ErrorEvent(i)); else if (o) { const { HTMLImageElement: i } = e.window; this.image = o instanceof i ? e.exported.getImageData(o) : o, this._dirty = !0, this.width = this.image.width, this.height = this.image.height, t && (this.coordinates = t), this._finishLoading(); } })); } loaded() { return this._loaded } updateImage(e) { return this.image && e.url ? (this._imageRequest && e.url !== this.options.url && (this._imageRequest.cancel(), this._imageRequest = null), this.options.url = e.url, this.load(e.coordinates, this._loaded), this) : this } _finishLoading() { this.map && (this.setCoordinates(this.coordinates), this.fire(new e.Event("data", { dataType: "source", sourceDataType: "metadata" }))); } onAdd(e) { this.map = e, this.load(); } onRemove() { this._imageRequest && (this._imageRequest.cancel(), this._imageRequest = null), this.texture && this.texture.destroy(); } setCoordinates(t) { this.coordinates = t, this._boundsArray = void 0; const i = t.map(e.MercatorCoordinate.fromLngLat); return this.tileID = function(t) { let i = 1 / 0, o = 1 / 0, r = -1 / 0, n = -1 / 0; for (const e of t) i = Math.min(i, e.x), o = Math.min(o, e.y), r = Math.max(r, e.x), n = Math.max(n, e.y); const s = Math.max(r - i, n - o), a = Math.max(0, Math.floor(-Math.log(s) / Math.LN2)), l = Math.pow(2, a); return new e.CanonicalTileID(a, Math.floor((i + r) / 2 * l), Math.floor((o + n) / 2 * l)) }(i), this.minzoom = this.maxzoom = this.tileID.z, this.fire(new e.Event("data", { dataType: "source", sourceDataType: "content" })), this } _clear() { this._boundsArray = void 0; } _prepareData(t) { for (const e in this.tiles) { const t = this.tiles[e]; "loaded" !== t.state && (t.state = "loaded", t.texture = this.texture); } if (this._boundsArray) return; const i = e.tileTransform(this.tileID, this.map.transform.projection), [o, r, n, s] = this.coordinates.map((t => { const o = i.projection.project(t[0], t[1]); return e.getTilePoint(i, o)._round() })); this.perspectiveTransform = function(t, i, o, r, n, s, a, l, c, h) { const u = Le(0, 0, t, 0, 0, i, t, i), _ = Le(o, r, n, s, a, l, c, h); return e.multiply$1(_, e.adjoint(u, u), _), [_[6] / _[8] * t / e.EXTENT, _[7] / _[8] * i / e.EXTENT] }(this.width, this.height, o.x, o.y, r.x, r.y, s.x, s.y, n.x, n.y); const a = this._boundsArray = new e.StructArrayLayout4i8; a.emplaceBack(o.x, o.y, 0, 0), a.emplaceBack(r.x, r.y, e.EXTENT, 0), a.emplaceBack(s.x, s.y, 0, e.EXTENT), a.emplaceBack(n.x, n.y, e.EXTENT, e.EXTENT), this.boundsBuffer && this.boundsBuffer.destroy(), this.boundsBuffer = t.createVertexBuffer(a, e.boundsAttributes.members), this.boundsSegments = e.SegmentVector.simpleSegment(0, 0, 4, 2); } prepare() { if (0 === Object.keys(this.tiles).length || !this.image) return; const t = this.map.painter.context, i = t.gl; this._dirty && (this.texture ? this.texture.update(this.image) : (this.texture = new e.Texture(t, this.image, i.RGBA), this.texture.bind(i.LINEAR, i.CLAMP_TO_EDGE)), this._dirty = !1), this._prepareData(t); } loadTile(e, t) { this.tileID && this.tileID.equals(e.tileID.canonical) ? (this.tiles[String(e.tileID.wrap)] = e, e.buckets = {}, t(null)) : (e.state = "errored", t(null)); } serialize() { return { type: "image", url: this.options.url, coordinates: this.coordinates } } hasTransition() { return !1 } } const ze = { vector: Ie, raster: Se, "raster-dem": class extends Se { constructor(t, i, o, r) { super(t, i, o, r), this.type = "raster-dem", this.maxzoom = 22, this._options = e.extend({ type: "raster-dem" }, i), this.encoding = i.encoding || "mapbox"; } loadTile(t, i) { const o = this.map._requestManager.normalizeTileURL(t.tileID.canonical.url(this.tiles, this.scheme), !1, this.tileSize); function r(e, o) { e && (t.state = "errored", i(e)), o && (t.dem = o, t.dem.onDeserialize(), t.needsHillshadePrepare = !0, t.needsDEMTextureUpload = !0, t.state = "loaded", i(null)); } t.request = e.getImage(this.map._requestManager.transformRequest(o, e.ResourceType.Tile), function(o, n, s, a) { if (delete t.request, t.aborted) t.state = "unloaded", i(null); else if (o) t.state = "errored", i(o); else if (n) { this.map._refreshExpiredTiles && t.setExpiryData({ cacheControl: s, expires: a }); const i = e.window.ImageBitmap && n instanceof e.window.ImageBitmap && (null == De && (De = e.window.OffscreenCanvas && new e.window.OffscreenCanvas(1, 1).getContext("2d") && "function" == typeof e.window.createImageBitmap), De), o = 1 - (n.width - e.prevPowerOfTwo(n.width)) / 2; o < 1 || t.neighboringTiles || (t.neighboringTiles = this._getNeighboringTiles(t.tileID)); const l = i ? n : e.exported.getImageData(n, o), c = { uid: t.uid, coord: t.tileID, source: this.id, rawImageData: l, encoding: this.encoding, padding: o }; t.actor && "expired" !== t.state || (t.actor = this.dispatcher.getActor(), t.actor.send("loadDEMTile", c, r.bind(this), void 0, !0)); } }.bind(this)); } _getNeighboringTiles(t) { const i = t.canonical, o = Math.pow(2, i.z), r = (i.x - 1 + o) % o, n = 0 === i.x ? t.wrap - 1 : t.wrap, s = (i.x + 1 + o) % o, a = i.x + 1 === o ? t.wrap + 1 : t.wrap, l = {}; return l[new e.OverscaledTileID(t.overscaledZ, n, i.z, r, i.y).key] = { backfilled: !1 }, l[new e.OverscaledTileID(t.overscaledZ, a, i.z, s, i.y).key] = { backfilled: !1 }, i.y > 0 && (l[new e.OverscaledTileID(t.overscaledZ, n, i.z, r, i.y - 1).key] = { backfilled: !1 }, l[new e.OverscaledTileID(t.overscaledZ, t.wrap, i.z, i.x, i.y - 1).key] = { backfilled: !1 }, l[new e.OverscaledTileID(t.overscaledZ, a, i.z, s, i.y - 1).key] = { backfilled: !1 }), i.y + 1 < o && (l[new e.OverscaledTileID(t.overscaledZ, n, i.z, r, i.y + 1).key] = { backfilled: !1 }, l[new e.OverscaledTileID(t.overscaledZ, t.wrap, i.z, i.x, i.y + 1).key] = { backfilled: !1 }, l[new e.OverscaledTileID(t.overscaledZ, a, i.z, s, i.y + 1).key] = { backfilled: !1 }), l } unloadTile(e) { e.demTexture && this.map.painter.saveTileTexture(e.demTexture), e.fbo && (e.fbo.destroy(), delete e.fbo), e.dem && delete e.dem, delete e.neighboringTiles, e.state = "unloaded"; } }, geojson: class extends e.Evented { constructor(t, i, o, r) { super(), this.id = t, this.type = "geojson", this.minzoom = 0, this.maxzoom = 18, this.tileSize = 512, this.isTileClipped = !0, this.reparseOverscaled = !0, this._loaded = !1, this.actor = o.getActor(), this.setEventedParent(r), this._data = i.data, this._options = e.extend({}, i), this._collectResourceTiming = i.collectResourceTiming, void 0 !== i.maxzoom && (this.maxzoom = i.maxzoom), i.type && (this.type = i.type), i.attribution && (this.attribution = i.attribution), this.promoteId = i.promoteId; const n = e.EXTENT / this.tileSize; this.workerOptions = e.extend({ source: this.id, cluster: i.cluster || !1, geojsonVtOptions: { buffer: (void 0 !== i.buffer ? i.buffer : 128) * n, tolerance: (void 0 !== i.tolerance ? i.tolerance : .375) * n, extent: e.EXTENT, maxZoom: this.maxzoom, lineMetrics: i.lineMetrics || !1, generateId: i.generateId || !1 }, superclusterOptions: { maxZoom: void 0 !== i.clusterMaxZoom ? i.clusterMaxZoom : this.maxzoom - 1, minPoints: Math.max(2, i.clusterMinPoints || 2), extent: e.EXTENT, radius: (void 0 !== i.clusterRadius ? i.clusterRadius : 50) * n, log: !1, generateId: i.generateId || !1 }, clusterProperties: i.clusterProperties, filter: i.filter }, i.workerOptions); } onAdd(e) { this.map = e, this.setData(this._data); } setData(e) { return this._data = e, this._updateWorkerData(), this } getClusterExpansionZoom(e, t) { return this.actor.send("geojson.getClusterExpansionZoom", { clusterId: e, source: this.id }, t), this } getClusterChildren(e, t) { return this.actor.send("geojson.getClusterChildren", { clusterId: e, source: this.id }, t), this } getClusterLeaves(e, t, i, o) { return this.actor.send("geojson.getClusterLeaves", { source: this.id, clusterId: e, limit: t, offset: i }, o), this } _updateWorkerData() { if (this._pendingLoad) return void(this._coalesce = !0); this.fire(new e.Event("dataloading", { dataType: "source" })), this._loaded = !1; const t = e.extend({}, this.workerOptions), i = this._data; "string" == typeof i ? (t.request = this.map._requestManager.transformRequest(e.exported.resolveURL(i), e.ResourceType.Source), t.request.collectResourceTiming = this._collectResourceTiming) : t.data = JSON.stringify(i), this._pendingLoad = this.actor.send(`${this.type}.loadData`, t, ((t, i) => { if (this._loaded = !0, this._pendingLoad = null, t) this.fire(new e.ErrorEvent(t)); else { const t = { dataType: "source", sourceDataType: this._metadataFired ? "content" : "metadata" }; this._collectResourceTiming && i && i.resourceTiming && i.resourceTiming[this.id] && (t.resourceTiming = i.resourceTiming[this.id]), this.fire(new e.Event("data", t)), this._metadataFired = !0; } this._coalesce && (this._updateWorkerData(), this._coalesce = !1); })); } loaded() { return this._loaded } loadTile(t, i) { const o = t.actor ? "reloadTile" : "loadTile"; t.actor = this.actor, t.request = this.actor.send(o, { type: this.type, uid: t.uid, tileID: t.tileID, tileZoom: t.tileZoom, zoom: t.tileID.overscaledZ, maxZoom: this.maxzoom, tileSize: this.tileSize, source: this.id, pixelRatio: e.exported.devicePixelRatio, showCollisionBoxes: this.map.showCollisionBoxes, promoteId: this.promoteId }, ((e, r) => (delete t.request, t.unloadVectorData(), t.aborted ? i(null) : e ? i(e) : (t.loadVectorData(r, this.map.painter, "reloadTile" === o), i(null)))), void 0, "loadTile" === o); } abortTile(e) { e.request && (e.request.cancel(), delete e.request), e.aborted = !0; } unloadTile(e) { e.unloadVectorData(), this.actor.send("removeTile", { uid: e.uid, type: this.type, source: this.id }); } onRemove() { this._pendingLoad && this._pendingLoad.cancel(); } serialize() { return e.extend({}, this._options, { type: this.type, data: this._data }) } hasTransition() { return !1 } }, video: class extends Ae { constructor(e, t, i, o) { super(e, t, i, o), this.roundZoom = !0, this.type = "video", this.options = t; } load() { this._loaded = !1; const t = this.options; this.urls = []; for (const i of t.urls) this.urls.push(this.map._requestManager.transformRequest(i, e.ResourceType.Source).url); e.getVideo(this.urls, ((t, i) => { this._loaded = !0, t ? this.fire(new e.ErrorEvent(t)) : i && (this.video = i, this.video.loop = !0, this.video.setAttribute("playsinline", ""), this.video.addEventListener("playing", (() => { this.map.triggerRepaint(); })), this.map && this.video.play(), this._finishLoading()); })); } pause() { this.video && this.video.pause(); } play() { this.video && this.video.play(); } seek(t) { if (this.video) { const i = this.video.seekable; t < i.start(0) || t > i.end(0) ? this.fire(new e.ErrorEvent(new e.ValidationError(`sources.${this.id}`, null, `Playback for this video can be set only between the ${i.start(0)} and ${i.end(0)}-second mark.`))) : this.video.currentTime = t; } } getVideo() { return this.video } onAdd(e) { this.map || (this.map = e, this.load(), this.video && (this.video.play(), this.setCoordinates(this.coordinates))); } prepare() { if (0 === Object.keys(this.tiles).length || this.video.readyState < 2) return; const t = this.map.painter.context, i = t.gl; this.texture ? this.video.paused || (this.texture.bind(i.LINEAR, i.CLAMP_TO_EDGE), i.texSubImage2D(i.TEXTURE_2D, 0, 0, 0, i.RGBA, i.UNSIGNED_BYTE, this.video)) : (this.texture = new e.Texture(t, this.video, i.RGBA), this.texture.bind(i.LINEAR, i.CLAMP_TO_EDGE), this.width = this.video.videoWidth, this.height = this.video.videoHeight), this._prepareData(t); } serialize() { return { type: "video", urls: this.urls, coordinates: this.coordinates } } hasTransition() { return this.video && !this.video.paused } }, image: Ae, canvas: class extends Ae { constructor(t, i, o, r) { super(t, i, o, r), i.coordinates ? Array.isArray(i.coordinates) && 4 === i.coordinates.length && !i.coordinates.some((e => !Array.isArray(e) || 2 !== e.length || e.some((e => "number" != typeof e)))) || this.fire(new e.ErrorEvent(new e.ValidationError(`sources.${t}`, null, '"coordinates" property must be an array of 4 longitude/latitude array pairs'))) : this.fire(new e.ErrorEvent(new e.ValidationError(`sources.${t}`, null, 'missing required property "coordinates"'))), i.animate && "boolean" != typeof i.animate && this.fire(new e.ErrorEvent(new e.ValidationError(`sources.${t}`, null, 'optional "animate" property must be a boolean value'))), i.canvas ? "string" == typeof i.canvas || i.canvas instanceof e.window.HTMLCanvasElement || this.fire(new e.ErrorEvent(new e.ValidationError(`sources.${t}`, null, '"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))) : this.fire(new e.ErrorEvent(new e.ValidationError(`sources.${t}`, null, 'missing required property "canvas"'))), this.options = i, this.animate = void 0 === i.animate || i.animate; } load() { this._loaded = !0, this.canvas || (this.canvas = this.options.canvas instanceof e.window.HTMLCanvasElement ? this.options.canvas : e.window.document.getElementById(this.options.canvas)), this.width = this.canvas.width, this.height = this.canvas.height, this._hasInvalidDimensions() ? this.fire(new e.ErrorEvent(new Error("Canvas dimensions cannot be less than or equal to zero."))) : (this.play = function() { this._playing = !0, this.map.triggerRepaint(); }, this.pause = function() { this._playing && (this.prepare(), this._playing = !1); }, this._finishLoading()); } getCanvas() { return this.canvas } onAdd(e) { this.map = e, this.load(), this.canvas && this.animate && this.play(); } onRemove() { this.pause(); } prepare() { let t = !1; if (this.canvas.width !== this.width && (this.width = this.canvas.width, t = !0), this.canvas.height !== this.height && (this.height = this.canvas.height, t = !0), this._hasInvalidDimensions()) return; if (0 === Object.keys(this.tiles).length) return; const i = this.map.painter.context; this.texture ? (t || this._playing) && this.texture.update(this.canvas, { premultiply: !0 }) : this.texture = new e.Texture(i, this.canvas, i.gl.RGBA, { premultiply: !0 }), this._prepareData(i); } serialize() { return { type: "canvas", coordinates: this.coordinates } } hasTransition() { return this._playing } _hasInvalidDimensions() { for (const e of [this.canvas.width, this.canvas.height]) if (isNaN(e) || e <= 0) return !0; return !1 } }, custom: class extends e.Evented { constructor(t, i, o, r) { super(), this.id = t, this.type = "custom", this._dataType = "raster", this._dispatcher = o, this._implementation = i, this.setEventedParent(r), this.scheme = "xyz", this.minzoom = 0, this.maxzoom = 22, this.tileSize = 512, this._loaded = !1, this.roundZoom = !0, this._implementation || this.fire(new e.ErrorEvent(new Error(`Missing implementation for ${this.id} custom source`))), this._implementation.loadTile || this.fire(new e.ErrorEvent(new Error(`Missing loadTile implementation for ${this.id} custom source`))), this._implementation.bounds && (this.tileBounds = new U(this._implementation.bounds, this.minzoom, this.maxzoom)), i.update = this._update.bind(this), i.clearTiles = this._clearTiles.bind(this), i.coveringTiles = this._coveringTiles.bind(this), e.extend(this, e.pick(i, ["dataType", "scheme", "minzoom", "maxzoom", "tileSize", "attribution", "minTileCacheSize", "maxTileCacheSize"])); } serialize() { return e.pick(this, ["type", "scheme", "minzoom", "maxzoom", "tileSize", "attribution"]) } load() { this._loaded = !0, this.fire(new e.Event("data", { dataType: "source", sourceDataType: "metadata" })), this.fire(new e.Event("data", { dataType: "source", sourceDataType: "content" })); } loaded() { return this._loaded } onAdd(t) { this._map = t, this._loaded = !1, this.fire(new e.Event("dataloading", { dataType: "source" })), this._implementation.onAdd && this._implementation.onAdd(t), this.load(); } onRemove(e) { this._implementation.onRemove && this._implementation.onRemove(e); } hasTile(e) { if (this._implementation.hasTile) { const { x: t, y: i, z: o } = e.canonical; return this._implementation.hasTile({ x: t, y: i, z: o }) } return !this.tileBounds || this.tileBounds.contains(e.canonical) } loadTile(t, i) { const { x: o, y: r, z: n } = t.tileID.canonical, s = new e.window.AbortController; t.request = Promise.resolve(this._implementation.loadTile({ x: o, y: r, z: n }, { signal: s.signal })).then(function(o) { return delete t.request, t.aborted ? (t.state = "unloaded", i(null)) : void 0 === o ? (t.state = "errored", i(null)) : null === o ? (this.loadTileData(t, { width: this.tileSize, height: this.tileSize, data: null }), t.state = "loaded", i(null)) : function(t) { return t instanceof e.window.ImageData || t instanceof e.window.HTMLCanvasElement || t instanceof e.window.ImageBitmap || t instanceof e.window.HTMLImageElement }(o) ? (this.loadTileData(t, o), t.state = "loaded", void i(null)) : (t.state = "errored", i(new Error(`Can't infer data type for ${this.id}, only raster data supported at the moment`))) }.bind(this)).catch((e => { 20 !== e.code && (t.state = "errored", i(e)); })), t.request.cancel = () => s.abort(); } loadTileData(e, t) { Se.loadTileData(e, t, this._map.painter); } unloadTileData(e) { Se.unloadTileData(e, this._map.painter); } unloadTile(e, t) { if (this.unloadTileData(e), this._implementation.unloadTile) { const { x: t, y: i, z: o } = e.tileID.canonical; this._implementation.unloadTile({ x: t, y: i, z: o }); } t(); } abortTile(e, t) { e.request && e.request.cancel && (e.request.cancel(), delete e.request), t(); } hasTransition() { return !1 } _coveringTiles() { return this._map.transform.coveringTiles({ tileSize: this.tileSize, minzoom: this.minzoom, maxzoom: this.maxzoom, roundZoom: this.roundZoom }).map((e => ({ x: e.canonical.x, y: e.canonical.y, z: e.canonical.z }))) } _clearTiles() { this._map.style._clearSource(this.id); } _update() { this.fire(new e.Event("data", { dataType: "source", sourceDataType: "content" })); } } }, Pe = function(t, i, o, r) { const n = new ze[i.type](t, i, o, r); if (n.id !== t) throw new Error(`Expected Source id to be ${t} instead of ${n.id}`); return e.bindAll(["load", "abort", "unload", "serialize", "prepare"], n), n }; function Re(t, i) { const o = e.identity([]); return e.scale(o, o, [.5 * t.width, .5 * -t.height, 1]), e.translate(o, o, [1, -1, 0]), e.multiply(o, o, t.calculateProjMatrix(i.toUnwrapped())), Float32Array.from(o) } function Oe(e, t, i, o, r, n, s, a = !1) { const l = e.tilesIn(o, s, a); l.sort(ke); const c = []; for (const o of l) c.push({ wrappedTileID: o.tile.tileID.wrapped().key, queryResults: o.tile.queryRenderedFeatures(t, i, e._state, o, r, n, Re(e.transform, o.tile.tileID), a) }); const h = function(e) { const t = {}, i = {}; for (const o of e) { const e = o.queryResults, r = o.wrappedTileID, n = i[r] = i[r] || {}; for (const i in e) { const o = e[i], r = n[i] = n[i] || {}, s = t[i] = t[i] || []; for (const e of o) r[e.featureIndex] || (r[e.featureIndex] = !0, s.push(e)); } } return t }(c); for (const t in h) h[t].forEach((t => { const i = t.feature, o = i.layer; o && "background" !== o.type && "sky" !== o.type && (i.source = o.source, o["source-layer"] && (i.sourceLayer = o["source-layer"]), i.state = void 0 !== i.id ? e.getFeatureState(o["source-layer"], i.id) : {}); })); return h } function Be(e, t) { const i = e.getRenderableIds().map((t => e.getTileByID(t))), o = [], r = {}; for (let e = 0; e < i.length; e++) { const n = i[e], s = n.tileID.canonical.key; r[s] || (r[s] = !0, n.querySourceFeatures(o, t)); } return o } function ke(e, t) { const i = e.tileID, o = t.tileID; return i.overscaledZ - o.overscaledZ || i.canonical.y - o.canonical.y || i.wrap - o.wrap || i.canonical.x - o.canonical.x } function Fe() { return null != fn.workerClass ? new fn.workerClass : new e.window.Worker(fn.workerUrl) } const Ue = "mapboxgl_preloaded_worker_pool"; class Ne { constructor() { this.active = {}; } acquire(e) { if (!this.workers) for (this.workers = []; this.workers.length < Ne.workerCount;) this.workers.push(new Fe); return this.active[e] = !0, this.workers.slice() } release(e) { delete this.active[e], 0 === this.numActive() && (this.workers.forEach((e => { e.terminate(); })), this.workers = null); } isPreloaded() { return !!this.active[Ue] } numActive() { return Object.keys(this.active).length } } let Ge; function je() { return Ge || (Ge = new Ne), Ge } function Ze(t, i) { const o = {}; for (const e in t) "ref" !== e && (o[e] = t[e]); return e.refProperties.forEach((e => { e in i && (o[e] = i[e]); })), o } function Ve(e) { e = e.slice(); const t = Object.create(null); for (let i = 0; i < e.length; i++) t[e[i].id] = e[i]; for (let i = 0; i < e.length; i++) "ref" in e[i] && (e[i] = Ze(e[i], t[e[i].ref])); return e } Ne.workerCount = 2; const We = { setStyle: "setStyle", addLayer: "addLayer", removeLayer: "removeLayer", setPaintProperty: "setPaintProperty", setLayoutProperty: "setLayoutProperty", setFilter: "setFilter", addSource: "addSource", removeSource: "removeSource", setGeoJSONSourceData: "setGeoJSONSourceData", setLayerZoomRange: "setLayerZoomRange", setLayerProperty: "setLayerProperty", setCenter: "setCenter", setZoom: "setZoom", setBearing: "setBearing", setPitch: "setPitch", setSprite: "setSprite", setGlyphs: "setGlyphs", setTransition: "setTransition", setLight: "setLight", setTerrain: "setTerrain", setFog: "setFog", setProjection: "setProjection" }; function Xe(e, t, i) { i.push({ command: We.addSource, args: [e, t[e]] }); } function qe(e, t, i) { t.push({ command: We.removeSource, args: [e] }), i[e] = !0; } function $e(e, t, i, o) { qe(e, i, o), Xe(e, t, i); } function He(e, i, o) { let r; for (r in e[o]) if (e[o].hasOwnProperty(r) && "data" !== r && !t(e[o][r], i[o][r])) return !1; for (r in i[o]) if (i[o].hasOwnProperty(r) && "data" !== r && !t(e[o][r], i[o][r])) return !1; return !0 } function Ye(e, i, o, r, n, s) { let a; for (a in i = i || {}, e = e || {}) e.hasOwnProperty(a) && (t(e[a], i[a]) || o.push({ command: s, args: [r, a, i[a], n] })); for (a in i) i.hasOwnProperty(a) && !e.hasOwnProperty(a) && (t(e[a], i[a]) || o.push({ command: s, args: [r, a, i[a], n] })); } function Ke(e) { return e.id } function Je(e, t) { return e[t.id] = t, e } class Qe { constructor(e, t) { this.reset(e, t); } reset(e, t) { this.points = e || [], this._distances = [0]; for (let e = 1; e < this.points.length; e++) this._distances[e] = this._distances[e - 1] + this.points[e].dist(this.points[e - 1]); this.length = this._distances[this._distances.length - 1], this.padding = Math.min(t || 0, .5 * this.length), this.paddedLength = this.length - 2 * this.padding; } lerp(t) { if (1 === this.points.length) return this.points[0]; t = e.clamp(t, 0, 1); let i = 1, o = this._distances[i]; const r = t * this.paddedLength + this.padding; for (; o < r && i < this._distances.length;) o = this._distances[++i]; const n = i - 1, s = this._distances[n], a = o - s, l = a > 0 ? (r - s) / a : 0; return this.points[n].mult(1 - l).add(this.points[i].mult(l)) } } class et { constructor(e, t, i) { const o = this.boxCells = [], r = this.circleCells = []; this.xCellCount = Math.ceil(e / i), this.yCellCount = Math.ceil(t / i); for (let e = 0; e < this.xCellCount * this.yCellCount; e++) o.push([]), r.push([]); this.circleKeys = [], this.boxKeys = [], this.bboxes = [], this.circles = [], this.width = e, this.height = t, this.xScale = this.xCellCount / e, this.yScale = this.yCellCount / t, this.boxUid = 0, this.circleUid = 0; } keysLength() { return this.boxKeys.length + this.circleKeys.length } insert(e, t, i, o, r) { this._forEachCell(t, i, o, r, this._insertBoxCell, this.boxUid++), this.boxKeys.push(e), this.bboxes.push(t), this.bboxes.push(i), this.bboxes.push(o), this.bboxes.push(r); } insertCircle(e, t, i, o) { this._forEachCell(t - o, i - o, t + o, i + o, this._insertCircleCell, this.circleUid++), this.circleKeys.push(e), this.circles.push(t), this.circles.push(i), this.circles.push(o); } _insertBoxCell(e, t, i, o, r, n) { this.boxCells[r].push(n); } _insertCircleCell(e, t, i, o, r, n) { this.circleCells[r].push(n); } _query(e, t, i, o, r, n) { if (i < 0 || e > this.width || o < 0 || t > this.height) return !r && []; const s = []; if (e <= 0 && t <= 0 && this.width <= i && this.height <= o) { if (r) return !0; for (let e = 0; e < this.boxKeys.length; e++) s.push({ key: this.boxKeys[e], x1: this.bboxes[4 * e], y1: this.bboxes[4 * e + 1], x2: this.bboxes[4 * e + 2], y2: this.bboxes[4 * e + 3] }); for (let e = 0; e < this.circleKeys.length; e++) { const t = this.circles[3 * e], i = this.circles[3 * e + 1], o = this.circles[3 * e + 2]; s.push({ key: this.circleKeys[e], x1: t - o, y1: i - o, x2: t + o, y2: i + o }); } return n ? s.filter(n) : s } return this._forEachCell(e, t, i, o, this._queryCell, s, { hitTest: r, seenUids: { box: {}, circle: {} } }, n), r ? s.length > 0 : s } _queryCircle(e, t, i, o, r) { const n = e - i, s = e + i, a = t - i, l = t + i; if (s < 0 || n > this.width || l < 0 || a > this.height) return !o && []; const c = []; return this._forEachCell(n, a, s, l, this._queryCellCircle, c, { hitTest: o, circle: { x: e, y: t, radius: i }, seenUids: { box: {}, circle: {} } }, r), o ? c.length > 0 : c } query(e, t, i, o, r) { return this._query(e, t, i, o, !1, r) } hitTest(e, t, i, o, r) { return this._query(e, t, i, o, !0, r) } hitTestCircle(e, t, i, o) { return this._queryCircle(e, t, i, !0, o) } _queryCell(e, t, i, o, r, n, s, a) { const l = s.seenUids, c = this.boxCells[r]; if (null !== c) { const r = this.bboxes; for (const h of c) if (!l.box[h]) { l.box[h] = !0; const c = 4 * h; if (e <= r[c + 2] && t <= r[c + 3] && i >= r[c + 0] && o >= r[c + 1] && (!a || a(this.boxKeys[h]))) { if (s.hitTest) return n.push(!0), !0; n.push({ key: this.boxKeys[h], x1: r[c], y1: r[c + 1], x2: r[c + 2], y2: r[c + 3] }); } } } const h = this.circleCells[r]; if (null !== h) { const r = this.circles; for (const c of h) if (!l.circle[c]) { l.circle[c] = !0; const h = 3 * c; if (this._circleAndRectCollide(r[h], r[h + 1], r[h + 2], e, t, i, o) && (!a || a(this.circleKeys[c]))) { if (s.hitTest) return n.push(!0), !0; { const e = r[h], t = r[h + 1], i = r[h + 2]; n.push({ key: this.circleKeys[c], x1: e - i, y1: t - i, x2: e + i, y2: t + i }); } } } } } _queryCellCircle(e, t, i, o, r, n, s, a) { const l = s.circle, c = s.seenUids, h = this.boxCells[r]; if (null !== h) { const e = this.bboxes; for (const t of h) if (!c.box[t]) { c.box[t] = !0; const i = 4 * t; if (this._circleAndRectCollide(l.x, l.y, l.radius, e[i + 0], e[i + 1], e[i + 2], e[i + 3]) && (!a || a(this.boxKeys[t]))) return n.push(!0), !0 } } const u = this.circleCells[r]; if (null !== u) { const e = this.circles; for (const t of u) if (!c.circle[t]) { c.circle[t] = !0; const i = 3 * t; if (this._circlesCollide(e[i], e[i + 1], e[i + 2], l.x, l.y, l.radius) && (!a || a(this.circleKeys[t]))) return n.push(!0), !0 } } } _forEachCell(e, t, i, o, r, n, s, a) { const l = this._convertToXCellCoord(e), c = this._convertToYCellCoord(t), h = this._convertToXCellCoord(i), u = this._convertToYCellCoord(o); for (let _ = l; _ <= h; _++) for (let l = c; l <= u; l++) if (r.call(this, e, t, i, o, this.xCellCount * l + _, n, s, a)) return } _convertToXCellCoord(e) { return Math.max(0, Math.min(this.xCellCount - 1, Math.floor(e * this.xScale))) } _convertToYCellCoord(e) { return Math.max(0, Math.min(this.yCellCount - 1, Math.floor(e * this.yScale))) } _circlesCollide(e, t, i, o, r, n) { const s = o - e, a = r - t, l = i + n; return l * l > s * s + a * a } _circleAndRectCollide(e, t, i, o, r, n, s) { const a = (n - o) / 2, l = Math.abs(e - (o + a)); if (l > a + i) return !1; const c = (s - r) / 2, h = Math.abs(t - (r + c)); if (h > c + i) return !1; if (l <= a || h <= c) return !0; const u = l - a, _ = h - c; return u * u + _ * _ <= i * i } } const tt = Math.tan(85 * Math.PI / 180); function it(t, i, o, r, n, s, a) { const l = e.create(); if (o) if ("globe" === s.name) { const t = e.calculateGlobeLabelMatrix(n, i); e.multiply(l, l, t); } else { const t = v([], a); l[0] = t[0], l[1] = t[1], l[4] = t[2], l[5] = t[3], r || e.rotateZ(l, l, n.angle); } else e.multiply(l, n.labelPlaneMatrix, t); return l } function ot(e, t, i, o, r, n, s) { const a = it(e, t, i, o, r, n, s); return "globe" === n.name && i || (a[2] = a[6] = a[10] = a[14] = 0), a } function rt(t, i, o, r, n, s, a) { if (o) { if ("globe" === s.name) { const l = it(t, i, o, r, n, s, a); return e.invert(l, l), e.multiply(l, t, l), l } { const i = e.clone(t), o = e.identity([]); return o[0] = a[0], o[1] = a[1], o[4] = a[2], o[5] = a[3], e.multiply(i, i, o), r || e.rotateZ(i, i, -n.angle), i } } return n.glCoordMatrix } function nt(t, i, o, r) { const n = [t, i, o, 1]; o ? e.transformMat4$1(n, n, r) : ft(n, n, r); const s = n[3]; return n[0] /= s, n[1] /= s, n[2] /= s, n } function st(e, t) { return Math.min(.5 + e / t * .5, 1.5) } function at(e, t) { const i = e[0] / e[3], o = e[1] / e[3]; return i >= -t[0] && i <= t[0] && o >= -t[1] && o <= t[1] } function lt(t, i, o, r, n, s, a, l, c, h) { const u = o.transform, _ = r ? t.textSizeData : t.iconSizeData, d = e.evaluateSizeForZoom(_, o.transform.zoom), p = "globe" === u.projection.name, m = [256 / o.width * 2 + 1, 256 / o.height * 2 + 1], f = r ? t.text.dynamicLayoutVertexArray : t.icon.dynamicLayoutVertexArray; f.clear(); let g = null; p && (g = r ? t.text.globeExtVertexArray : t.icon.globeExtVertexArray); const v = t.lineVertexArray, x = r ? t.text.placedSymbolArray : t.icon.placedSymbolArray, y = o.transform.width / o.transform.height; let b, w = !1; for (let r = 0; r < x.length; r++) { const p = x.get(r), { numGlyphs: T, writingMode: E } = p; if (E !== e.WritingMode.vertical || w || b === e.WritingMode.horizontal || (w = !0), b = E, (p.hidden || E === e.WritingMode.vertical) && !w) { mt(T, f); continue } w = !1; const C = new e.pointGeometry(p.tileAnchorX, p.tileAnchorY); let { x: M, y: I, z: S } = u.projection.projectTilePoint(C.x, C.y, h.canonical); if (c) { const [e, t, i] = c(C); M += e, I += t, S += i; } const D = [M, I, S, 1]; if (e.transformMat4$1(D, D, i), !at(D, m)) { mt(T, f); continue } const L = st(o.transform.cameraToCenterDistance, D[3]), A = e.evaluateSizeForFeature(_, d, p), z = a ? A / L : A * L, P = nt(M, I, S, n); if (P[3] <= 0) { mt(T, f); continue } let R = {}; const O = a ? null : c, B = ut(p, z, !1, l, i, n, s, t.glyphOffsetArray, v, f, g, P, C, R, y, O, u.projection, h, a); w = B.useVertical, O && B.needsFlipping && (R = {}), (B.notEnoughRoom || w || B.needsFlipping && ut(p, z, !0, l, i, n, s, t.glyphOffsetArray, v, f, g, P, C, R, y, O, u.projection, h, a).notEnoughRoom) && mt(T, f); } r ? (t.text.dynamicLayoutVertexBuffer.updateData(f), g && t.text.globeExtVertexBuffer.updateData(g)) : (t.icon.dynamicLayoutVertexBuffer.updateData(f), g && t.icon.globeExtVertexBuffer.updateData(g)); } function ct(e, t, i, o, r, n, s, a, l, c, h, u, _, d, p, m) { const { lineStartIndex: f, glyphStartIndex: g, segment: v } = a, x = g + a.numGlyphs, y = f + a.lineLength, b = t.getoffsetX(g), w = t.getoffsetX(x - 1), T = pt(e * b, i, o, r, n, s, v, f, y, l, c, h, u, _, !0, d, p, m); if (!T) return null; const E = pt(e * w, i, o, r, n, s, v, f, y, l, c, h, u, _, !0, d, p, m); return E ? { first: T, last: E } : null } function ht(t, i, o, r) { return t === e.WritingMode.horizontal && Math.abs(r) > Math.abs(o) ? { useVertical: !0 } : t === e.WritingMode.vertical ? r > 0 ? { needsFlipping: !0 } : null : 0 !== i && function(e, t) { return 0 === e || Math.abs(t / e) > tt }(o, r) ? 1 === i ? { needsFlipping: !0 } : null : o < 0 ? { needsFlipping: !0 } : null } function ut(t, i, o, r, n, s, a, l, c, h, u, _, d, p, m, f, g, v, x) { const y = i / 24, b = t.lineOffsetX * y, w = t.lineOffsetY * y, { lineStartIndex: T, glyphStartIndex: E, numGlyphs: C, segment: M, writingMode: I, flipState: S } = t, D = T + t.lineLength, L = t => { if (u) { const [i, o, r] = t.up, n = h.length; e.updateGlobeVertexNormal(u, n + 0, i, o, r), e.updateGlobeVertexNormal(u, n + 1, i, o, r), e.updateGlobeVertexNormal(u, n + 2, i, o, r), e.updateGlobeVertexNormal(u, n + 3, i, o, r); } const [i, o, r] = t.point; e.addDynamicAttributes(h, i, o, r, t.angle); }; if (C > 1) { const e = ct(y, l, b, w, o, _, d, t, c, s, p, f, !1, g, v, x); if (!e) return { notEnoughRoom: !0 }; if (r && !o) { let [i, o, r] = e.first.point, [n, s, l] = e.last.point; [i, o] = nt(i, o, r, a), [n, s] = nt(n, s, l, a); const c = ht(I, S, (n - i) * m, s - o); if (t.flipState = c && c.needsFlipping ? 1 : 2, c) return c } L(e.first); for (let e = E + 1; e < E + C - 1; e++) { const t = pt(y * l.getoffsetX(e), b, w, o, _, d, M, T, D, c, s, p, f, !1, !1, g, v, x); if (!t) return h.length -= 4 * (e - E), { notEnoughRoom: !0 }; L(t); } L(e.last); } else { if (r && !o) { const i = nt(d.x, d.y, 0, n), o = T + M + 1, r = new e.pointGeometry(c.getx(o), c.gety(o)), s = nt(r.x, r.y, 0, n), a = s[3] > 0 ? s : dt(d, r, i, 1, n, void 0, g, v.canonical), l = ht(I, S, (a[0] - i[0]) * m, a[1] - i[1]); if (t.flipState = l && l.needsFlipping ? 1 : 2, l) return l } const i = pt(y * l.getoffsetX(E), b, w, o, _, d, M, T, D, c, s, p, f, !1, !1, g, v, x); if (!i) return { notEnoughRoom: !0 }; L(i); } return {} } function _t(e, t, i, o, r) { const { x: n, y: s, z: a } = o.projectTilePoint(e.x, e.y, t); if (!r) return nt(n, s, a, i); const [l, c, h] = r(e); return nt(n + l, s + c, a + h, i) } function dt(t, i, o, r, n, s, a, l) { const c = _t(t.sub(i)._unit()._add(t), l, n, a, s); return e.sub(c, o, c), e.normalize(c, c), e.scaleAndAdd(c, o, c, r) } function pt(t, i, o, r, n, s, a, l, c, h, u, _, d, p, m, f, g, v) { const x = r ? t - i : t + i; let y = x > 0 ? 1 : -1, b = 0; r && (y *= -1, b = Math.PI), y < 0 && (b += Math.PI); let w = l + a + (y > 0 ? 0 : 1) | 0, T = n, E = n, C = 0, M = 0; const I = Math.abs(x), S = [], D = []; let L = s, A = L; const z = () => dt(A, L, E, I - C + 1, u, d, f, g.canonical); for (; C + M <= I;) { if (w += y, w < l || w >= c) return null; if (E = T, A = L, S.push(E), p && D.push(A), L = new e.pointGeometry(h.getx(w), h.gety(w)), T = _[w], !T) { const e = _t(L, g.canonical, u, f, d); T = e[3] > 0 ? _[w] = e : z(); } C += M, M = e.distance(E, T); } m && d && (_[w] && (T = z(), M = e.distance(E, T)), _[w] = T); const P = (I - C) / M, R = L.sub(A)._mult(P)._add(A), O = e.sub([], T, E), B = e.scaleAndAdd([], E, O, P); let k = [0, 0, 1], F = O[0], U = O[1]; if (v && (k = f.upVector(g.canonical, R.x, R.y), 0 !== k[0] || 0 !== k[1] || 1 !== k[2])) { const t = [k[2], 0, -k[0]], i = e.cross([], k, t); e.normalize(t, t), e.normalize(i, i), F = e.dot(O, t), U = e.dot(O, i); } if (o) { const t = e.cross([], k, O); e.normalize(t, t), e.scaleAndAdd(B, B, t, o * y); } const N = b + Math.atan2(U, F); return S.push(B), p && D.push(R), { point: B, angle: N, path: S, tilePath: D, up: k } } function mt(e, t) { const i = t.length, o = i + 4 * e; t.resize(o), t.float32.fill(-1 / 0, 4 * i, 4 * o); } function ft(e, t, i) { const o = t[0], r = t[1]; return e[0] = i[0] * o + i[4] * r + i[12], e[1] = i[1] * o + i[5] * r + i[13], e[3] = i[3] * o + i[7] * r + i[15], e } const gt = 100; class vt { constructor(e, t, i = new et(e.width + 200, e.height + 200, 25), o = new et(e.width + 200, e.height + 200, 25)) { this.transform = e, this.grid = i, this.ignoredGrid = o, this.pitchfactor = Math.cos(e._pitch) * e.cameraToCenterDistance, this.screenRightBoundary = e.width + gt, this.screenBottomBoundary = e.height + gt, this.gridRightBoundary = e.width + 200, this.gridBottomBoundary = e.height + 200, this.fogState = t; } placeCollisionBox(e, t, i, o, r, n, s, a) { let l = i.projectedAnchorX, c = i.projectedAnchorY, h = i.projectedAnchorZ; const u = i.elevation, _ = i.tileID, d = e.getProjection(); if (u && _) { const [e, t, o] = d.upVector(_.canonical, i.tileAnchorX, i.tileAnchorY), r = d.upVectorScale(_.canonical, this.transform.center.lat, this.transform.worldSize).metersToTile; l += e * u * r, c += t * u * r, h += o * u * r; } const p = this.projectAndGetPerspectiveRatio(s, l, c, h, i.tileID, "globe" === d.name || !!u || this.transform.pitch > 0, d), m = n * p.perspectiveRatio, f = (i.x1 * t + o.x - i.padding) * m + p.point.x, g = (i.y1 * t + o.y - i.padding) * m + p.point.y, v = (i.x2 * t + o.x + i.padding) * m + p.point.x, x = (i.y2 * t + o.y + i.padding) * m + p.point.y, y = p.perspectiveRatio <= .55 || p.occluded; return !this.isInsideGrid(f, g, v, x) || !r && this.grid.hitTest(f, g, v, x, a) || y ? { box: [], offscreen: !1, occluded: p.occluded } : { box: [f, g, v, x], offscreen: this.isOffscreen(f, g, v, x), occluded: !1 } } placeCollisionCircles(t, i, o, r, n, s, a, l, c, h, u, _, d, p, m) { const f = [], g = this.transform.elevation, v = t.getProjection(), x = g ? g.getAtTileOffsetFunc(m, this.transform.center.lat, this.transform.worldSize, v) : null, y = new e.pointGeometry(o.tileAnchorX, o.tileAnchorY); let { x: b, y: w, z: T } = v.projectTilePoint(y.x, y.y, m.canonical); if (x) { const [e, t, i] = x(y); b += e, w += t, T += i; } const E = "globe" === v.name, C = this.projectAndGetPerspectiveRatio(a, b, w, T, m, E || !!g || this.transform.pitch > 0, v), { perspectiveRatio: M } = C, I = (u ? s / M : s * M) / e.ONE_EM, S = nt(b, w, T, l), D = C.signedDistanceFromCamera > 0 ? ct(I, n, o.lineOffsetX * I, o.lineOffsetY * I, !1, S, y, o, r, l, {}, g && !u ? x : null, u && !!g, v, m, u) : null; let L = !1, A = !1, z = !0; if (D && !C.occluded) { const t = .5 * d * M + p, o = new e.pointGeometry(-100, -100), r = new e.pointGeometry(this.screenRightBoundary, this.screenBottomBoundary), n = new Qe, { first: s, last: a } = D, l = s.path.length; let u = []; for (let e = l - 1; e >= 1; e--) u.push(s.path[e]); for (let e = 1; e < a.path.length; e++) u.push(a.path[e]); const m = 2.5 * t; c && (u = u.map((([e, t, i], o) => (x && !E && (i = x(o < l - 1 ? s.tilePath[l - 1 - o] : a.tilePath[o - l + 2])[2]), nt(e, t, i, c)))), u.some((e => e[3] <= 0)) && (u = [])); let g = []; if (u.length > 0) { let t = 1 / 0, i = -1 / 0, n = 1 / 0, s = -1 / 0; for (const e of u) t = Math.min(t, e[0]), n = Math.min(n, e[1]), i = Math.max(i, e[0]), s = Math.max(s, e[1]); i >= o.x && t <= r.x && s >= o.y && n <= r.y && (g = [u.map((t => new e.pointGeometry(t[0], t[1])))], (t < o.x || i > r.x || n < o.y || s > r.y) && (g = e.clipLine(g, o.x, o.y, r.x, r.y))); } for (const e of g) { n.reset(e, .25 * t); let o = 0; o = n.length <= .5 * t ? 1 : Math.ceil(n.paddedLength / m) + 1; for (let e = 0; e < o; e++) { const r = e / Math.max(o - 1, 1), s = n.lerp(r), a = s.x + gt, l = s.y + gt; f.push(a, l, t, 0); const c = a - t, u = l - t, d = a + t, p = l + t; if (z = z && this.isOffscreen(c, u, d, p), A = A || this.isInsideGrid(c, u, d, p), !i && this.grid.hitTestCircle(a, l, t, _) && (L = !0, !h)) return { circles: [], offscreen: !1, collisionDetected: L, occluded: !1 } } } } return { circles: !h && L || !A ? [] : f, offscreen: z, collisionDetected: L, occluded: C.occluded } } queryRenderedSymbols(t) { if (0 === t.length || 0 === this.grid.keysLength() && 0 === this.ignoredGrid.keysLength()) return {}; const i = []; let o = 1 / 0, r = 1 / 0, n = -1 / 0, s = -1 / 0; for (const a of t) { const t = new e.pointGeometry(a.x + gt, a.y + gt); o = Math.min(o, t.x), r = Math.min(r, t.y), n = Math.max(n, t.x), s = Math.max(s, t.y), i.push(t); } const a = this.grid.query(o, r, n, s).concat(this.ignoredGrid.query(o, r, n, s)), l = {}, c = {}; for (const t of a) { const o = t.key; if (void 0 === l[o.bucketInstanceId] && (l[o.bucketInstanceId] = {}), l[o.bucketInstanceId][o.featureIndex]) continue; const r = [new e.pointGeometry(t.x1, t.y1), new e.pointGeometry(t.x2, t.y1), new e.pointGeometry(t.x2, t.y2), new e.pointGeometry(t.x1, t.y2)]; e.polygonIntersectsPolygon(i, r) && (l[o.bucketInstanceId][o.featureIndex] = !0, void 0 === c[o.bucketInstanceId] && (c[o.bucketInstanceId] = []), c[o.bucketInstanceId].push(o.featureIndex)); } return c } insertCollisionBox(e, t, i, o, r) { (t ? this.ignoredGrid : this.grid).insert({ bucketInstanceId: i, featureIndex: o, collisionGroupID: r }, e[0], e[1], e[2], e[3]); } insertCollisionCircles(e, t, i, o, r) { const n = t ? this.ignoredGrid : this.grid, s = { bucketInstanceId: i, featureIndex: o, collisionGroupID: r }; for (let t = 0; t < e.length; t += 4) n.insertCircle(s, e[t], e[t + 1], e[t + 2]); } projectAndGetPerspectiveRatio(t, i, o, r, n, s, a) { const l = [i, o, r, 1]; let c = !1; if (r || this.transform.pitch > 0) { e.transformMat4$1(l, l, t); const s = "globe" === a.name; if (this.fogState && n && !s) { const t = function(t, i, o, r, n, s) { const a = s.calculateFogTileMatrix(n), l = [i, o, r]; return e.transformMat4(l, l, a), I(t, l, s.pitch, s._fov) }(this.fogState, i, o, r, n.toUnwrapped(), this.transform); c = t > .9; } } else ft(l, l, t); const h = l[3]; return { point: new e.pointGeometry((l[0] / h + 1) / 2 * this.transform.width + gt, (-l[1] / h + 1) / 2 * this.transform.height + gt), perspectiveRatio: Math.min(.5 + this.transform.getCameraToCenterDistance(a) / h * .5, 1.5), signedDistanceFromCamera: h, occluded: s && l[2] > h || c } } isOffscreen(e, t, i, o) { return i < gt || e >= this.screenRightBoundary || o < gt || t > this.screenBottomBoundary } isInsideGrid(e, t, i, o) { return i >= 0 && e < this.gridRightBoundary && o >= 0 && t < this.gridBottomBoundary } getViewportMatrix() { const t = e.identity([]); return e.translate(t, t, [-100, -100, 0]), t } } function xt(t, i, o) { const r = i.createTileMatrix(t, t.worldSize, o.toUnwrapped()); return e.multiply(new Float32Array(16), t.projMatrix, r) } function yt(e, t, i) { if (t.projection.name === i.projection.name) return e.projMatrix; const o = i.clone(); return o.setProjection(t.projection), xt(o, t.getProjection(), e) } function bt(e, t, i) { return t.name === i.projection.name ? e.projMatrix : xt(i, t, e) } class wt { constructor(e, t, i, o) { this.opacity = e ? Math.max(0, Math.min(1, e.opacity + (e.placed ? t : -t))) : o && i ? 1 : 0, this.placed = i; } isHidden() { return 0 === this.opacity && !this.placed } } class Tt { constructor(e, t, i, o, r, n = !1) { this.text = new wt(e ? e.text : null, t, i, r), this.icon = new wt(e ? e.icon : null, t, o, r), this.clipped = n; } isHidden() { return this.text.isHidden() && this.icon.isHidden() } } class Et { constructor(e, t, i, o = !1) { this.text = e, this.icon = t, this.skipFade = i, this.clipped = o; } } class Ct { constructor() { this.invProjMatrix = e.create(), this.viewportMatrix = e.create(), this.circles = []; } } class Mt { constructor(e, t, i, o, r) { this.bucketInstanceId = e, this.featureIndex = t, this.sourceLayerIndex = i, this.bucketIndex = o, this.tileID = r; } } class It { constructor(e) { this.crossSourceCollisions = e, this.maxGroupID = 0, this.collisionGroups = {}; } get(e) { if (this.crossSourceCollisions) return { ID: 0, predicate: null }; if (!this.collisionGroups[e]) { const t = ++this.maxGroupID; this.collisionGroups[e] = { ID: t, predicate: e => e.collisionGroupID === t }; } return this.collisionGroups[e] } } function St(t, i, o, r, n) { const { horizontalAlign: s, verticalAlign: a } = e.getAnchorAlignment(t), l = -(s - .5) * i, c = -(a - .5) * o, h = e.evaluateVariableOffset(t, r); return new e.pointGeometry(l + h[0] * n, c + h[1] * n) } function Dt(t, i, o, r, n) { const s = new e.pointGeometry(t, i); return o && s._rotate(r ? n : -n), s } class Lt { constructor(e, t, i, o, r) { this.transform = e.clone(), this.projection = e.projection.name, this.collisionIndex = new vt(this.transform, r), this.placements = {}, this.opacities = {}, this.variableOffsets = {}, this.stale = !1, this.commitTime = 0, this.fadeDuration = t, this.retainedQueryData = {}, this.collisionGroups = new It(i), this.collisionCircleArrays = {}, this.prevPlacement = o, o && (o.prevPlacement = void 0), this.placedOrientations = {}; } getBucketParts(t, i, o, r) { const n = o.getBucket(i), s = o.latestFeatureIndex; if (!n || !s || i.id !== n.layerIds[0]) return; const a = n.layers[0].layout, l = o.collisionBoxArray, c = Math.pow(2, this.transform.zoom - o.tileID.overscaledZ), h = o.tileSize / e.EXTENT, u = o.tileID.toUnwrapped(); this.transform.setProjection(n.projection); const _ = (d = o.tileID, p = n.getProjection(), m = this.transform, p.name === this.projection ? m.calculateProjMatrix(d.toUnwrapped()) : xt(m, p, d)); var d, p, m; const f = "map" === a.get("text-pitch-alignment"), g = "map" === a.get("text-rotation-alignment"); i.compileFilter(); const v = i.dynamicFilter(), x = i.dynamicFilterNeedsFeature(), y = this.transform.calculatePixelsToTileUnitsMatrix(o), b = ot(_, o.tileID.canonical, f, g, this.transform, n.getProjection(), y); let w = null; if (f) { const t = rt(_, o.tileID.canonical, f, g, this.transform, n.getProjection(), y); w = e.multiply([], this.transform.labelPlaneMatrix, t); } let T = null; v && o.latestFeatureIndex && (T = { unwrappedTileID: u, dynamicFilter: v, dynamicFilterNeedsFeature: x, featureIndex: o.latestFeatureIndex }), this.retainedQueryData[n.bucketInstanceId] = new Mt(n.bucketInstanceId, s, n.sourceLayerIndex, n.index, o.tileID); const E = { bucket: n, layout: a, posMatrix: _, textLabelPlaneMatrix: b, labelToScreenMatrix: w, clippingData: T, scale: c, textPixelRatio: h, holdingForFade: o.holdingForFade(), collisionBoxArray: l, partiallyEvaluatedTextSize: e.evaluateSizeForZoom(n.textSizeData, this.transform.zoom), partiallyEvaluatedIconSize: e.evaluateSizeForZoom(n.iconSizeData, this.transform.zoom), collisionGroup: this.collisionGroups.get(n.sourceID) }; if (r) for (const e of n.sortKeyRanges) { const { sortKey: i, symbolInstanceStart: o, symbolInstanceEnd: r } = e; t.push({ sortKey: i, symbolInstanceStart: o, symbolInstanceEnd: r, parameters: E }); } else t.push({ symbolInstanceStart: 0, symbolInstanceEnd: n.symbolInstances.length, parameters: E }); } attemptAnchorPlacement(e, t, i, o, r, n, s, a, l, c, h, u, _, d, p, m, f, g) { const { textOffset0: v, textOffset1: x, crossTileID: y } = u, b = [v, x], w = St(e, i, o, b, r), T = this.collisionIndex.placeCollisionBox(d, r, t, Dt(w.x, w.y, n, s, this.transform.angle), h, a, l, c.predicate); if (m) { const e = d.getSymbolInstanceIconSize(g, this.transform.zoom, u.placedIconSymbolIndex); if (0 === this.collisionIndex.placeCollisionBox(d, e, m, Dt(w.x, w.y, n, s, this.transform.angle), h, a, l, c.predicate).box.length) return } if (T.box.length > 0) { let t; return this.prevPlacement && this.prevPlacement.variableOffsets[y] && this.prevPlacement.placements[y] && this.prevPlacement.placements[y].text && (t = this.prevPlacement.variableOffsets[y].anchor), this.variableOffsets[y] = { textOffset: b, width: i, height: o, anchor: e, textScale: r, prevAnchor: t }, this.markUsedJustification(d, e, u, p), d.allowVerticalPlacement && (this.markUsedOrientation(d, p, u), this.placedOrientations[y] = p), { shift: w, placedGlyphBoxes: T } } } placeLayerBucketPart(t, i, o, r) { const { bucket: n, layout: s, posMatrix: a, textLabelPlaneMatrix: l, labelToScreenMatrix: c, clippingData: h, textPixelRatio: u, holdingForFade: _, collisionBoxArray: d, partiallyEvaluatedTextSize: p, partiallyEvaluatedIconSize: m, collisionGroup: f } = t.parameters, g = s.get("text-optional"), v = s.get("icon-optional"), x = s.get("text-allow-overlap"), y = s.get("icon-allow-overlap"), b = "map" === s.get("text-rotation-alignment"), w = "map" === s.get("text-pitch-alignment"), T = "none" !== s.get("icon-text-fit"), E = "viewport-y" === s.get("symbol-z-order"); this.transform.setProjection(n.projection); let C = x && (y || !n.hasIconData() || v), M = y && (x || !n.hasTextData() || g); !n.collisionArrays && d && n.deserializeCollisionBoxes(d), o && r && n.updateCollisionDebugBuffers(this.transform.zoom, d); const I = (t, r, d) => { const { crossTileID: E, numVerticalGlyphVertices: I } = t; if (h) { const o = { zoom: this.transform.zoom, pitch: this.transform.pitch }; let r = null; if (h.dynamicFilterNeedsFeature) { const e = this.retainedQueryData[n.bucketInstanceId]; r = h.featureIndex.loadFeature({ featureIndex: t.featureIndex, bucketIndex: e.bucketIndex, sourceLayerIndex: e.sourceLayerIndex, layoutVertexArrayOffset: 0 }); } if (!(0, h.dynamicFilter)(o, r, this.retainedQueryData[n.bucketInstanceId].tileID.canonical, new e.pointGeometry(t.tileAnchorX, t.tileAnchorY), this.transform.calculateDistanceTileData(h.unwrappedTileID))) return this.placements[E] = new Et(!1, !1, !1, !0), void(i[E] = !0) } if (i[E]) return; if (_) return void(this.placements[E] = new Et(!1, !1, !1)); let S = !1, D = !1, L = !0, A = !1, z = !1, P = null, R = { box: null, offscreen: null, occluded: null }, O = { box: null, offscreen: null, occluded: null }, B = null, k = null, F = null, U = 0, N = 0, G = 0; d.textFeatureIndex ? U = d.textFeatureIndex : t.useRuntimeCollisionCircles && (U = t.featureIndex), d.verticalTextFeatureIndex && (N = d.verticalTextFeatureIndex); const j = e => { e.tileID = this.retainedQueryData[n.bucketInstanceId].tileID; const t = this.transform.elevation; (t || e.elevation) && (e.elevation = t ? t.getAtTileOffset(e.tileID, e.tileAnchorX, e.tileAnchorY) : 0); }, Z = d.textBox; if (Z) { j(Z); const i = i => { let o = e.WritingMode.horizontal; if (n.allowVerticalPlacement && !i && this.prevPlacement) { const e = this.prevPlacement.placedOrientations[E]; e && (this.placedOrientations[E] = e, o = e, this.markUsedOrientation(n, o, t)); } return o }, o = (t, i) => { if (n.allowVerticalPlacement && I > 0 && d.verticalTextBox) { for (const o of n.writingModes) if (o === e.WritingMode.vertical ? (R = i(), O = R) : R = t(), R && R.box && R.box.length) break } else R = t(); }; if (s.get("text-variable-anchor")) { let l = s.get("text-variable-anchor"); if (this.prevPlacement && this.prevPlacement.variableOffsets[E]) { const e = this.prevPlacement.variableOffsets[E]; l.indexOf(e.anchor) > 0 && (l = l.filter((t => t !== e.anchor)), l.unshift(e.anchor)); } const c = (e, i, o) => { const s = n.getSymbolInstanceTextSize(p, t, this.transform.zoom, r), c = (e.x2 - e.x1) * s + 2 * e.padding, h = (e.y2 - e.y1) * s + 2 * e.padding, _ = T && !y ? i : null; _ && j(_); let d = { box: [], offscreen: !1, occluded: !1 }; const g = x ? 2 * l.length : l.length; for (let i = 0; i < g; ++i) { const g = this.attemptAnchorPlacement(l[i % l.length], e, c, h, s, b, w, u, a, f, i >= l.length, t, r, n, o, _, p, m); if (g && (d = g.placedGlyphBoxes, d && d.box && d.box.length)) { S = !0, P = g.shift; break } } return d }; o((() => c(Z, d.iconBox, e.WritingMode.horizontal)), (() => { const t = d.verticalTextBox; return t && j(t), n.allowVerticalPlacement && !(R && R.box && R.box.length) && I > 0 && t ? c(t, d.verticalIconBox, e.WritingMode.vertical) : { box: null, offscreen: null, occluded: null } })), R && (S = R.box, L = R.offscreen, A = R.occluded); const h = i(R && R.box); if (!S && this.prevPlacement) { const e = this.prevPlacement.variableOffsets[E]; e && (this.variableOffsets[E] = e, this.markUsedJustification(n, e.anchor, t, h)); } } else { const s = (i, o) => { const s = n.getSymbolInstanceTextSize(p, t, this.transform.zoom, r), l = this.collisionIndex.placeCollisionBox(n, s, i, new e.pointGeometry(0, 0), x, u, a, f.predicate); return l && l.box && l.box.length && (this.markUsedOrientation(n, o, t), this.placedOrientations[E] = o), l }; o((() => s(Z, e.WritingMode.horizontal)), (() => { const t = d.verticalTextBox; return n.allowVerticalPlacement && I > 0 && t ? (j(t), s(t, e.WritingMode.vertical)) : { box: null, offscreen: null, occluded: null } })), i(R && R.box && R.box.length); } } if (B = R, S = B && B.box && B.box.length > 0, L = B && B.offscreen, A = B && B.occluded, t.useRuntimeCollisionCircles) { const i = n.text.placedSymbolArray.get(t.centerJustifiedTextSymbolIndex >= 0 ? t.centerJustifiedTextSymbolIndex : t.verticalPlacedTextSymbolIndex), r = e.evaluateSizeForFeature(n.textSizeData, p, i), h = s.get("text-padding"); k = this.collisionIndex.placeCollisionCircles(n, x, i, n.lineVertexArray, n.glyphOffsetArray, r, a, l, c, o, w, f.predicate, t.collisionCircleDiameter * r / e.ONE_EM, h, this.retainedQueryData[n.bucketInstanceId].tileID), S = x || k.circles.length > 0 && !k.collisionDetected, L = L && k.offscreen, A = k.occluded; } if (d.iconFeatureIndex && (G = d.iconFeatureIndex), d.iconBox) { const i = i => { j(i); const o = T && P ? Dt(P.x, P.y, b, w, this.transform.angle) : new e.pointGeometry(0, 0), r = n.getSymbolInstanceIconSize(m, this.transform.zoom, t.placedIconSymbolIndex); return this.collisionIndex.placeCollisionBox(n, r, i, o, y, u, a, f.predicate) }; O && O.box && O.box.length && d.verticalIconBox ? (F = i(d.verticalIconBox), D = F.box.length > 0) : (F = i(d.iconBox), D = F.box.length > 0), L = L && F.offscreen, z = F.occluded; } const V = g || 0 === t.numHorizontalGlyphVertices && 0 === I, W = v || 0 === t.numIconVertices; if (V || W ? W ? V || (D = D && S) : S = D && S : D = S = D && S, S && B && B.box && this.collisionIndex.insertCollisionBox(B.box, s.get("text-ignore-placement"), n.bucketInstanceId, O && O.box && N ? N : U, f.ID), D && F && this.collisionIndex.insertCollisionBox(F.box, s.get("icon-ignore-placement"), n.bucketInstanceId, G, f.ID), k && (S && this.collisionIndex.insertCollisionCircles(k.circles, s.get("text-ignore-placement"), n.bucketInstanceId, U, f.ID), o)) { const e = n.bucketInstanceId; let t = this.collisionCircleArrays[e]; void 0 === t && (t = this.collisionCircleArrays[e] = new Ct); for (let e = 0; e < k.circles.length; e += 4) t.circles.push(k.circles[e + 0]), t.circles.push(k.circles[e + 1]), t.circles.push(k.circles[e + 2]), t.circles.push(k.collisionDetected ? 1 : 0); } const X = "globe" !== n.projection.name; C = C && (X || !A), M = M && (X || !z), this.placements[E] = new Et(S || C, D || M, L || n.justReloaded), i[E] = !0; }; if (E) { const e = n.getSortedSymbolIndexes(this.transform.angle); for (let t = e.length - 1; t >= 0; --t) { const i = e[t]; I(n.symbolInstances.get(i), i, n.collisionArrays[i]); } } else for (let e = t.symbolInstanceStart; e < t.symbolInstanceEnd; e++) I(n.symbolInstances.get(e), e, n.collisionArrays[e]); if (o && n.bucketInstanceId in this.collisionCircleArrays) { const t = this.collisionCircleArrays[n.bucketInstanceId]; e.invert(t.invProjMatrix, a), t.viewportMatrix = this.collisionIndex.getViewportMatrix(); } n.justReloaded = !1; } markUsedJustification(t, i, o, r) { const { leftJustifiedTextSymbolIndex: n, centerJustifiedTextSymbolIndex: s, rightJustifiedTextSymbolIndex: a, verticalPlacedTextSymbolIndex: l, crossTileID: c } = o, h = e.getAnchorJustification(i), u = r === e.WritingMode.vertical ? l : "left" === h ? n : "center" === h ? s : "right" === h ? a : -1; n >= 0 && (t.text.placedSymbolArray.get(n).crossTileID = u >= 0 && n !== u ? 0 : c), s >= 0 && (t.text.placedSymbolArray.get(s).crossTileID = u >= 0 && s !== u ? 0 : c), a >= 0 && (t.text.placedSymbolArray.get(a).crossTileID = u >= 0 && a !== u ? 0 : c), l >= 0 && (t.text.placedSymbolArray.get(l).crossTileID = u >= 0 && l !== u ? 0 : c); } markUsedOrientation(t, i, o) { const r = i === e.WritingMode.horizontal || i === e.WritingMode.horizontalOnly ? i : 0, n = i === e.WritingMode.vertical ? i : 0, { leftJustifiedTextSymbolIndex: s, centerJustifiedTextSymbolIndex: a, rightJustifiedTextSymbolIndex: l, verticalPlacedTextSymbolIndex: c } = o, h = t.text.placedSymbolArray; s >= 0 && (h.get(s).placedOrientation = r), a >= 0 && (h.get(a).placedOrientation = r), l >= 0 && (h.get(l).placedOrientation = r), c >= 0 && (h.get(c).placedOrientation = n); } commit(e) { this.commitTime = e, this.zoomAtLastRecencyCheck = this.transform.zoom; const t = this.prevPlacement; let i = !1; this.prevZoomAdjustment = t ? t.zoomAdjustment(this.transform.zoom) : 0; const o = t ? t.symbolFadeChange(e) : 1, r = t ? t.opacities : {}, n = t ? t.variableOffsets : {}, s = t ? t.placedOrientations : {}; for (const e in this.placements) { const t = this.placements[e], n = r[e]; n ? (this.opacities[e] = new Tt(n, o, t.text, t.icon, null, t.clipped), i = i || t.text !== n.text.placed || t.icon !== n.icon.placed) : (this.opacities[e] = new Tt(null, o, t.text, t.icon, t.skipFade, t.clipped), i = i || t.text || t.icon); } for (const e in r) { const t = r[e]; if (!this.opacities[e]) { const r = new Tt(t, o, !1, !1); r.isHidden() || (this.opacities[e] = r, i = i || t.text.placed || t.icon.placed); } } for (const e in n) this.variableOffsets[e] || !this.opacities[e] || this.opacities[e].isHidden() || (this.variableOffsets[e] = n[e]); for (const e in s) this.placedOrientations[e] || !this.opacities[e] || this.opacities[e].isHidden() || (this.placedOrientations[e] = s[e]); i ? this.lastPlacementChangeTime = e : "number" != typeof this.lastPlacementChangeTime && (this.lastPlacementChangeTime = t ? t.lastPlacementChangeTime : e); } updateLayerOpacities(e, t) { const i = {}; for (const o of t) { const t = o.getBucket(e); t && o.latestFeatureIndex && e.id === t.layerIds[0] && this.updateBucketOpacities(t, i, o.collisionBoxArray); } } updateBucketOpacities(t, i, o) { t.hasTextData() && t.text.opacityVertexArray.clear(), t.hasIconData() && t.icon.opacityVertexArray.clear(), t.hasIconCollisionBoxData() && t.iconCollisionBox.collisionVertexArray.clear(), t.hasTextCollisionBoxData() && t.textCollisionBox.collisionVertexArray.clear(); const r = t.layers[0].layout, n = !!t.layers[0].dynamicFilter(), s = new Tt(null, 0, !1, !1, !0), a = r.get("text-allow-overlap"), l = r.get("icon-allow-overlap"), c = r.get("text-variable-anchor"), h = "map" === r.get("text-rotation-alignment"), u = "map" === r.get("text-pitch-alignment"), _ = "none" !== r.get("icon-text-fit"), d = new Tt(null, 0, a && (l || !t.hasIconData() || r.get("icon-optional")), l && (a || !t.hasTextData() || r.get("text-optional")), !0); !t.collisionArrays && o && (t.hasIconCollisionBoxData() || t.hasTextCollisionBoxData()) && t.deserializeCollisionBoxes(o); const p = (e, t, i) => { for (let o = 0; o < t / 4; o++) e.opacityVertexArray.emplaceBack(i); }; let m = 0; for (let o = 0; o < t.symbolInstances.length; o++) { const r = t.symbolInstances.get(o), { numHorizontalGlyphVertices: a, numVerticalGlyphVertices: l, crossTileID: f, numIconVertices: g } = r; let v = this.opacities[f]; i[f] ? v = s : v || (v = d, this.opacities[f] = v), i[f] = !0; const x = a > 0 || l > 0, y = g > 0, b = this.placedOrientations[f], w = b === e.WritingMode.vertical, T = b === e.WritingMode.horizontal || b === e.WritingMode.horizontalOnly; if (!x && !y || v.isHidden() || m++, x) { const e = Ut(v.text); p(t.text, a, w ? Nt : e), p(t.text, l, T ? Nt : e); const i = v.text.isHidden(), { leftJustifiedTextSymbolIndex: o, centerJustifiedTextSymbolIndex: n, rightJustifiedTextSymbolIndex: s, verticalPlacedTextSymbolIndex: c } = r, h = t.text.placedSymbolArray, u = i || w ? 1 : 0; o >= 0 && (h.get(o).hidden = u), n >= 0 && (h.get(n).hidden = u), s >= 0 && (h.get(s).hidden = u), c >= 0 && (h.get(c).hidden = i || T ? 1 : 0); const _ = this.variableOffsets[f]; _ && this.markUsedJustification(t, _.anchor, r, b); const d = this.placedOrientations[f]; d && (this.markUsedJustification(t, "left", r, d), this.markUsedOrientation(t, d, r)); } if (y) { const e = Ut(v.icon), { placedIconSymbolIndex: i, verticalPlacedIconSymbolIndex: o } = r, n = t.icon.placedSymbolArray, s = v.icon.isHidden() ? 1 : 0; i >= 0 && (p(t.icon, g, w ? Nt : e), n.get(i).hidden = s), o >= 0 && (p(t.icon, r.numVerticalIconVertices, T ? Nt : e), n.get(o).hidden = s); } if (t.hasIconCollisionBoxData() || t.hasTextCollisionBoxData()) { const i = t.collisionArrays[o]; if (i) { let o = new e.pointGeometry(0, 0), r = !0; if (i.textBox || i.verticalTextBox) { if (c) { const e = this.variableOffsets[f]; e ? (o = St(e.anchor, e.width, e.height, e.textOffset, e.textScale), h && o._rotate(u ? this.transform.angle : -this.transform.angle)) : r = !1; } n && (r = !v.clipped), i.textBox && At(t.textCollisionBox.collisionVertexArray, v.text.placed, !r || w, o.x, o.y), i.verticalTextBox && At(t.textCollisionBox.collisionVertexArray, v.text.placed, !r || T, o.x, o.y); } const s = r && Boolean(!T && i.verticalIconBox); i.iconBox && At(t.iconCollisionBox.collisionVertexArray, v.icon.placed, s, _ ? o.x : 0, _ ? o.y : 0), i.verticalIconBox && At(t.iconCollisionBox.collisionVertexArray, v.icon.placed, !s, _ ? o.x : 0, _ ? o.y : 0); } } } if (t.fullyClipped = 0 === m, t.sortFeatures(this.transform.angle), this.retainedQueryData[t.bucketInstanceId] && (this.retainedQueryData[t.bucketInstanceId].featureSortOrder = t.featureSortOrder), t.hasTextData() && t.text.opacityVertexBuffer && t.text.opacityVertexBuffer.updateData(t.text.opacityVertexArray), t.hasIconData() && t.icon.opacityVertexBuffer && t.icon.opacityVertexBuffer.updateData(t.icon.opacityVertexArray), t.hasIconCollisionBoxData() && t.iconCollisionBox.collisionVertexBuffer && t.iconCollisionBox.collisionVertexBuffer.updateData(t.iconCollisionBox.collisionVertexArray), t.hasTextCollisionBoxData() && t.textCollisionBox.collisionVertexBuffer && t.textCollisionBox.collisionVertexBuffer.updateData(t.textCollisionBox.collisionVertexArray), t.bucketInstanceId in this.collisionCircleArrays) { const e = this.collisionCircleArrays[t.bucketInstanceId]; t.placementInvProjMatrix = e.invProjMatrix, t.placementViewportMatrix = e.viewportMatrix, t.collisionCircleArray = e.circles, delete this.collisionCircleArrays[t.bucketInstanceId]; } } symbolFadeChange(e) { return 0 === this.fadeDuration ? 1 : (e - this.commitTime) / this.fadeDuration + this.prevZoomAdjustment } zoomAdjustment(e) { return Math.max(0, (this.transform.zoom - e) / 1.5) } hasTransitions(e) { return this.stale || e - this.lastPlacementChangeTime < this.fadeDuration } stillRecent(e, t) { const i = this.zoomAtLastRecencyCheck === t ? 1 - this.zoomAdjustment(t) : 1; return this.zoomAtLastRecencyCheck = t, this.commitTime + this.fadeDuration * i > e } setStale() { this.stale = !0; } } function At(e, t, i, o, r) { e.emplaceBack(t ? 1 : 0, i ? 1 : 0, o || 0, r || 0), e.emplaceBack(t ? 1 : 0, i ? 1 : 0, o || 0, r || 0), e.emplaceBack(t ? 1 : 0, i ? 1 : 0, o || 0, r || 0), e.emplaceBack(t ? 1 : 0, i ? 1 : 0, o || 0, r || 0); } const zt = Math.pow(2, 25), Pt = Math.pow(2, 24), Rt = Math.pow(2, 17), Ot = Math.pow(2, 16), Bt = Math.pow(2, 9), kt = Math.pow(2, 8), Ft = Math.pow(2, 1); function Ut(e) { if (0 === e.opacity && !e.placed) return 0; if (1 === e.opacity && e.placed) return 4294967295; const t = e.placed ? 1 : 0, i = Math.floor(127 * e.opacity); return i * zt + t * Pt + i * Rt + t * Ot + i * Bt + t * kt + i * Ft + t } const Nt = 0; class Gt { constructor(e) { this._sortAcrossTiles = "viewport-y" !== e.layout.get("symbol-z-order") && void 0 !== e.layout.get("symbol-sort-key").constantOr(1), this._currentTileIndex = 0, this._currentPartIndex = 0, this._seenCrossTileIDs = {}, this._bucketParts = []; } continuePlacement(e, t, i, o, r) { const n = this._bucketParts; for (; this._currentTileIndex < e.length;) if (t.getBucketParts(n, o, e[this._currentTileIndex], this._sortAcrossTiles), this._currentTileIndex++, r()) return !0; for (this._sortAcrossTiles && (this._sortAcrossTiles = !1, n.sort(((e, t) => e.sortKey - t.sortKey))); this._currentPartIndex < n.length;) { const e = n[this._currentPartIndex]; if (t.placeLayerBucketPart(e, this._seenCrossTileIDs, i, 0 === e.symbolInstanceStart), this._currentPartIndex++, r()) return !0 } return !1 } } class jt { constructor(e, t, i, o, r, n, s, a) { this.placement = new Lt(e, r, n, s, a), this._currentPlacementIndex = t.length - 1, this._forceFullPlacement = i, this._showCollisionBoxes = o, this._done = !1; } isDone() { return this._done } continuePlacement(t, i, o) { const r = e.exported.now(), n = () => { const t = e.exported.now() - r; return !this._forceFullPlacement && t > 2 }; for (; this._currentPlacementIndex >= 0;) { const e = i[t[this._currentPlacementIndex]], r = this.placement.collisionIndex.transform.zoom; if ("symbol" === e.type && (!e.minzoom || e.minzoom <= r) && (!e.maxzoom || e.maxzoom > r)) { if (this._inProgressLayer || (this._inProgressLayer = new Gt(e)), this._inProgressLayer.continuePlacement(o[e.source], this.placement, this._showCollisionBoxes, e, n)) return; delete this._inProgressLayer; } this._currentPlacementIndex--; } this._done = !0; } commit(e) { return this.placement.commit(e), this.placement } } const Zt = 512 / e.EXTENT / 2; class Vt { constructor(e, t, i) { this.tileID = e, this.indexedSymbolInstances = {}, this.bucketInstanceId = i; for (let i = 0; i < t.length; i++) { const o = t.get(i), r = o.key; this.indexedSymbolInstances[r] || (this.indexedSymbolInstances[r] = []), this.indexedSymbolInstances[r].push({ crossTileID: o.crossTileID, coord: this.getScaledCoordinates(o, e) }); } } getScaledCoordinates(t, i) { const o = Zt / Math.pow(2, i.canonical.z - this.tileID.canonical.z); return { x: Math.floor((i.canonical.x * e.EXTENT + t.tileAnchorX) * o), y: Math.floor((i.canonical.y * e.EXTENT + t.tileAnchorY) * o) } } findMatches(e, t, i) { const o = this.tileID.canonical.z < t.canonical.z ? 1 : Math.pow(2, this.tileID.canonical.z - t.canonical.z); for (let r = 0; r < e.length; r++) { const n = e.get(r); if (n.crossTileID) continue; const s = this.indexedSymbolInstances[n.key]; if (!s) continue; const a = this.getScaledCoordinates(n, t); for (const e of s) if (Math.abs(e.coord.x - a.x) <= o && Math.abs(e.coord.y - a.y) <= o && !i[e.crossTileID]) { i[e.crossTileID] = !0, n.crossTileID = e.crossTileID; break } } } } class Wt { constructor() { this.maxCrossTileID = 0; } generate() { return ++this.maxCrossTileID } } class Xt { constructor() { this.indexes = {}, this.usedCrossTileIDs = {}, this.lng = 0; } handleWrapJump(e) { const t = Math.round((e - this.lng) / 360); if (0 !== t) for (const e in this.indexes) { const i = this.indexes[e], o = {}; for (const e in i) { const r = i[e]; r.tileID = r.tileID.unwrapTo(r.tileID.wrap + t), o[r.tileID.key] = r; } this.indexes[e] = o; } this.lng = e; } addBucket(e, t, i) { if (this.indexes[e.overscaledZ] && this.indexes[e.overscaledZ][e.key]) { if (this.indexes[e.overscaledZ][e.key].bucketInstanceId === t.bucketInstanceId) return !1; this.removeBucketCrossTileIDs(e.overscaledZ, this.indexes[e.overscaledZ][e.key]); } for (let e = 0; e < t.symbolInstances.length; e++) t.symbolInstances.get(e).crossTileID = 0; this.usedCrossTileIDs[e.overscaledZ] || (this.usedCrossTileIDs[e.overscaledZ] = {}); const o = this.usedCrossTileIDs[e.overscaledZ]; for (const i in this.indexes) { const r = this.indexes[i]; if (Number(i) > e.overscaledZ) for (const i in r) { const n = r[i]; n.tileID.isChildOf(e) && n.findMatches(t.symbolInstances, e, o); } else { const n = r[e.scaledTo(Number(i)).key]; n && n.findMatches(t.symbolInstances, e, o); } } for (let e = 0; e < t.symbolInstances.length; e++) { const r = t.symbolInstances.get(e); r.crossTileID || (r.crossTileID = i.generate(), o[r.crossTileID] = !0); } return void 0 === this.indexes[e.overscaledZ] && (this.indexes[e.overscaledZ] = {}), this.indexes[e.overscaledZ][e.key] = new Vt(e, t.symbolInstances, t.bucketInstanceId), !0 } removeBucketCrossTileIDs(e, t) { for (const i in t.indexedSymbolInstances) for (const o of t.indexedSymbolInstances[i]) delete this.usedCrossTileIDs[e][o.crossTileID]; } removeStaleBuckets(e) { let t = !1; for (const i in this.indexes) { const o = this.indexes[i]; for (const r in o) e[o[r].bucketInstanceId] || (this.removeBucketCrossTileIDs(i, o[r]), delete o[r], t = !0); } return t } } class qt { constructor() { this.layerIndexes = {}, this.crossTileIDs = new Wt, this.maxBucketInstanceId = 0, this.bucketsInCurrentPlacement = {}; } addLayer(e, t, i, o) { let r = this.layerIndexes[e.id]; void 0 === r && (r = this.layerIndexes[e.id] = new Xt); let n = !1; const s = {}; "globe" !== o.name && r.handleWrapJump(i); for (const i of t) { const t = i.getBucket(e); t && e.id === t.layerIds[0] && (t.bucketInstanceId || (t.bucketInstanceId = ++this.maxBucketInstanceId), r.addBucket(i.tileID, t, this.crossTileIDs) && (n = !0), s[t.bucketInstanceId] = !0); } return r.removeStaleBuckets(s) && (n = !0), n } pruneUnusedLayers(e) { const t = {}; e.forEach((e => { t[e] = !0; })); for (const e in this.layerIndexes) t[e] || delete this.layerIndexes[e]; } } const $t = (t, i) => e.emitValidationErrors(t, i && i.filter((e => "source.canvas" !== e.identifier))), Ht = e.pick(We, ["addLayer", "removeLayer", "setPaintProperty", "setLayoutProperty", "setFilter", "addSource", "removeSource", "setLayerZoomRange", "setLight", "setTransition", "setGeoJSONSourceData", "setTerrain", "setFog", "setProjection"]), Yt = e.pick(We, ["setCenter", "setZoom", "setBearing", "setPitch"]), Kt = { version: 8, layers: [], sources: {} }, Jt = { fill: !0, line: !0, background: !0, hillshade: !0, raster: !0 }; class Qt extends e.Evented { constructor(t, i = {}) { super(), this.map = t, this.dispatcher = new z(je(), this), this.imageManager = new y, this.imageManager.setEventedParent(this), this.glyphManager = new e.GlyphManager(t._requestManager, i.localFontFamily ? e.LocalGlyphMode.all : i.localIdeographFontFamily ? e.LocalGlyphMode.ideographs : e.LocalGlyphMode.none, i.localFontFamily || i.localIdeographFontFamily), this.crossTileSymbolIndex = new qt, this._layers = {}, this._num3DLayers = 0, this._numSymbolLayers = 0, this._numCircleLayers = 0, this._serializedLayers = {}, this._sourceCaches = {}, this._otherSourceCaches = {}, this._symbolSourceCaches = {}, this._loaded = !1, this._availableImages = [], this._order = [], this._drapedFirstOrder = [], this._markersNeedUpdate = !1, this._resetUpdates(), this.dispatcher.broadcast("setReferrer", e.getReferrer()); const o = this; this._rtlTextPluginCallback = Qt.registerForPluginStateChange((t => { o.dispatcher.broadcast("syncRTLPluginState", { pluginStatus: t.pluginStatus, pluginURL: t.pluginURL }, ((t, i) => { if (e.triggerPluginCompletionEvent(t), i && i.every((e => e))) for (const e in o._sourceCaches) { const t = o._sourceCaches[e], i = t.getSource().type; "vector" !== i && "geojson" !== i || t.reload(); } })); })), this.on("data", (e => { if ("source" !== e.dataType || "metadata" !== e.sourceDataType) return; const t = this.getSource(e.sourceId); if (t && t.vectorLayerIds) for (const e in this._layers) { const i = this._layers[e]; i.source === t.id && this._validateLayer(i); } })); } loadURL(t, i = {}) { this.fire(new e.Event("dataloading", { dataType: "style" })); const o = "boolean" == typeof i.validate ? i.validate : !e.isMapboxURL(t); t = this.map._requestManager.normalizeStyleURL(t, i.accessToken); const r = this.map._requestManager.transformRequest(t, e.ResourceType.Style); this._request = e.getJSON(r, ((t, i) => { this._request = null, t ? this.fire(new e.ErrorEvent(t)) : i && this._load(i, o); })); } loadJSON(t, i = {}) { this.fire(new e.Event("dataloading", { dataType: "style" })), this._request = e.exported.frame((() => { this._request = null, this._load(t, !1 !== i.validate); })); } loadEmpty() { this.fire(new e.Event("dataloading", { dataType: "style" })), this._load(Kt, !1); } _updateLayerCount(e, t) { const i = t ? 1 : -1; e.is3D() && (this._num3DLayers += i), "circle" === e.type && (this._numCircleLayers += i), "symbol" === e.type && (this._numSymbolLayers += i); } _load(t, i) { if (i && $t(this, e.validateStyle(t))) return; this._loaded = !0, this.stylesheet = e.clone$1(t), this._updateMapProjection(); for (const e in t.sources) this.addSource(e, t.sources[e], { validate: !1 }); this._changed = !1, t.sprite ? this._loadSprite(t.sprite) : (this.imageManager.setLoaded(!0), this.dispatcher.broadcast("spriteLoaded", !0)), this.glyphManager.setURL(t.glyphs); const o = Ve(this.stylesheet.layers); this._order = o.map((e => e.id)), this._layers = {}, this._serializedLayers = {}; for (const t of o) { const i = e.createStyleLayer(t); i.setEventedParent(this, { layer: { id: i.id } }), this._layers[i.id] = i, this._serializedLayers[i.id] = i.serialize(), this._updateLayerCount(i, !0); } this.dispatcher.broadcast("setLayers", this._serializeLayers(this._order)), this.light = new T(this.stylesheet.light), this.stylesheet.terrain && !this.terrainSetForDrapingOnly() && this._createTerrain(this.stylesheet.terrain, 1), this.stylesheet.fog && this._createFog(this.stylesheet.fog), this._updateDrapeFirstLayers(), this.fire(new e.Event("data", { dataType: "style" })), this.fire(new e.Event("style.load")); } terrainSetForDrapingOnly() { return !!this.terrain && 0 === this.terrain.drapeRenderMode } setProjection(e) { e ? this.stylesheet.projection = e : delete this.stylesheet.projection, this._updateMapProjection(); } applyProjectionUpdate() { this._loaded && (this.dispatcher.broadcast("setProjection", this.map.transform.projectionOptions), this.map.transform.projection.requiresDraping ? this.getTerrain() || this.stylesheet.terrain || this.setTerrainForDraping() : this.terrainSetForDrapingOnly() && this.setTerrain(null)); } _updateMapProjection() { this.map._useExplicitProjection ? this.applyProjectionUpdate() : this.map._prioritizeAndUpdateProjection(null, this.stylesheet.projection); } _loadSprite(t) { this._spriteRequest = function(t, i, o) { let r, n, s; const a = e.exported.devicePixelRatio > 1 ? "@2x" : ""; let l = e.getJSON(i.transformRequest(i.normalizeSpriteURL(t, a, ".json"), e.ResourceType.SpriteJSON), ((e, t) => { l = null, s || (s = e, r = t, h()); })), c = e.getImage(i.transformRequest(i.normalizeSpriteURL(t, a, ".png"), e.ResourceType.SpriteImage), ((e, t) => { c = null, s || (s = e, n = t, h()); })); function h() { if (s) o(s); else if (r && n) { const t = e.exported.getImageData(n), i = {}; for (const o in r) { const { width: n, height: s, x: a, y: l, sdf: c, pixelRatio: h, stretchX: u, stretchY: _, content: d } = r[o], p = new e.RGBAImage({ width: n, height: s }); e.RGBAImage.copy(t, p, { x: a, y: l }, { x: 0, y: 0 }, { width: n, height: s }), i[o] = { data: p, pixelRatio: h, sdf: c, stretchX: u, stretchY: _, content: d }; } o(null, i); } } return { cancel() { l && (l.cancel(), l = null), c && (c.cancel(), c = null); } } }(t, this.map._requestManager, ((t, i) => { if (this._spriteRequest = null, t) this.fire(new e.ErrorEvent(t)); else if (i) for (const e in i) this.imageManager.addImage(e, i[e]); this.imageManager.setLoaded(!0), this._availableImages = this.imageManager.listImages(), this.dispatcher.broadcast("setImages", this._availableImages), this.dispatcher.broadcast("spriteLoaded", !0), this.fire(new e.Event("data", { dataType: "style" })); })); } _validateLayer(t) { const i = this.getSource(t.source); if (!i) return; const o = t.sourceLayer; o && ("geojson" === i.type || i.vectorLayerIds && -1 === i.vectorLayerIds.indexOf(o)) && this.fire(new e.ErrorEvent(new Error(`Source layer "${o}" does not exist on source "${i.id}" as specified by style layer "${t.id}"`))); } loaded() { if (!this._loaded) return !1; if (Object.keys(this._updatedSources).length) return !1; for (const e in this._sourceCaches) if (!this._sourceCaches[e].loaded()) return !1; return !!this.imageManager.isLoaded() } _serializeLayers(e) { const t = []; for (const i of e) { const e = this._layers[i]; "custom" !== e.type && t.push(e.serialize()); } return t } hasTransitions() { if (this.light && this.light.hasTransition()) return !0; if (this.fog && this.fog.hasTransition()) return !0; for (const e in this._sourceCaches) if (this._sourceCaches[e].hasTransition()) return !0; for (const e in this._layers) if (this._layers[e].hasTransition()) return !0; return !1 } get order() { return this.map._optimizeForTerrain && this.terrain ? this._drapedFirstOrder : this._order } isLayerDraped(e) { return !!this.terrain && ("function" == typeof e.isLayerDraped ? e.isLayerDraped() : Jt[e.type]) } _checkLoaded() { if (!this._loaded) throw new Error("Style is not done loading") } update(t) { if (!this._loaded) return; const i = this._changed; if (this._changed) { const e = Object.keys(this._updatedLayers), i = Object.keys(this._removedLayers); (e.length || i.length) && this._updateWorkerLayers(e, i); for (const e in this._updatedSources) { const t = this._updatedSources[e]; "reload" === t ? this._reloadSource(e) : "clear" === t && this._clearSource(e); } this._updateTilesForChangedImages(); for (const e in this._updatedPaintProps) this._layers[e].updateTransitions(t); this.light.updateTransitions(t), this.fog && this.fog.updateTransitions(t), this._resetUpdates(); } const o = {}; for (const e in this._sourceCaches) { const t = this._sourceCaches[e]; o[e] = t.used, t.used = !1; } for (const e of this._order) { const i = this._layers[e]; if (i.recalculate(t, this._availableImages), !i.isHidden(t.zoom)) { const e = this._getLayerSourceCache(i); e && (e.used = !0); } const o = this.map.painter; if (o) { const e = i.getProgramIds(); if (!e) continue; const r = i.getProgramConfiguration(t.zoom); for (const t of e) o.useProgram(t, r); } } for (const t in o) { const i = this._sourceCaches[t]; o[t] !== i.used && i.getSource().fire(new e.Event("data", { sourceDataType: "visibility", dataType: "source", sourceId: i.getSource().id })); } this.light.recalculate(t), this.terrain && this.terrain.recalculate(t), this.fog && this.fog.recalculate(t), this.z = t.zoom, this._markersNeedUpdate && (this._updateMarkersOpacity(), this._markersNeedUpdate = !1), i && this.fire(new e.Event("data", { dataType: "style" })); } _updateTilesForChangedImages() { const e = Object.keys(this._changedImages); if (e.length) { for (const t in this._sourceCaches) this._sourceCaches[t].reloadTilesForDependencies(["icons", "patterns"], e); this._changedImages = {}; } } _updateWorkerLayers(e, t) { this.dispatcher.broadcast("updateLayers", { layers: this._serializeLayers(e), removedIds: t }); } _resetUpdates() { this._changed = !1, this._updatedLayers = {}, this._removedLayers = {}, this._updatedSources = {}, this._updatedPaintProps = {}, this._changedImages = {}; } setState(i) { if (this._checkLoaded(), $t(this, e.validateStyle(i))) return !1; (i = e.clone$1(i)).layers = Ve(i.layers); const o = function(e, i) { if (!e) return [{ command: We.setStyle, args: [i] }]; let o = []; try { if (!t(e.version, i.version)) return [{ command: We.setStyle, args: [i] }]; t(e.center, i.center) || o.push({ command: We.setCenter, args: [i.center] }), t(e.zoom, i.zoom) || o.push({ command: We.setZoom, args: [i.zoom] }), t(e.bearing, i.bearing) || o.push({ command: We.setBearing, args: [i.bearing] }), t(e.pitch, i.pitch) || o.push({ command: We.setPitch, args: [i.pitch] }), t(e.sprite, i.sprite) || o.push({ command: We.setSprite, args: [i.sprite] }), t(e.glyphs, i.glyphs) || o.push({ command: We.setGlyphs, args: [i.glyphs] }), t(e.transition, i.transition) || o.push({ command: We.setTransition, args: [i.transition] }), t(e.light, i.light) || o.push({ command: We.setLight, args: [i.light] }), t(e.fog, i.fog) || o.push({ command: We.setFog, args: [i.fog] }), t(e.projection, i.projection) || o.push({ command: We.setProjection, args: [i.projection] }); const r = {}, n = []; ! function(e, i, o, r) { let n; for (n in i = i || {}, e = e || {}) e.hasOwnProperty(n) && (i.hasOwnProperty(n) || qe(n, o, r)); for (n in i) { if (!i.hasOwnProperty(n)) continue; const s = i[n]; e.hasOwnProperty(n) ? t(e[n], s) || ("geojson" === e[n].type && "geojson" === s.type && He(e, i, n) ? o.push({ command: We.setGeoJSONSourceData, args: [n, s.data] }) : $e(n, i, o, r)) : Xe(n, i, o); } }(e.sources, i.sources, n, r); const s = []; e.layers && e.layers.forEach((e => { e.source && r[e.source] ? o.push({ command: We.removeLayer, args: [e.id] }) : s.push(e); })); let a = e.terrain; a && r[a.source] && (o.push({ command: We.setTerrain, args: [void 0] }), a = void 0), o = o.concat(n), t(a, i.terrain) || o.push({ command: We.setTerrain, args: [i.terrain] }), function(e, i, o) { i = i || []; const r = (e = e || []).map(Ke), n = i.map(Ke), s = e.reduce(Je, {}), a = i.reduce(Je, {}), l = r.slice(), c = Object.create(null); let h, u, _, d, p, m, f; for (h = 0, u = 0; h < r.length; h++) _ = r[h], a.hasOwnProperty(_) ? u++ : (o.push({ command: We.removeLayer, args: [_] }), l.splice(l.indexOf(_, u), 1)); for (h = 0, u = 0; h < n.length; h++) _ = n[n.length - 1 - h], l[l.length - 1 - h] !== _ && (s.hasOwnProperty(_) ? (o.push({ command: We.removeLayer, args: [_] }), l.splice(l.lastIndexOf(_, l.length - u), 1)) : u++, m = l[l.length - h], o.push({ command: We.addLayer, args: [a[_], m] }), l.splice(l.length - h, 0, _), c[_] = !0); for (h = 0; h < n.length; h++) if (_ = n[h], d = s[_], p = a[_], !c[_] && !t(d, p)) if (t(d.source, p.source) && t(d["source-layer"], p["source-layer"]) && t(d.type, p.type)) { for (f in Ye(d.layout, p.layout, o, _, null, We.setLayoutProperty), Ye(d.paint, p.paint, o, _, null, We.setPaintProperty), t(d.filter, p.filter) || o.push({ command: We.setFilter, args: [_, p.filter] }), t(d.minzoom, p.minzoom) && t(d.maxzoom, p.maxzoom) || o.push({ command: We.setLayerZoomRange, args: [_, p.minzoom, p.maxzoom] }), d) d.hasOwnProperty(f) && "layout" !== f && "paint" !== f && "filter" !== f && "metadata" !== f && "minzoom" !== f && "maxzoom" !== f && (0 === f.indexOf("paint.") ? Ye(d[f], p[f], o, _, f.slice(6), We.setPaintProperty) : t(d[f], p[f]) || o.push({ command: We.setLayerProperty, args: [_, f, p[f]] })); for (f in p) p.hasOwnProperty(f) && !d.hasOwnProperty(f) && "layout" !== f && "paint" !== f && "filter" !== f && "metadata" !== f && "minzoom" !== f && "maxzoom" !== f && (0 === f.indexOf("paint.") ? Ye(d[f], p[f], o, _, f.slice(6), We.setPaintProperty) : t(d[f], p[f]) || o.push({ command: We.setLayerProperty, args: [_, f, p[f]] })); } else o.push({ command: We.removeLayer, args: [_] }), m = l[l.lastIndexOf(_) + 1], o.push({ command: We.addLayer, args: [p, m] }); }(s, i.layers, o); } catch (e) { console.warn("Unable to compute style diff:", e), o = [{ command: We.setStyle, args: [i] }]; } return o }(this.serialize(), i).filter((e => !(e.command in Yt))); if (0 === o.length) return !1; const r = o.filter((e => !(e.command in Ht))); if (r.length > 0) throw new Error(`Unimplemented: ${r.map((e=>e.command)).join(", ")}.`); return o.forEach((e => { "setTransition" !== e.command && "setProjection" !== e.command && this[e.command].apply(this, e.args); })), this.stylesheet = i, this._updateMapProjection(), !0 } addImage(t, i) { return this.getImage(t) ? this.fire(new e.ErrorEvent(new Error("An image with this name already exists."))) : (this.imageManager.addImage(t, i), this._afterImageUpdated(t), this) } updateImage(e, t) { this.imageManager.updateImage(e, t); } getImage(e) { return this.imageManager.getImage(e) } removeImage(t) { return this.getImage(t) ? (this.imageManager.removeImage(t), this._afterImageUpdated(t), this) : this.fire(new e.ErrorEvent(new Error("No image with this name exists."))) } _afterImageUpdated(t) { this._availableImages = this.imageManager.listImages(), this._changedImages[t] = !0, this._changed = !0, this.dispatcher.broadcast("setImages", this._availableImages), this.fire(new e.Event("data", { dataType: "style" })); } listImages() { return this._checkLoaded(), this._availableImages.slice() } addSource(t, i, o = {}) { if (this._checkLoaded(), void 0 !== this.getSource(t)) throw new Error("There is already a source with this ID"); if (!i.type) throw new Error(`The type property must be defined, but only the following properties were given: ${Object.keys(i).join(", ")}.`); if (["vector", "raster", "geojson", "video", "image"].indexOf(i.type) >= 0 && this._validate(e.validateSource, `sources.${t}`, i, null, o)) return; this.map && this.map._collectResourceTiming && (i.collectResourceTiming = !0); const r = Pe(t, i, this.dispatcher, this); r.setEventedParent(this, (() => ({ isSourceLoaded: this._isSourceCacheLoaded(t), source: r.serialize(), sourceId: t }))); const n = i => { const o = (i ? "symbol:" : "other:") + t, n = this._sourceCaches[o] = new e.SourceCache(o, r, i); (i ? this._symbolSourceCaches : this._otherSourceCaches)[t] = n, n.style = this, n.onAdd(this.map); }; n(!1), "vector" !== i.type && "geojson" !== i.type || n(!0), r.onAdd && r.onAdd(this.map), this._changed = !0; } removeSource(t) { this._checkLoaded(); const i = this.getSource(t); if (!i) throw new Error("There is no source with this ID"); for (const i in this._layers) if (this._layers[i].source === t) return this.fire(new e.ErrorEvent(new Error(`Source "${t}" cannot be removed while layer "${i}" is using it.`))); if (this.terrain && this.terrain.get().source === t) return this.fire(new e.ErrorEvent(new Error(`Source "${t}" cannot be removed while terrain is using it.`))); const o = this._getSourceCaches(t); for (const t of o) delete this._sourceCaches[t.id], delete this._updatedSources[t.id], t.fire(new e.Event("data", { sourceDataType: "metadata", dataType: "source", sourceId: t.getSource().id })), t.setEventedParent(null), t.clearTiles(); return delete this._otherSourceCaches[t], delete this._symbolSourceCaches[t], i.setEventedParent(null), i.onRemove && i.onRemove(this.map), this._changed = !0, this } setGeoJSONSourceData(e, t) { this._checkLoaded(), this.getSource(e).setData(t), this._changed = !0; } getSource(e) { const t = this._getSourceCache(e); return t && t.getSource() } _getSources() { const e = []; for (const t in this._otherSourceCaches) { const i = this._getSourceCache(t); i && e.push(i.getSource()); } return e } addLayer(t, i, o = {}) { this._checkLoaded(); const r = t.id; if (this.getLayer(r)) return void this.fire(new e.ErrorEvent(new Error(`Layer with id "${r}" already exists on this map`))); let n; if ("custom" === t.type) { if ($t(this, e.validateCustomStyleLayer(t))) return; n = e.createStyleLayer(t); } else { if ("object" == typeof t.source && (this.addSource(r, t.source), t = e.clone$1(t), t = e.extend(t, { source: r })), this._validate(e.validateLayer, `layers.${r}`, t, { arrayIndex: -1 }, o)) return; n = e.createStyleLayer(t), this._validateLayer(n), n.setEventedParent(this, { layer: { id: r } }), this._serializedLayers[n.id] = n.serialize(), this._updateLayerCount(n, !0); } const s = i ? this._order.indexOf(i) : this._order.length; if (i && -1 === s) return void this.fire(new e.ErrorEvent(new Error(`Layer with id "${i}" does not exist on this map.`))); this._order.splice(s, 0, r), this._layerOrderChanged = !0, this._layers[r] = n; const a = this._getLayerSourceCache(n); if (this._removedLayers[r] && n.source && a && "custom" !== n.type) { const e = this._removedLayers[r]; delete this._removedLayers[r], e.type !== n.type ? this._updatedSources[n.source] = "clear" : (this._updatedSources[n.source] = "reload", a.pause()); } this._updateLayer(n), n.onAdd && n.onAdd(this.map), this._updateDrapeFirstLayers(); } moveLayer(t, i) { if (this._checkLoaded(), this._changed = !0, !this._layers[t]) return void this.fire(new e.ErrorEvent(new Error(`The layer '${t}' does not exist in the map's style and cannot be moved.`))); if (t === i) return; const o = this._order.indexOf(t); this._order.splice(o, 1); const r = i ? this._order.indexOf(i) : this._order.length; i && -1 === r ? this.fire(new e.ErrorEvent(new Error(`Layer with id "${i}" does not exist on this map.`))) : (this._order.splice(r, 0, t), this._layerOrderChanged = !0, this._updateDrapeFirstLayers()); } removeLayer(t) { this._checkLoaded(); const i = this._layers[t]; if (!i) return void this.fire(new e.ErrorEvent(new Error(`The layer '${t}' does not exist in the map's style and cannot be removed.`))); i.setEventedParent(null), this._updateLayerCount(i, !1); const o = this._order.indexOf(t); this._order.splice(o, 1), this._layerOrderChanged = !0, this._changed = !0, this._removedLayers[t] = i, delete this._layers[t], delete this._serializedLayers[t], delete this._updatedLayers[t], delete this._updatedPaintProps[t], i.onRemove && i.onRemove(this.map), this._updateDrapeFirstLayers(); } getLayer(e) { return this._layers[e] } hasLayer(e) { return e in this._layers } hasLayerType(e) { for (const t in this._layers) if (this._layers[t].type === e) return !0; return !1 } setLayerZoomRange(t, i, o) { this._checkLoaded(); const r = this.getLayer(t); r ? r.minzoom === i && r.maxzoom === o || (null != i && (r.minzoom = i), null != o && (r.maxzoom = o), this._updateLayer(r)) : this.fire(new e.ErrorEvent(new Error(`The layer '${t}' does not exist in the map's style and cannot have zoom extent.`))); } setFilter(i, o, r = {}) { this._checkLoaded(); const n = this.getLayer(i); if (n) { if (!t(n.filter, o)) return null == o ? (n.filter = void 0, void this._updateLayer(n)) : void(this._validate(e.validateFilter, `layers.${n.id}.filter`, o, { layerType: n.type }, r) || (n.filter = e.clone$1(o), this._updateLayer(n))) } else this.fire(new e.ErrorEvent(new Error(`The layer '${i}' does not exist in the map's style and cannot be filtered.`))); } getFilter(t) { const i = this.getLayer(t); return i && e.clone$1(i.filter) } setLayoutProperty(i, o, r, n = {}) { this._checkLoaded(); const s = this.getLayer(i); s ? t(s.getLayoutProperty(o), r) || (s.setLayoutProperty(o, r, n), this._updateLayer(s)) : this.fire(new e.ErrorEvent(new Error(`The layer '${i}' does not exist in the map's style and cannot be styled.`))); } getLayoutProperty(t, i) { const o = this.getLayer(t); if (o) return o.getLayoutProperty(i); this.fire(new e.ErrorEvent(new Error(`The layer '${t}' does not exist in the map's style.`))); } setPaintProperty(i, o, r, n = {}) { this._checkLoaded(); const s = this.getLayer(i); s ? t(s.getPaintProperty(o), r) || (s.setPaintProperty(o, r, n) && this._updateLayer(s), this._changed = !0, this._updatedPaintProps[i] = !0) : this.fire(new e.ErrorEvent(new Error(`The layer '${i}' does not exist in the map's style and cannot be styled.`))); } getPaintProperty(e, t) { const i = this.getLayer(e); return i && i.getPaintProperty(t) } setFeatureState(t, i) { this._checkLoaded(); const o = t.source, r = t.sourceLayer, n = this.getSource(o); if (!n) return void this.fire(new e.ErrorEvent(new Error(`The source '${o}' does not exist in the map's style.`))); const s = n.type; if ("geojson" === s && r) return void this.fire(new e.ErrorEvent(new Error("GeoJSON sources cannot have a sourceLayer parameter."))); if ("vector" === s && !r) return void this.fire(new e.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types."))); void 0 === t.id && this.fire(new e.ErrorEvent(new Error("The feature id parameter must be provided."))); const a = this._getSourceCaches(o); for (const e of a) e.setFeatureState(r, t.id, i); } removeFeatureState(t, i) { this._checkLoaded(); const o = t.source, r = this.getSource(o); if (!r) return void this.fire(new e.ErrorEvent(new Error(`The source '${o}' does not exist in the map's style.`))); const n = r.type, s = "vector" === n ? t.sourceLayer : void 0; if ("vector" === n && !s) return void this.fire(new e.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types."))); if (i && "string" != typeof t.id && "number" != typeof t.id) return void this.fire(new e.ErrorEvent(new Error("A feature id is required to remove its specific state property."))); const a = this._getSourceCaches(o); for (const e of a) e.removeFeatureState(s, t.id, i); } getFeatureState(t) { this._checkLoaded(); const i = t.source, o = t.sourceLayer, r = this.getSource(i); if (r) { if ("vector" !== r.type || o) return void 0 === t.id && this.fire(new e.ErrorEvent(new Error("The feature id parameter must be provided."))), this._getSourceCaches(i)[0].getFeatureState(o, t.id); this.fire(new e.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types."))); } else this.fire(new e.ErrorEvent(new Error(`The source '${i}' does not exist in the map's style.`))); } getTransition() { return e.extend({ duration: 300, delay: 0 }, this.stylesheet && this.stylesheet.transition) } serialize() { const t = {}; for (const e in this._sourceCaches) { const i = this._sourceCaches[e].getSource(); t[i.id] || (t[i.id] = i.serialize()); } return e.filterObject({ version: this.stylesheet.version, name: this.stylesheet.name, metadata: this.stylesheet.metadata, light: this.stylesheet.light, terrain: this.getTerrain() || void 0, fog: this.stylesheet.fog, center: this.stylesheet.center, zoom: this.stylesheet.zoom, bearing: this.stylesheet.bearing, pitch: this.stylesheet.pitch, sprite: this.stylesheet.sprite, glyphs: this.stylesheet.glyphs, transition: this.stylesheet.transition, projection: this.stylesheet.projection, sources: t, layers: this._serializeLayers(this._order) }, (e => void 0 !== e)) } _updateLayer(e) { this._updatedLayers[e.id] = !0; const t = this._getLayerSourceCache(e); e.source && !this._updatedSources[e.source] && t && "raster" !== t.getSource().type && (this._updatedSources[e.source] = "reload", t.pause()), this._changed = !0, e.invalidateCompiledFilter(); } _flattenAndSortRenderedFeatures(e) { const t = e => "fill-extrusion" === this._layers[e].type, i = {}, o = []; for (let r = this._order.length - 1; r >= 0; r--) { const n = this._order[r]; if (t(n)) { i[n] = r; for (const t of e) { const e = t[n]; if (e) for (const t of e) o.push(t); } } } o.sort(((e, t) => t.intersectionZ - e.intersectionZ)); const r = []; for (let n = this._order.length - 1; n >= 0; n--) { const s = this._order[n]; if (t(s)) for (let e = o.length - 1; e >= 0; e--) { const t = o[e].feature; if (i[t.layer.id] < n) break; r.push(t), o.pop(); } else for (const t of e) { const e = t[s]; if (e) for (const t of e) r.push(t.feature); } } return r } queryRenderedFeatures(t, i, o) { i && i.filter && this._validate(e.validateFilter, "queryRenderedFeatures.filter", i.filter, null, i); const r = {}; if (i && i.layers) { if (!Array.isArray(i.layers)) return this.fire(new e.ErrorEvent(new Error("parameters.layers must be an Array."))), []; for (const t of i.layers) { const i = this._layers[t]; if (!i) return this.fire(new e.ErrorEvent(new Error(`The layer '${t}' does not exist in the map's style and cannot be queried for features.`))), []; r[i.source] = !0; } } const n = []; i.availableImages = this._availableImages; const s = i && i.layers ? i.layers.some((e => { const t = this.getLayer(e); return t && t.is3D() })) : this.has3DLayers(), a = R.createFromScreenPoints(t, o); for (const e in this._sourceCaches) { const t = this._sourceCaches[e].getSource().id; i.layers && !r[t] || n.push(Oe(this._sourceCaches[e], this._layers, this._serializedLayers, a, i, o, s, !!this.map._showQueryGeometry)); } return this.placement && n.push(function(e, t, i, o, r, n, s) { const a = {}, l = n.queryRenderedSymbols(o), c = []; for (const e of Object.keys(l).map(Number)) c.push(s[e]); c.sort(ke); for (const i of c) { const o = i.featureIndex.lookupSymbolFeatures(l[i.bucketInstanceId], t, i.bucketIndex, i.sourceLayerIndex, r.filter, r.layers, r.availableImages, e); for (const e in o) { const t = a[e] = a[e] || [], r = o[e]; r.sort(((e, t) => { const o = i.featureSortOrder; if (o) { const i = o.indexOf(e.featureIndex); return o.indexOf(t.featureIndex) - i } return t.featureIndex - e.featureIndex })); for (const e of r) t.push(e); } } for (const t in a) a[t].forEach((o => { const r = o.feature, n = i(e[t]); if (!n) return; const s = n.getFeatureState(r.layer["source-layer"], r.id); r.source = r.layer.source, r.layer["source-layer"] && (r.sourceLayer = r.layer["source-layer"]), r.state = s; })); return a }(this._layers, this._serializedLayers, this._getLayerSourceCache.bind(this), a.screenGeometry, i, this.placement.collisionIndex, this.placement.retainedQueryData)), this._flattenAndSortRenderedFeatures(n) } querySourceFeatures(t, i) { i && i.filter && this._validate(e.validateFilter, "querySourceFeatures.filter", i.filter, null, i); const o = this._getSourceCaches(t); let r = []; for (const e of o) r = r.concat(Be(e, i)); return r } addSourceType(e, t, i) { return Qt.getSourceType(e) ? i(new Error(`A source type called "${e}" already exists.`)) : (Qt.setSourceType(e, t), t.workerSourceURL ? void this.dispatcher.broadcast("loadWorkerSource", { name: e, url: t.workerSourceURL }, i) : i(null, null)) } getLight() { return this.light.getLight() } setLight(e, i = {}) { this._checkLoaded(); const o = this.light.getLight(); let r = !1; for (const i in e) if (!t(e[i], o[i])) { r = !0; break } if (!r) return; const n = this._setTransitionParameters({ duration: 300, delay: 0 }); this.light.setLight(e, i), this.light.updateTransitions(n); } getTerrain() { return this.terrain && 1 === this.terrain.drapeRenderMode ? this.terrain.get() : null } setTerrainForDraping() { this.setTerrain({ source: "", exaggeration: 0 }, 0); } setTerrain(i, o = 1) { if (this._checkLoaded(), !i) return delete this.terrain, delete this.stylesheet.terrain, this.dispatcher.broadcast("enableTerrain", !1), this._force3DLayerUpdate(), void(this._markersNeedUpdate = !0); let r = i; if (1 === o) { if ("object" == typeof r.source) { const t = "terrain-dem-src"; this.addSource(t, r.source), r = e.clone$1(r), r = e.extend(r, { source: t }); } if (this._validate(e.validateTerrain, "terrain", r)) return } if (!this.terrain || this.terrain && o !== this.terrain.drapeRenderMode) { if (!r) return; this._createTerrain(r, o); } else { const i = this.terrain, o = i.get(); for (const t of Object.keys(e.spec.terrain)) !r.hasOwnProperty(t) && e.spec.terrain[t].default && (r[t] = e.spec.terrain[t].default); for (const e in r) if (!t(r[e], o[e])) { i.set(r), this.stylesheet.terrain = r; const e = this._setTransitionParameters({ duration: 0 }); i.updateTransitions(e); break } } this._updateDrapeFirstLayers(), this._markersNeedUpdate = !0; } _createFog(e) { const t = this.fog = new A(e, this.map.transform); this.stylesheet.fog = e; const i = this._setTransitionParameters({ duration: 0 }); t.updateTransitions(i); } _updateMarkersOpacity() { 0 !== this.map._markers.length && this.map._requestDomTask((() => { for (const e of this.map._markers) e._evaluateOpacity(); })); } getFog() { return this.fog ? this.fog.get() : null } setFog(e) { if (this._checkLoaded(), !e) return delete this.fog, delete this.stylesheet.fog, void(this._markersNeedUpdate = !0); if (this.fog) { const i = this.fog, o = i.get(); 0 === Object.keys(e).length && i.set(e); for (const r in e) if (!t(e[r], o[r])) { i.set(e), this.stylesheet.fog = e; const t = this._setTransitionParameters({ duration: 0 }); i.updateTransitions(t); break } } else this._createFog(e); this._markersNeedUpdate = !0; } _setTransitionParameters(t) { return { now: e.exported.now(), transition: e.extend(t, this.stylesheet.transition) } } _updateDrapeFirstLayers() { if (!this.map._optimizeForTerrain || !this.terrain) return; const e = this._order.filter((e => this.isLayerDraped(this._layers[e]))), t = this._order.filter((e => !this.isLayerDraped(this._layers[e]))); this._drapedFirstOrder = [], this._drapedFirstOrder.push(...e), this._drapedFirstOrder.push(...t); } _createTerrain(e, t) { const i = this.terrain = new M(e, t); this.stylesheet.terrain = e, this.dispatcher.broadcast("enableTerrain", !this.terrainSetForDrapingOnly()), this._force3DLayerUpdate(); const o = this._setTransitionParameters({ duration: 0 }); i.updateTransitions(o); } _force3DLayerUpdate() { for (const e in this._layers) { const t = this._layers[e]; "fill-extrusion" === t.type && this._updateLayer(t); } } _forceSymbolLayerUpdate() { for (const e in this._layers) { const t = this._layers[e]; "symbol" === t.type && this._updateLayer(t); } } _validate(t, i, o, r, n = {}) { return (!n || !1 !== n.validate) && $t(this, t.call(e.validateStyle, e.extend({ key: i, style: this.serialize(), value: o, styleSpec: e.spec }, r))) } _remove() { this._request && (this._request.cancel(), this._request = null), this._spriteRequest && (this._spriteRequest.cancel(), this._spriteRequest = null), e.evented.off("pluginStateChange", this._rtlTextPluginCallback); for (const e in this._layers) this._layers[e].setEventedParent(null); for (const e in this._sourceCaches) this._sourceCaches[e].clearTiles(), this._sourceCaches[e].setEventedParent(null); this.imageManager.setEventedParent(null), this.setEventedParent(null), this.dispatcher.remove(); } _clearSource(e) { const t = this._getSourceCaches(e); for (const e of t) e.clearTiles(); } _reloadSource(e) { const t = this._getSourceCaches(e); for (const e of t) e.resume(), e.reload(); } _reloadSources() { for (const e of this._getSources()) e.reload && e.reload(); } _updateSources(e) { for (const t in this._sourceCaches) this._sourceCaches[t].update(e); } _generateCollisionBoxes() { for (const e in this._sourceCaches) { const t = this._sourceCaches[e]; t.resume(), t.reload(); } } _updatePlacement(t, i, o, r, n = !1) { let s = !1, a = !1; const l = {}; for (const e of this._order) { const i = this._layers[e]; if ("symbol" !== i.type) continue; if (!l[i.source]) { const e = this._getLayerSourceCache(i); if (!e) continue; l[i.source] = e.getRenderableIds(!0).map((t => e.getTileByID(t))).sort(((e, t) => t.tileID.overscaledZ - e.tileID.overscaledZ || (e.tileID.isLessThan(t.tileID) ? -1 : 1))); } const o = this.crossTileSymbolIndex.addLayer(i, l[i.source], t.center.lng, t.projection); s = s || o; } if (this.crossTileSymbolIndex.pruneUnusedLayers(this._order), n = n || this._layerOrderChanged || 0 === o, this._layerOrderChanged && this.fire(new e.Event("neworder")), (n || !this.pauseablePlacement || this.pauseablePlacement.isDone() && !this.placement.stillRecent(e.exported.now(), t.zoom)) && (this.pauseablePlacement = new jt(t, this._order, n, i, o, r, this.placement, this.fog && t.projection.supportsFog ? this.fog.state : null), this._layerOrderChanged = !1), this.pauseablePlacement.isDone() ? this.placement.setStale() : (this.pauseablePlacement.continuePlacement(this._order, this._layers, l), this.pauseablePlacement.isDone() && (this.placement = this.pauseablePlacement.commit(e.exported.now()), a = !0), s && this.pauseablePlacement.placement.setStale()), a || s) for (const e of this._order) { const t = this._layers[e]; "symbol" === t.type && this.placement.updateLayerOpacities(t, l[t.source]); } return !this.pauseablePlacement.isDone() || this.placement.hasTransitions(e.exported.now()) } _releaseSymbolFadeTiles() { for (const e in this._sourceCaches) this._sourceCaches[e].releaseSymbolFadeTiles(); } getImages(e, t, i) { this.imageManager.getImages(t.icons, i), this._updateTilesForChangedImages(); const o = e => { e && e.setDependencies(t.tileID.key, t.type, t.icons); }; o(this._otherSourceCaches[t.source]), o(this._symbolSourceCaches[t.source]); } getGlyphs(e, t, i) { this.glyphManager.getGlyphs(t.stacks, i); } getResource(t, i, o) { return e.makeRequest(i, o) } _getSourceCache(e) { return this._otherSourceCaches[e] } _getLayerSourceCache(e) { return "symbol" === e.type ? this._symbolSourceCaches[e.source] : this._otherSourceCaches[e.source] } _getSourceCaches(e) { const t = []; return this._otherSourceCaches[e] && t.push(this._otherSourceCaches[e]), this._symbolSourceCaches[e] && t.push(this._symbolSourceCaches[e]), t } _isSourceCacheLoaded(t) { const i = this._getSourceCaches(t); return 0 === i.length ? (this.fire(new e.ErrorEvent(new Error(`There is no source with ID '${t}'`))), !1) : i.every((e => e.loaded())) } has3DLayers() { return this._num3DLayers > 0 } hasSymbolLayers() { return this._numSymbolLayers > 0 } hasCircleLayers() { return this._numCircleLayers > 0 } _clearWorkerCaches() { this.dispatcher.broadcast("clearCaches"); } destroy() { this._clearWorkerCaches(), this.terrainSetForDrapingOnly() && (delete this.terrain, delete this.stylesheet.terrain); } } Qt.getSourceType = function(e) { return ze[e] }, Qt.setSourceType = function(e, t) { ze[e] = t; }, Qt.registerForPluginStateChange = e.registerForPluginStateChange; var ei = "\n#define EPSILON 0.0000001\n#define PI 3.141592653589793\n#define EXTENT 8192.0\n#define HALF_PI PI/2.0\n#define QUARTER_PI PI/4.0\n#define RAD_TO_DEG 180.0/PI\n#define DEG_TO_RAD PI/180.0\n#define GLOBE_RADIUS EXTENT/PI/2.0", ti = "attribute highp vec3 a_pos_3f;uniform lowp mat4 u_matrix;varying highp vec3 v_uv;void main() {const mat3 half_neg_pi_around_x=mat3(1.0,0.0, 0.0,0.0,0.0,-1.0,0.0,1.0, 0.0);v_uv=half_neg_pi_around_x*a_pos_3f;vec4 pos=u_matrix*vec4(a_pos_3f,1.0);gl_Position=pos.xyww;}", ii = "\n#define ELEVATION_SCALE 7.0\n#define ELEVATION_OFFSET 450.0\n#ifdef PROJECTION_GLOBE_VIEW\nuniform vec3 u_tile_tl_up;uniform vec3 u_tile_tr_up;uniform vec3 u_tile_br_up;uniform vec3 u_tile_bl_up;uniform float u_tile_up_scale;vec3 elevationVector(vec2 pos) {vec2 uv=pos/EXTENT;vec3 up=normalize(mix(\nmix(u_tile_tl_up,u_tile_tr_up,uv.xxx),mix(u_tile_bl_up,u_tile_br_up,uv.xxx),uv.yyy));return up*u_tile_up_scale;}\n#else\nvec3 elevationVector(vec2 pos) { return vec3(0,0,1); }\n#endif\nconst float skirtOffset=24575.0;vec3 decomposeToPosAndSkirt(vec2 posWithComposedSkirt)\n{float skirt=float(posWithComposedSkirt.x >=skirtOffset);vec2 pos=posWithComposedSkirt-vec2(skirt*skirtOffset,0.0);return vec3(pos,skirt);}\n#ifdef TERRAIN\n#ifdef TERRAIN_DEM_FLOAT_FORMAT\nuniform highp sampler2D u_dem;uniform highp sampler2D u_dem_prev;\n#else\nuniform sampler2D u_dem;uniform sampler2D u_dem_prev;\n#endif\nuniform vec4 u_dem_unpack;uniform vec2 u_dem_tl;uniform vec2 u_dem_tl_prev;uniform float u_dem_scale;uniform float u_dem_scale_prev;uniform float u_dem_size;uniform float u_dem_lerp;uniform float u_exaggeration;uniform float u_meter_to_dem;uniform mat4 u_label_plane_matrix_inv;uniform sampler2D u_depth;uniform vec2 u_depth_size_inv;vec4 tileUvToDemSample(vec2 uv,float dem_size,float dem_scale,vec2 dem_tl) {vec2 pos=dem_size*(uv*dem_scale+dem_tl)+1.0;vec2 f=fract(pos);return vec4((pos-f+0.5)/(dem_size+2.0),f);}float decodeElevation(vec4 v) {return dot(vec4(v.xyz*255.0,-1.0),u_dem_unpack);}float currentElevation(vec2 apos) {\n#ifdef TERRAIN_DEM_FLOAT_FORMAT\nvec2 pos=(u_dem_size*(apos/8192.0*u_dem_scale+u_dem_tl)+1.5)/(u_dem_size+2.0);return u_exaggeration*texture2D(u_dem,pos).a;\n#else\nfloat dd=1.0/(u_dem_size+2.0);vec4 r=tileUvToDemSample(apos/8192.0,u_dem_size,u_dem_scale,u_dem_tl);vec2 pos=r.xy;vec2 f=r.zw;float tl=decodeElevation(texture2D(u_dem,pos));\n#ifdef TERRAIN_DEM_NEAREST_FILTER\nreturn u_exaggeration*tl;\n#endif\nfloat tr=decodeElevation(texture2D(u_dem,pos+vec2(dd,0.0)));float bl=decodeElevation(texture2D(u_dem,pos+vec2(0.0,dd)));float br=decodeElevation(texture2D(u_dem,pos+vec2(dd,dd)));return u_exaggeration*mix(mix(tl,tr,f.x),mix(bl,br,f.x),f.y);\n#endif\n}float prevElevation(vec2 apos) {\n#ifdef TERRAIN_DEM_FLOAT_FORMAT\nvec2 pos=(u_dem_size*(apos/8192.0*u_dem_scale_prev+u_dem_tl_prev)+1.5)/(u_dem_size+2.0);return u_exaggeration*texture2D(u_dem_prev,pos).a;\n#else\nfloat dd=1.0/(u_dem_size+2.0);vec4 r=tileUvToDemSample(apos/8192.0,u_dem_size,u_dem_scale_prev,u_dem_tl_prev);vec2 pos=r.xy;vec2 f=r.zw;float tl=decodeElevation(texture2D(u_dem_prev,pos));float tr=decodeElevation(texture2D(u_dem_prev,pos+vec2(dd,0.0)));float bl=decodeElevation(texture2D(u_dem_prev,pos+vec2(0.0,dd)));float br=decodeElevation(texture2D(u_dem_prev,pos+vec2(dd,dd)));return u_exaggeration*mix(mix(tl,tr,f.x),mix(bl,br,f.x),f.y);\n#endif\n}\n#ifdef TERRAIN_VERTEX_MORPHING\nfloat elevation(vec2 apos) {\n#ifdef ZERO_EXAGGERATION\nreturn 0.0;\n#endif\nfloat nextElevation=currentElevation(apos);float prevElevation=prevElevation(apos);return mix(prevElevation,nextElevation,u_dem_lerp);}\n#else\nfloat elevation(vec2 apos) {\n#ifdef ZERO_EXAGGERATION\nreturn 0.0;\n#endif\nreturn currentElevation(apos);}\n#endif\nhighp float unpack_depth(highp vec4 rgba_depth)\n{const highp vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(rgba_depth,bit_shift)*2.0-1.0;}bool isOccluded(vec4 frag) {vec3 coord=frag.xyz/frag.w;float depth=unpack_depth(texture2D(u_depth,(coord.xy+1.0)*0.5));return coord.z > depth+0.0005;}float occlusionFade(vec4 frag) {vec3 coord=frag.xyz/frag.w;vec3 df=vec3(5.0*u_depth_size_inv,0.0);vec2 uv=0.5*coord.xy+0.5;vec4 depth=vec4(\nunpack_depth(texture2D(u_depth,uv-df.xz)),unpack_depth(texture2D(u_depth,uv+df.xz)),unpack_depth(texture2D(u_depth,uv-df.zy)),unpack_depth(texture2D(u_depth,uv+df.zy))\n);return dot(vec4(0.25),vec4(1.0)-clamp(300.0*(vec4(coord.z-0.001)-depth),0.0,1.0));}vec4 fourSample(vec2 pos,vec2 off) {\n#ifdef TERRAIN_DEM_FLOAT_FORMAT\nfloat tl=texture2D(u_dem,pos).a;float tr=texture2D(u_dem,pos+vec2(off.x,0.0)).a;float bl=texture2D(u_dem,pos+vec2(0.0,off.y)).a;float br=texture2D(u_dem,pos+off).a;\n#else\nvec4 demtl=vec4(texture2D(u_dem,pos).xyz*255.0,-1.0);float tl=dot(demtl,u_dem_unpack);vec4 demtr=vec4(texture2D(u_dem,pos+vec2(off.x,0.0)).xyz*255.0,-1.0);float tr=dot(demtr,u_dem_unpack);vec4 dembl=vec4(texture2D(u_dem,pos+vec2(0.0,off.y)).xyz*255.0,-1.0);float bl=dot(dembl,u_dem_unpack);vec4 dembr=vec4(texture2D(u_dem,pos+off).xyz*255.0,-1.0);float br=dot(dembr,u_dem_unpack);\n#endif\nreturn vec4(tl,tr,bl,br);}float flatElevation(vec2 pack) {vec2 apos=floor(pack/8.0);vec2 span=10.0*(pack-apos*8.0);vec2 uvTex=(apos-vec2(1.0,1.0))/8190.0;float size=u_dem_size+2.0;float dd=1.0/size;vec2 pos=u_dem_size*(uvTex*u_dem_scale+u_dem_tl)+1.0;vec2 f=fract(pos);pos=(pos-f+0.5)*dd;vec4 h=fourSample(pos,vec2(dd));float z=mix(mix(h.x,h.y,f.x),mix(h.z,h.w,f.x),f.y);vec2 w=floor(0.5*(span*u_meter_to_dem-1.0));vec2 d=dd*w;h=fourSample(pos-d,2.0*d+vec2(dd));vec4 diff=abs(h.xzxy-h.ywzw);vec2 slope=min(vec2(0.25),u_meter_to_dem*0.5*(diff.xz+diff.yw)/(2.0*w+vec2(1.0)));vec2 fix=slope*span;float base=z+max(fix.x,fix.y);return u_exaggeration*base;}float elevationFromUint16(float word) {return u_exaggeration*(word/ELEVATION_SCALE-ELEVATION_OFFSET);}\n#else\nfloat elevation(vec2 pos) { return 0.0; }bool isOccluded(vec4 frag) { return false; }float occlusionFade(vec4 frag) { return 1.0; }\n#endif", oi = "#ifdef FOG\nuniform mediump vec4 u_fog_color;uniform mediump vec2 u_fog_range;uniform mediump float u_fog_horizon_blend;uniform mediump mat4 u_fog_matrix;varying vec3 v_fog_pos;float fog_range(float depth) {return (depth-u_fog_range[0])/(u_fog_range[1]-u_fog_range[0]);}float fog_horizon_blending(vec3 camera_dir) {float t=max(0.0,camera_dir.z/u_fog_horizon_blend);return u_fog_color.a*exp(-3.0*t*t);}float fog_opacity(float t) {const float decay=6.0;float falloff=1.0-min(1.0,exp(-decay*t));falloff*=falloff*falloff;return u_fog_color.a*min(1.0,1.00747*falloff);}vec3 fog_position(vec3 pos) {return (u_fog_matrix*vec4(pos,1.0)).xyz;}vec3 fog_position(vec2 pos) {return fog_position(vec3(pos,0.0));}float fog(vec3 pos) {float depth=length(pos);float opacity=fog_opacity(fog_range(depth));return opacity*fog_horizon_blending(pos/depth);}\n#endif", ri = "#ifdef FOG\nuniform mediump vec4 u_fog_color;uniform mediump vec2 u_fog_range;uniform mediump float u_fog_horizon_blend;uniform mediump float u_fog_temporal_offset;varying vec3 v_fog_pos;uniform highp vec3 u_frustum_tl;uniform highp vec3 u_frustum_tr;uniform highp vec3 u_frustum_br;uniform highp vec3 u_frustum_bl;uniform highp vec3 u_globe_pos;uniform highp float u_globe_radius;uniform highp vec2 u_viewport;uniform float u_globe_transition;uniform int u_is_globe;float fog_range(float depth) {return (depth-u_fog_range[0])/(u_fog_range[1]-u_fog_range[0]);}float fog_horizon_blending(vec3 camera_dir) {float t=max(0.0,camera_dir.z/u_fog_horizon_blend);return u_fog_color.a*exp(-3.0*t*t);}float fog_opacity(float t) {const float decay=6.0;float falloff=1.0-min(1.0,exp(-decay*t));falloff*=falloff*falloff;return u_fog_color.a*min(1.0,1.00747*falloff);}float globe_glow_progress() {highp vec2 uv=gl_FragCoord.xy/u_viewport;highp vec3 ray_dir=mix(\nmix(u_frustum_tl,u_frustum_tr,uv.x),mix(u_frustum_bl,u_frustum_br,uv.x),1.0-uv.y);highp vec3 dir=normalize(ray_dir);highp vec3 closest_point=dot(u_globe_pos,dir)*dir;highp float sdf=length(closest_point-u_globe_pos)/u_globe_radius;return sdf+PI*0.5;}float fog_opacity(vec3 pos) {float depth=length(pos);return fog_opacity(fog_range(depth));}vec3 fog_apply(vec3 color,vec3 pos) {float depth=length(pos);float opacity;if (u_is_globe==1) {float glow_progress=globe_glow_progress();float t=mix(glow_progress,depth,u_globe_transition);opacity=fog_opacity(fog_range(t));} else {opacity=fog_opacity(fog_range(depth));opacity*=fog_horizon_blending(pos/depth);}return mix(color,u_fog_color.rgb,opacity);}vec4 fog_apply_from_vert(vec4 color,float fog_opac) {float alpha=EPSILON+color.a;color.rgb=mix(color.rgb/alpha,u_fog_color.rgb,fog_opac)*alpha;return color;}vec3 fog_apply_sky_gradient(vec3 camera_ray,vec3 sky_color) {float horizon_blend=fog_horizon_blending(normalize(camera_ray));return mix(sky_color,u_fog_color.rgb,horizon_blend);}vec4 fog_apply_premultiplied(vec4 color,vec3 pos) {float alpha=EPSILON+color.a;color.rgb=fog_apply(color.rgb/alpha,pos)*alpha;return color;}vec3 fog_dither(vec3 color) {vec2 dither_seed=gl_FragCoord.xy+u_fog_temporal_offset;return dither(color,dither_seed);}vec4 fog_dither(vec4 color) {return vec4(fog_dither(color.rgb),color.a);}\n#endif"; let ni = {}, si = {}; const ai = []; _i(ei, ai), _i(ii, ai), _i(oi, ai), _i(ri, ai), ni = di("", ii), si = di(ri, oi); const li = di("\n#if __VERSION__ >=300\n#define varying in\n#define gl_FragColor glFragColor\n#define texture2D texture\n#define textureCube texture\nout vec4 glFragColor;\n#endif\nhighp vec3 hash(highp vec2 p) {highp vec3 p3=fract(p.xyx*vec3(443.8975,397.2973,491.1871));p3+=dot(p3,p3.yxz+19.19);return fract((p3.xxy+p3.yzz)*p3.zyx);}vec3 dither(vec3 color,highp vec2 seed) {vec3 rnd=hash(seed)+hash(seed+0.59374)-0.5;return color+rnd/255.0;}highp float unpack_depth(highp vec4 rgba_depth)\n{const highp vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(rgba_depth,bit_shift)*2.0-1.0;}highp vec4 pack_depth(highp float ndc_z) {highp float depth=ndc_z*0.5+0.5;const highp vec4 bit_shift=vec4(255.0*255.0*255.0,255.0*255.0,255.0,1.0);const highp vec4 bit_mask =vec4(0.0,1.0/255.0,1.0/255.0,1.0/255.0);highp vec4 res=fract(depth*bit_shift);res-=res.xxyz*bit_mask;return res;}", "\n#if __VERSION__ >=300\n#define attribute in\n#define varying out\n#define texture2D texture\n#endif\nfloat wrap(float n,float min,float max) {float d=max-min;float w=mod(mod(n-min,d)+d,d)+min;return (w==min) ? max : w;}\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 mercator_tile_position(mat4 matrix,vec2 tile_anchor,vec3 tile_id,vec2 mercator_center) {\n#ifndef PROJECTED_POS_ON_VIEWPORT\nfloat tiles=tile_id.z;vec2 mercator=(tile_anchor/EXTENT+tile_id.xy)/tiles;mercator-=mercator_center;mercator.x=wrap(mercator.x,-0.5,0.5);vec4 mercator_tile=vec4(mercator.xy*EXTENT,EXTENT/(2.0*PI),1.0);mercator_tile=matrix*mercator_tile;return mercator_tile.xyz;\n#else\nreturn vec3(0.0);\n#endif\n}vec3 mix_globe_mercator(vec3 globe,vec3 mercator,float t) {return mix(globe,mercator,t);}mat3 globe_mercator_surface_vectors(vec3 pos_normal,vec3 up_dir,float zoom_transition) {vec3 normal=zoom_transition==0.0 ? pos_normal : normalize(mix(pos_normal,up_dir,zoom_transition));vec3 xAxis=normalize(vec3(normal.z,0.0,-normal.x));vec3 yAxis=normalize(cross(normal,xAxis));return mat3(xAxis,yAxis,normal);}\n#endif\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(\nunpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}const vec4 AWAY=vec4(-1000.0,-1000.0,-1000.0,1);//Normalized device coordinate that is not rendered."), ci = ei, hi = "\n#ifdef GL_ES\nprecision mediump float;\n#else\n\n#if !defined(lowp)\n#define lowp\n#endif\n\n#if !defined(mediump)\n#define mediump\n#endif\n\n#if !defined(highp)\n#define highp\n#endif\n\n#endif"; var ui = { background: di("uniform vec4 u_color;uniform float u_opacity;\n#ifdef LIGHTING_3D_MODE\nvarying vec4 v_color;\n#endif\nvoid main() {vec4 out_color;\n#ifdef LIGHTING_3D_MODE\nout_color=v_color;\n#else\nout_color=u_color;\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));\n#endif\ngl_FragColor=out_color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "attribute vec2 a_pos;uniform mat4 u_matrix;\n#ifdef LIGHTING_3D_MODE\nuniform vec4 u_color;varying vec4 v_color;\n#endif\nvoid main() {gl_Position=u_matrix*vec4(a_pos,0,1);\n#ifdef LIGHTING_3D_MODE\nv_color=apply_lighting(u_color);\n#endif\n#ifdef FOG\nv_fog_pos=fog_position(a_pos);\n#endif\n}"), backgroundPattern: di("uniform vec2 u_pattern_tl;uniform vec2 u_pattern_br;uniform vec2 u_texsize;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos;void main() {vec2 imagecoord=mod(v_pos,1.0);vec2 pos=mix(u_pattern_tl/u_texsize,u_pattern_br/u_texsize,imagecoord);vec4 out_color=texture2D(u_image,pos);\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color);\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));\n#endif\ngl_FragColor=out_color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform vec2 u_pattern_size;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_pattern_size,u_tile_units_to_pixels,a_pos);\n#ifdef FOG\nv_fog_pos=fog_position(a_pos);\n#endif\n}"), circle: di("varying vec3 v_data;varying float v_visibility;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(\nantialiased_blur,0.0,extrude_length-radius/(radius+stroke_width)\n);vec4 out_color=mix(color*opacity,stroke_color*stroke_opacity,color_t);\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color);\n#endif\n#ifdef FOG\nout_color=fog_apply_premultiplied(out_color,v_fog_pos);\n#endif\ngl_FragColor=out_color*(v_visibility*opacity_t);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "#define NUM_VISIBILITY_RINGS 2\n#define INV_SQRT2 0.70710678\n#define ELEVATION_BIAS 0.0001\n#define NUM_SAMPLES_PER_RING 16\nuniform mat4 u_matrix;uniform mat2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nattribute vec3 a_pos_3;attribute vec3 a_pos_normal_3;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_tile_id;uniform float u_zoom_transition;uniform vec3 u_up_dir;\n#endif\nvarying vec3 v_data;varying float v_visibility;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvec2 calc_offset(vec2 extrusion,float radius,float stroke_width, float view_scale) {return extrusion*(radius+stroke_width)*u_extrude_scale*view_scale;}float cantilevered_elevation(vec2 pos,float radius,float stroke_width,float view_scale) {vec2 c1=pos+calc_offset(vec2(-1,-1),radius,stroke_width,view_scale);vec2 c2=pos+calc_offset(vec2(1,-1),radius,stroke_width,view_scale);vec2 c3=pos+calc_offset(vec2(1,1),radius,stroke_width,view_scale);vec2 c4=pos+calc_offset(vec2(-1,1),radius,stroke_width,view_scale);float h1=elevation(c1)+ELEVATION_BIAS;float h2=elevation(c2)+ELEVATION_BIAS;float h3=elevation(c3)+ELEVATION_BIAS;float h4=elevation(c4)+ELEVATION_BIAS;return max(h4,max(h3,max(h1,h2)));}float circle_elevation(vec2 pos) {\n#if defined(TERRAIN)\nreturn elevation(pos)+ELEVATION_BIAS;\n#else\nreturn 0.0;\n#endif\n}vec4 project_vertex(vec2 extrusion,vec4 world_center,vec4 projected_center,float radius,float stroke_width, float view_scale,mat3 surface_vectors) {vec2 sample_offset=calc_offset(extrusion,radius,stroke_width,view_scale);\n#ifdef PITCH_WITH_MAP\n#ifdef PROJECTION_GLOBE_VIEW\nreturn u_matrix*( world_center+vec4(sample_offset.x*surface_vectors[0]+sample_offset.y*surface_vectors[1],0) );\n#else\nreturn u_matrix*( world_center+vec4(sample_offset,0,0) );\n#endif\n#else\nreturn projected_center+vec4(sample_offset,0,0);\n#endif\n}float get_sample_step() {\n#ifdef PITCH_WITH_MAP\nreturn 2.0*PI/float(NUM_SAMPLES_PER_RING);\n#else\nreturn PI/float(NUM_SAMPLES_PER_RING);\n#endif\n}void main(void) {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);vec4 world_center;mat3 surface_vectors;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 pos_normal_3=a_pos_normal_3/16384.0;surface_vectors=globe_mercator_surface_vectors(pos_normal_3,u_up_dir,u_zoom_transition);vec3 surface_extrusion=extrude.x*surface_vectors[0]+extrude.y*surface_vectors[1];vec3 globe_elevation=elevationVector(circle_center)*circle_elevation(circle_center);vec3 globe_pos=a_pos_3+surface_extrusion+globe_elevation;vec3 mercator_elevation=u_up_dir*u_tile_up_scale*circle_elevation(circle_center);vec3 merc_pos=mercator_tile_position(u_inv_rot_matrix,circle_center,u_tile_id,u_merc_center)+surface_extrusion+mercator_elevation;vec3 pos=mix_globe_mercator(globe_pos,merc_pos,u_zoom_transition);world_center=vec4(pos,1);\n#else \nsurface_vectors=mat3(1.0);float height=circle_elevation(circle_center);world_center=vec4(circle_center,height,1);\n#endif\nvec4 projected_center=u_matrix*world_center;float view_scale=0.0;\n#ifdef PITCH_WITH_MAP\n#ifdef SCALE_WITH_MAP\nview_scale=1.0;\n#else\nview_scale=projected_center.w/u_camera_to_center_distance;\n#endif\n#else\n#ifdef SCALE_WITH_MAP\nview_scale=u_camera_to_center_distance;\n#else\nview_scale=projected_center.w;\n#endif\n#endif\ngl_Position=project_vertex(extrude,world_center,projected_center,radius,stroke_width,view_scale,surface_vectors);float visibility=0.0;\n#ifdef TERRAIN\nfloat step=get_sample_step();vec4 occlusion_world_center;vec4 occlusion_projected_center;\n#ifdef PITCH_WITH_MAP\nfloat cantilevered_height=cantilevered_elevation(circle_center,radius,stroke_width,view_scale);occlusion_world_center=vec4(circle_center,cantilevered_height,1);occlusion_projected_center=u_matrix*occlusion_world_center;\n#else\nocclusion_world_center=world_center;occlusion_projected_center=projected_center;\n#endif\nfor(int ring=0; ring < NUM_VISIBILITY_RINGS; ring++) {float scale=(float(ring)+1.0)/float(NUM_VISIBILITY_RINGS);for(int i=0; i < NUM_SAMPLES_PER_RING; i++) {vec2 extrusion=vec2(cos(step*float(i)),-sin(step*float(i)))*scale;vec4 frag_pos=project_vertex(extrusion,occlusion_world_center,occlusion_projected_center,radius,stroke_width,view_scale,surface_vectors);visibility+=float(!isOccluded(frag_pos));}}visibility/=float(NUM_VISIBILITY_RINGS)*float(NUM_SAMPLES_PER_RING);\n#else\nvisibility=1.0;\n#endif\n#ifdef PROJECTION_GLOBE_VIEW\nvisibility=1.0;\n#endif\nv_visibility=visibility;lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);\n#ifdef FOG\nv_fog_pos=fog_position(world_center.xyz);\n#endif\n}"), clippingMask: di("void main() {gl_FragColor=vec4(1.0);}", "attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"), heatmap: di("uniform highp float u_intensity;varying vec2 v_extrude;\n#pragma mapbox: define highp float weight\n#define GAUSS_COEF 0.3989422804014327\nvoid main() {\n#pragma mapbox: initialize highp float weight\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\n#ifdef FOG\nif (u_is_globe==0) {gl_FragColor.r*=pow(1.0-fog_opacity(v_fog_pos),2.0);}\n#endif\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nattribute vec3 a_pos_3;attribute vec3 a_pos_normal_3;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_tile_id;uniform float u_zoom_transition;uniform vec3 u_up_dir;\n#endif\nvarying vec2 v_extrude;\n#pragma mapbox: define highp float weight\n#pragma mapbox: define mediump float radius\nconst highp float ZERO=1.0/255.0/16.0;\n#define GAUSS_COEF 0.3989422804014327\nvoid main(void) {\n#pragma mapbox: initialize highp float weight\n#pragma mapbox: initialize mediump float radius\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec2 tilePos=floor(a_pos*0.5);vec3 pos;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 pos_normal_3=a_pos_normal_3/16384.0;mat3 surface_vectors=globe_mercator_surface_vectors(pos_normal_3,u_up_dir,u_zoom_transition);vec3 surface_extrusion=extrude.x*surface_vectors[0]+extrude.y*surface_vectors[1];vec3 globe_elevation=elevationVector(tilePos)*elevation(tilePos);vec3 globe_pos=a_pos_3+surface_extrusion+globe_elevation;vec3 mercator_elevation=u_up_dir*u_tile_up_scale*elevation(tilePos);vec3 merc_pos=mercator_tile_position(u_inv_rot_matrix,tilePos,u_tile_id,u_merc_center)+surface_extrusion+mercator_elevation;pos=mix_globe_mercator(globe_pos,merc_pos,u_zoom_transition);\n#else\npos=vec3(tilePos+extrude,elevation(tilePos));\n#endif\ngl_Position=u_matrix*vec4(pos,1);\n#ifdef FOG\nv_fog_pos=fog_position(pos);\n#endif\n}"), heatmapTexture: di("uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(0.0);\n#endif\n}", "attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=vec4(a_pos,0,1);v_pos=a_pos*0.5+0.5;}"), collisionBox: di("varying float v_placed;varying float v_notUsed;void main() {vec4 red =vec4(1.0,0.0,0.0,1.0);vec4 blue=vec4(0.0,0.0,1.0,0.5);gl_FragColor =mix(red,blue,step(0.5,v_placed))*0.5;gl_FragColor*=mix(1.0,0.1,step(0.5,v_notUsed));}", "attribute vec3 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;attribute float a_size_scale;attribute vec2 a_padding;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_pos+elevationVector(a_anchor_pos)*elevation(a_anchor_pos),1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(\n0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,1.5);gl_Position=projectedPoint;gl_Position.xy+=(a_extrude*a_size_scale+a_shift+a_padding)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}"), collisionCircle: di("varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;void main() {float alpha=0.5*min(v_perspective_ratio,1.0);float stroke_radius=0.9*max(v_perspective_ratio,1.0);float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);gl_FragColor=color*alpha*opacity_t;}", "attribute vec2 a_pos_2f;attribute float a_radius;attribute vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart=u_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd =u_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/=rayStart.w;rayEnd.xyz /=rayEnd.w;highp float t=(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos=a_pos_2f;float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(\nmix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;vec3 tilePos=toTilePosition(quadCenterPos);vec4 clipPos=u_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance=clipPos.w;highp float collision_perspective_ratio=clamp(\n0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_perspective_ratio=collision_perspective_ratio;v_collision=collision;gl_Position=vec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}"), debug: di("uniform highp vec4 u_color;uniform sampler2D u_overlay;varying vec2 v_uv;void main() {vec4 overlay_color=texture2D(u_overlay,v_uv);gl_FragColor=mix(u_color,overlay_color,overlay_color.a);}", "attribute vec2 a_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nattribute vec3 a_pos_3;\n#endif\nvarying vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {float h=elevation(a_pos);v_uv=a_pos/8192.0;\n#ifdef PROJECTION_GLOBE_VIEW\ngl_Position=u_matrix*vec4(a_pos_3+elevationVector(a_pos)*h,1);\n#else\ngl_Position=u_matrix*vec4(a_pos*u_overlay_scale,h,1);\n#endif\n}"), fill: di("#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\nvec4 out_color=color;\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color);\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));\n#endif\ngl_FragColor=out_color*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "attribute vec2 a_pos;uniform mat4 u_matrix;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);\n#ifdef FOG\nv_fog_pos=fog_position(a_pos);\n#endif\n}"), fillOutline: di("varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);vec4 out_color=outline_color;\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color);\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));\n#endif\ngl_FragColor=out_color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;\n#ifdef FOG\nv_fog_pos=fog_position(a_pos);\n#endif\n}"), fillOutlinePattern: di("uniform vec2 u_texsize;uniform sampler2D u_image;varying vec2 v_pos;varying vec2 v_pos_world;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern\nvec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec2 imagecoord=mod(v_pos,1.0);vec2 pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,imagecoord);float dist=length(v_pos_world-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);vec4 out_color=texture2D(u_image,pos);\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color);\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));\n#endif\ngl_FragColor=out_color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos;varying vec2 v_pos_world;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern\n#pragma mapbox: define lowp float pixel_ratio\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern\n#pragma mapbox: initialize lowp float pixel_ratio\nvec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size=(pattern_br-pattern_tl)/pixel_ratio;v_pos=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,display_size,u_tile_units_to_pixels,a_pos);v_pos_world=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;\n#ifdef FOG\nv_fog_pos=fog_position(a_pos);\n#endif\n}"), fillPattern: di("uniform vec2 u_texsize;uniform sampler2D u_image;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern\nvec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec2 imagecoord=mod(v_pos,1.0);vec2 pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,imagecoord);vec4 out_color=texture2D(u_image,pos);\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color);\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));\n#endif\ngl_FragColor=out_color*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern\n#pragma mapbox: define lowp float pixel_ratio\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern\n#pragma mapbox: initialize lowp float pixel_ratio\nvec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec2 display_size=(pattern_br-pattern_tl)/pixel_ratio;gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,display_size,u_tile_units_to_pixels,a_pos);\n#ifdef FOG\nv_fog_pos=fog_position(a_pos);\n#endif\n}"), fillExtrusion: di("varying vec4 v_color;\n#ifdef RENDER_SHADOWS\nvarying highp vec4 v_pos_light_view_0;varying highp vec4 v_pos_light_view_1;varying float v_depth;\n#endif\n#ifdef FAUX_AO\nuniform lowp vec2 u_ao;varying vec3 v_ao;\n#endif\n#ifdef ZERO_ROOF_RADIUS\nvarying vec4 v_roof_color;\n#endif\n#if defined(ZERO_ROOF_RADIUS) || defined(RENDER_SHADOWS)\nvarying highp vec3 v_normal;\n#endif\nvoid main() {\n#if defined(ZERO_ROOF_RADIUS) || defined(RENDER_SHADOWS)\nvec3 normal=v_normal;\n#endif\nfloat z;vec4 color;\n#ifdef ZERO_ROOF_RADIUS\nz=float(normal.z > 0.00001);color=mix(v_color,v_roof_color,z);\n#else\ncolor=v_color;\n#endif\n#ifdef FAUX_AO\nfloat intensity=u_ao[0];float h=max(0.0,v_ao.z);float h_floors=h/u_ao[1];float y_shade=1.0-0.9*intensity*min(v_ao.y,1.0);float shade=(1.0-0.08*intensity)*(y_shade+(1.0-y_shade)*(1.0-pow(1.0-min(h_floors/16.0,1.0),16.0)))+0.08*intensity*min(h_floors/160.0,1.0);float concave=v_ao.x*v_ao.x;\n#ifdef ZERO_ROOF_RADIUS\nconcave*=(1.0-z);\n#endif\nfloat x_shade=mix(1.0,mix(0.6,0.75,min(h_floors/30.0,1.0)),intensity)+0.1*intensity*min(h,1.0);shade*=mix(1.0,x_shade*x_shade*x_shade,concave);color.rgb=color.rgb*shade;\n#endif\n#ifdef RENDER_SHADOWS\n#ifdef ZERO_ROOF_RADIUS\nnormal=mix(normal,vec3(0.0,0.0,1.0),z);\n#endif\ncolor.xyz=shadowed_color_normal(color.xyz,normalize(normal),v_pos_light_view_0,v_pos_light_view_1,v_depth);\n#endif\n#ifdef FOG\ncolor=fog_dither(fog_apply_premultiplied(color,v_fog_pos));\n#endif\ngl_FragColor=color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform float u_edge_radius;attribute vec4 a_pos_normal_ed;attribute vec2 a_centroid_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nattribute vec3 a_pos_3;attribute vec3 a_pos_normal_3;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_tile_id;uniform float u_zoom_transition;uniform vec3 u_up_dir;uniform float u_height_lift;\n#endif\nvarying vec4 v_color;\n#ifdef RENDER_SHADOWS\nuniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;varying highp vec4 v_pos_light_view_0;varying highp vec4 v_pos_light_view_1;varying float v_depth;\n#endif\n#ifdef ZERO_ROOF_RADIUS\nvarying vec4 v_roof_color;\n#endif\n#if defined(ZERO_ROOF_RADIUS) || defined(RENDER_SHADOWS)\nvarying highp vec3 v_normal;\n#endif\n#ifdef FAUX_AO\nuniform lowp vec2 u_ao;varying vec3 v_ao;\n#endif\n#pragma mapbox: define highp float base\n#pragma mapbox: define highp float height\n#pragma mapbox: define highp vec4 color\nvoid main() {\n#pragma mapbox: initialize highp float base\n#pragma mapbox: initialize highp float height\n#pragma mapbox: initialize highp vec4 color\nvec4 pos_nx=floor(a_pos_normal_ed*0.5);vec4 top_up_ny_start=a_pos_normal_ed-2.0*pos_nx;vec3 top_up_ny=top_up_ny_start.xyz;float x_normal=pos_nx.z/8192.0;vec3 normal=top_up_ny.y==1.0 ? vec3(0.0,0.0,1.0) : normalize(vec3(x_normal,(2.0*top_up_ny.z-1.0)*(1.0-abs(x_normal)),0.0));\n#if defined(ZERO_ROOF_RADIUS) || defined(RENDER_SHADOWS)\nv_normal=normal;\n#endif\nbase=max(0.0,base);height=max(0.0,top_up_ny.y==0.0 && top_up_ny.x==1.0 ? height-u_edge_radius : height);float t=top_up_ny.x;vec2 centroid_pos=vec2(0.0);\n#if defined(HAS_CENTROID) || defined(TERRAIN)\ncentroid_pos=a_centroid_pos;\n#endif\nfloat ele=0.0;float h=0.0;float c_ele;vec3 pos;\n#ifdef TERRAIN\nbool flat_roof=centroid_pos.x !=0.0 && t > 0.0;ele=elevation(pos_nx.xy);c_ele=flat_roof ? centroid_pos.y==0.0 ? elevationFromUint16(centroid_pos.x) : flatElevation(centroid_pos) : ele;h=flat_roof ? max(c_ele+height,ele+base+2.0) : ele+(t > 0.0 ? height : base==0.0 ?-5.0 : base);pos=vec3(pos_nx.xy,h);\n#else\nh=t > 0.0 ? height : base;pos=vec3(pos_nx.xy,h);\n#endif\n#ifdef PROJECTION_GLOBE_VIEW\nfloat lift=float((t+base) > 0.0)*u_height_lift;h+=lift;vec3 globe_normal=normalize(mix(a_pos_normal_3/16384.0,u_up_dir,u_zoom_transition));vec3 globe_pos=a_pos_3+globe_normal*(u_tile_up_scale*h);vec3 merc_pos=mercator_tile_position(u_inv_rot_matrix,pos.xy,u_tile_id,u_merc_center)+u_up_dir*u_tile_up_scale*pos.z;pos=mix_globe_mercator(globe_pos,merc_pos,u_zoom_transition);\n#endif\nfloat hidden=float(centroid_pos.x==0.0 && centroid_pos.y==1.0);gl_Position=mix(u_matrix*vec4(pos,1),AWAY,hidden);\n#ifdef RENDER_SHADOWS\nv_pos_light_view_0=u_light_matrix_0*vec4(pos,1);v_pos_light_view_1=u_light_matrix_1*vec4(pos,1);v_depth=gl_Position.w;\n#endif\nfloat NdotL=0.0;float colorvalue=0.0;\n#ifdef LIGHTING_3D_MODE\nNdotL=calculate_NdotL(normal);\n#else\ncolorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;NdotL=clamp(dot(normal,u_lightpos),0.0,1.0);NdotL=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),NdotL);\n#endif\nif (normal.y !=0.0) {float r=0.84;\n#ifndef LIGHTING_3D_MODE\nr=mix(0.7,0.98,1.0-u_lightintensity);\n#endif\nNdotL*=(\n(1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),r,1.0)));}v_color=vec4(0.0,0.0,0.0,1.0);\n#ifdef FAUX_AO\nfloat concave=pos_nx.w-floor(pos_nx.w*0.5)*2.0;float start=top_up_ny_start.w;float y_ground=1.0-clamp(t+base,0.0,1.0);float top_height=height;\n#ifdef TERRAIN\ntop_height=mix(max(c_ele+height,ele+base+2.0),ele+height,float(centroid_pos.x==0.0))-ele;y_ground+=y_ground*5.0/max(3.0,top_height);\n#endif\nv_ao=vec3(mix(concave,-concave,start),y_ground,h-ele);NdotL*=(1.0+0.05*(1.0-top_up_ny.y)*u_ao[0]);\n#ifdef PROJECTION_GLOBE_VIEW\ntop_height+=u_height_lift;\n#endif\ngl_Position.z-=(0.0000006*(min(top_height,500.)+2.0*min(base,500.0)+60.0*concave+3.0*start))*gl_Position.w;\n#endif\n#ifdef LIGHTING_3D_MODE\nv_color=apply_lighting(color,NdotL);\n#else\nv_color.rgb+=clamp(color.rgb*NdotL*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));\n#endif\nv_color*=u_opacity;\n#ifdef ZERO_ROOF_RADIUS\nv_roof_color=vec4(0.0,0.0,0.0,1.0);\n#ifdef LIGHTING_3D_MODE\nv_roof_color=apply_lighting(color,calculate_NdotL(vec3(0.0,0.0,1.0)));\n#else\nfloat roofNdotL=clamp(u_lightpos.z,0.0,1.0);roofNdotL=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),roofNdotL);v_roof_color.rgb+=clamp(color.rgb*roofNdotL*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));\n#endif\nv_roof_color*=u_opacity;\n#endif\n#ifdef FOG\nv_fog_pos=fog_position(pos);\n#endif\n}"), fillExtrusionPattern: di("uniform vec2 u_texsize;uniform sampler2D u_image;\n#ifdef FAUX_AO\nuniform lowp vec2 u_ao;varying vec3 v_ao;\n#endif\n#ifdef LIGHTING_3D_MODE\nvarying float v_NdotL;\n#endif\nvarying vec2 v_pos;varying vec4 v_lighting;uniform lowp float u_opacity;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern\n#pragma mapbox: define lowp float pixel_ratio\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern\n#pragma mapbox: initialize lowp float pixel_ratio\nvec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec2 imagecoord=mod(v_pos,1.0);vec2 pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,imagecoord);vec4 out_color=texture2D(u_image,pos);\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color,v_NdotL)*u_opacity;\n#else\nout_color=out_color*v_lighting;\n#endif\n#ifdef FAUX_AO\nfloat intensity=u_ao[0];float h=max(0.0,v_ao.z);float h_floors=h/u_ao[1];float y_shade=1.0-0.9*intensity*min(v_ao.y,1.0);float shade=(1.0-0.08*intensity)*(y_shade+(1.0-y_shade)*(1.0-pow(1.0-min(h_floors/16.0,1.0),16.0)))+0.08*intensity*min(h_floors/160.0,1.0);float concave=v_ao.x*v_ao.x;float x_shade=mix(1.0,mix(0.6,0.75,min(h_floors/30.0,1.0)),intensity)+0.1*intensity*min(h,1.0);shade*=mix(1.0,x_shade*x_shade*x_shade,concave);out_color.rgb=out_color.rgb*shade;\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));\n#endif\ngl_FragColor=out_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform float u_tile_units_to_pixels;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec4 a_pos_normal_ed;attribute vec2 a_centroid_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nattribute vec3 a_pos_3;attribute vec3 a_pos_normal_3;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_tile_id;uniform float u_zoom_transition;uniform vec3 u_up_dir;uniform float u_height_lift;\n#endif\nvarying vec2 v_pos;varying vec4 v_lighting;\n#ifdef FAUX_AO\nuniform lowp vec2 u_ao;varying vec3 v_ao;\n#endif\n#ifdef LIGHTING_3D_MODE\nvarying float v_NdotL;\n#endif\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern\n#pragma mapbox: define lowp float pixel_ratio\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern\n#pragma mapbox: initialize lowp float pixel_ratio\nvec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec4 pos_nx=floor(a_pos_normal_ed*0.5);mediump vec4 top_up_ny_start=a_pos_normal_ed-2.0*pos_nx;mediump vec3 top_up_ny=top_up_ny_start.xyz;float x_normal=pos_nx.z/8192.0;vec3 normal=top_up_ny.y==1.0 ? vec3(0.0,0.0,1.0) : normalize(vec3(x_normal,(2.0*top_up_ny.z-1.0)*(1.0-abs(x_normal)),0.0));float edgedistance=a_pos_normal_ed.w;vec2 display_size=(pattern_br-pattern_tl)/pixel_ratio;base=max(0.0,base);height=max(0.0,height);float t=top_up_ny.x;float z=t > 0.0 ? height : base;vec2 centroid_pos=vec2(0.0);\n#if defined(HAS_CENTROID) || defined(TERRAIN)\ncentroid_pos=a_centroid_pos;\n#endif\nfloat ele=0.0;float h=z;vec3 p;float c_ele;\n#ifdef TERRAIN\nbool flat_roof=centroid_pos.x !=0.0 && t > 0.0;ele=elevation(pos_nx.xy);c_ele=flat_roof ? centroid_pos.y==0.0 ? elevationFromUint16(centroid_pos.x) : flatElevation(centroid_pos) : ele;h=flat_roof ? max(c_ele+height,ele+base+2.0) : ele+(t > 0.0 ? height : base==0.0 ?-5.0 : base);p=vec3(pos_nx.xy,h);\n#else\np=vec3(pos_nx.xy,z);\n#endif\n#ifdef PROJECTION_GLOBE_VIEW\nfloat lift=float((t+base) > 0.0)*u_height_lift;h+=lift;vec3 globe_normal=normalize(mix(a_pos_normal_3/16384.0,u_up_dir,u_zoom_transition));vec3 globe_pos=a_pos_3+globe_normal*(u_tile_up_scale*(p.z+lift));vec3 merc_pos=mercator_tile_position(u_inv_rot_matrix,p.xy,u_tile_id,u_merc_center)+u_up_dir*u_tile_up_scale*p.z;p=mix_globe_mercator(globe_pos,merc_pos,u_zoom_transition);\n#endif\nfloat hidden=float(centroid_pos.x==0.0 && centroid_pos.y==1.0);gl_Position=mix(u_matrix*vec4(p,1),AWAY,hidden);vec2 pos=normal.z==1.0\n? pos_nx.xy\n: vec2(edgedistance,z*u_height_factor);v_pos=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,display_size,u_tile_units_to_pixels,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float NdotL=0.0;\n#ifdef LIGHTING_3D_MODE\nNdotL=calculate_NdotL(normal);\n#else\nNdotL=clamp(dot(normal,u_lightpos),0.0,1.0);NdotL=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),NdotL);\n#endif\nif (normal.y !=0.0) {float r=0.84;\n#ifndef LIGHTING_3D_MODE\nr=mix(0.7,0.98,1.0-u_lightintensity);\n#endif\nNdotL*=(\n(1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),r,1.0)));}\n#ifdef FAUX_AO\nfloat concave=pos_nx.w-floor(pos_nx.w*0.5)*2.0;float start=top_up_ny_start.w;float y_ground=1.0-clamp(t+base,0.0,1.0);float top_height=height;\n#ifdef TERRAIN\ntop_height=mix(max(c_ele+height,ele+base+2.0),ele+height,float(centroid_pos.x==0.0))-ele;y_ground+=y_ground*5.0/max(3.0,top_height);\n#endif\nv_ao=vec3(mix(concave,-concave,start),y_ground,h-ele);NdotL*=(1.0+0.05*(1.0-top_up_ny.y)*u_ao[0]);\n#ifdef PROJECTION_GLOBE_VIEW\ntop_height+=u_height_lift;\n#endif\ngl_Position.z-=(0.0000006*(min(top_height,500.)+2.0*min(base,500.0)+60.0*concave+3.0*start))*gl_Position.w;\n#endif\n#ifdef LIGHTING_3D_MODE\nv_NdotL=NdotL;\n#else\nv_lighting.rgb+=clamp(NdotL*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;\n#endif \n#ifdef FOG\nv_fog_pos=fog_position(p);\n#endif\n}"), hillshadePrepare: di("#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform vec4 u_unpack;float getElevation(vec2 coord) {\n#ifdef TERRAIN_DEM_FLOAT_FORMAT\nreturn texture2D(u_image,coord).a/4.0;\n#else\nvec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;\n#endif\n}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y));float b=getElevation(v_pos+vec2(0,-epsilon.y));float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y));float d=getElevation(v_pos+vec2(-epsilon.x,0));float e=getElevation(v_pos+vec2(epsilon.x,0));float f=getElevation(v_pos+vec2(-epsilon.x,epsilon.y));float g=getElevation(v_pos+vec2(0,epsilon.y));float h=getElevation(v_pos+vec2(epsilon.x,epsilon.y));float exaggerationFactor=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;float exaggeration=u_zoom < 15.0 ? (u_zoom-15.0)*exaggerationFactor : 0.0;vec2 deriv=vec2(\n(c+e+e+h)-(a+d+d+f),(f+g+g+h)-(a+b+b+c)\n)/pow(2.0,exaggeration+(19.2562-u_zoom));gl_FragColor=clamp(vec4(\nderiv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}"), hillshade: di("uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;void main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\n#ifdef LIGHTING_3D_MODE\ngl_FragColor=apply_lighting(gl_FragColor);\n#endif\n#ifdef FOG\ngl_FragColor=fog_dither(fog_apply_premultiplied(gl_FragColor,v_fog_pos));\n#endif\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;\n#ifdef FOG\nv_fog_pos=fog_position(a_pos);\n#endif\n}"), line: di("uniform lowp float u_device_pixel_ratio;uniform float u_alpha_discard_threshold;uniform highp vec2 u_trim_offset;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp vec4 v_uv;\n#ifdef RENDER_LINE_DASH\nuniform sampler2D u_dash_image;varying vec2 v_tex;\n#endif\n#ifdef RENDER_LINE_GRADIENT\nuniform sampler2D u_gradient_image;\n#endif\nuniform float u_border_width;uniform vec4 u_border_color;float luminance(vec3 c) {return (c.r+c.r+c.b+c.g+c.g+c.g)*0.1667;}\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float floorwidth\n#pragma mapbox: define lowp vec4 dash\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nfloat linearstep(float edge0,float edge1,float x) {return clamp((x-edge0)/(edge1-edge0),0.0,1.0);}void main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float floorwidth\n#pragma mapbox: initialize lowp vec4 dash\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);\n#ifdef RENDER_LINE_DASH\nfloat sdfdist=texture2D(u_dash_image,v_tex).a;float sdfgamma=1.0/(2.0*u_device_pixel_ratio)/dash.z;alpha*=linearstep(0.5-sdfgamma/floorwidth,0.5+sdfgamma/floorwidth,sdfdist);\n#endif\nhighp vec4 out_color;\n#ifdef RENDER_LINE_GRADIENT\nout_color=texture2D(u_gradient_image,v_uv.xy);\n#else\nout_color=color;\n#endif\nfloat trimmed=1.0;\n#ifdef RENDER_LINE_TRIM_OFFSET\nhighp float start=v_uv[2];highp float end=v_uv[3];highp float trim_start=u_trim_offset[0];highp float trim_end=u_trim_offset[1];highp float line_progress=(start+(v_uv.x)*(end-start));if (trim_end > trim_start) {if (line_progress <=trim_end && line_progress >=trim_start) {out_color=vec4(0,0,0,0);trimmed=0.0;}}\n#endif\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color);\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));\n#endif\n#ifdef RENDER_LINE_ALPHA_DISCARD\nif (alpha < u_alpha_discard_threshold) {discard;}\n#endif\n#ifdef RENDER_LINE_BORDER\nfloat edgeBlur=(u_border_width+1.0/u_device_pixel_ratio);float alpha2=clamp(min(dist-(v_width2.t-edgeBlur),v_width2.s-dist)/edgeBlur,0.0,1.0);if (alpha2 < 1.) {float smoothAlpha=smoothstep(0.6,1.0,alpha2);\n#ifdef RENDER_LINE_BORDER_AUTO\nfloat Y=(out_color.a > 0.01) ? luminance(out_color.rgb/out_color.a) : 1.;float adjustment=(Y > 0.) ? 0.5/Y : 0.45;if (out_color.a > 0.25 && Y < 0.25) {vec3 borderColor=(Y > 0.) ? out_color.rgb : vec3(1,1,1)*out_color.a;out_color.rgb=out_color.rgb+borderColor*(adjustment*(1.0-smoothAlpha));} else {out_color.rgb*=(0.6 +0.4*smoothAlpha);}\n#else\nout_color.rgb=mix(u_border_color.rgb*u_border_color.a*trimmed,out_color.rgb,smoothAlpha);\n#endif\n}\n#endif\ngl_FragColor=out_color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "\n#define EXTRUDE_SCALE 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;\n#if defined(RENDER_LINE_GRADIENT) || defined(RENDER_LINE_TRIM_OFFSET)\nattribute highp vec4 a_packed;\n#endif\n#ifdef RENDER_LINE_DASH\nattribute float a_linesofar;\n#endif\nuniform mat4 u_matrix;uniform mat2 u_pixels_to_tile_units;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp vec4 v_uv;\n#ifdef RENDER_LINE_DASH\nuniform vec2 u_texsize;uniform float u_tile_units_to_pixels;varying vec2 v_tex;\n#endif\n#ifdef RENDER_LINE_GRADIENT\nuniform float u_image_height;\n#endif\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float floorwidth\n#pragma mapbox: define lowp vec4 dash\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float floorwidth\n#pragma mapbox: initialize lowp vec4 dash\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*EXTRUDE_SCALE;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*EXTRUDE_SCALE*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist*u_pixels_to_tile_units,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2*u_pixels_to_tile_units,0.0,1.0)+projected_extrude;\n#ifndef RENDER_TO_TEXTURE\nfloat extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;\n#else\nv_gamma_scale=1.0;\n#endif\n#if defined(RENDER_LINE_GRADIENT) || defined(RENDER_LINE_TRIM_OFFSET)\nfloat a_uv_x=a_packed[0];float a_split_index=a_packed[1];highp float a_clip_start=a_packed[2];highp float a_clip_end=a_packed[3];\n#ifdef RENDER_LINE_GRADIENT\nhighp float texel_height=1.0/u_image_height;highp float half_texel_height=0.5*texel_height;v_uv=vec4(a_uv_x,a_split_index*texel_height-half_texel_height,a_clip_start,a_clip_end);\n#else\nv_uv=vec4(a_uv_x,0.0,a_clip_start,a_clip_end);\n#endif\n#endif\n#ifdef RENDER_LINE_DASH\nfloat scale=dash.z==0.0 ? 0.0 : u_tile_units_to_pixels/dash.z;float height=dash.y;v_tex=vec2(a_linesofar*scale/floorwidth,(-normal.y*height+dash.x+0.5)/u_texsize.y);\n#endif\nv_width2=vec2(outset,inset);\n#ifdef FOG\nv_fog_pos=fog_position(pos);\n#endif\n}"), linePattern: di("uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_tile_units_to_pixels;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\n#pragma mapbox: define lowp vec4 pattern\n#pragma mapbox: define lowp float pixel_ratio\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize mediump vec4 pattern\n#pragma mapbox: initialize lowp float pixel_ratio\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nvec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec2 display_size=(pattern_br-pattern_tl)/pixel_ratio;vec2 pattern_size=vec2(display_size.x/u_tile_units_to_pixels,display_size.y);float aspect=display_size.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x=mod(v_linesofar/pattern_size.x*aspect,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos=mix(pattern_tl*texel_size-texel_size,pattern_br*texel_size+texel_size,vec2(x,y));vec4 color=texture2D(u_image,pos);\n#ifdef LIGHTING_3D_MODE\ncolor=apply_lighting(color);\n#endif\n#ifdef FOG\ncolor=fog_dither(fog_apply_premultiplied(color,v_fog_pos));\n#endif\ngl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;attribute float a_linesofar;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mat2 u_pixels_to_tile_units;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\n#pragma mapbox: define lowp vec4 pattern\n#pragma mapbox: define lowp float pixel_ratio\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\n#pragma mapbox: initialize mediump vec4 pattern\n#pragma mapbox: initialize lowp float pixel_ratio\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist*u_pixels_to_tile_units,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2*u_pixels_to_tile_units,0.0,1.0)+projected_extrude;\n#ifndef RENDER_TO_TEXTURE\nfloat extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;\n#else\nv_gamma_scale=1.0;\n#endif\nv_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;\n#ifdef FOG\nv_fog_pos=fog_position(pos);\n#endif\n}"), raster: di("uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(\ndot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);vec3 out_color=mix(u_high_vec,u_low_vec,rgb);\n#ifdef LIGHTING_3D_MODE\nout_color=apply_lighting(out_color);\n#endif\n#ifdef FOG\nout_color=fog_dither(fog_apply(out_color,v_fog_pos));\n#endif\ngl_FragColor=vec4(out_color*color.a,color.a);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform vec2 u_perspective_transform;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {float w=1.0+dot(a_texture_pos,u_perspective_transform);gl_Position=u_matrix*vec4(a_pos*w,0,w);v_pos0=a_texture_pos/8192.0;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;\n#ifdef FOG\nv_fog_pos=fog_position(a_pos);\n#endif\n}"), symbolIcon: di("uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "attribute vec4 a_pos_offset;attribute vec4 a_tex_size;attribute vec4 a_pixeloffset;attribute vec4 a_projected_pos;attribute float a_fade_opacity;\n#ifdef PROJECTION_GLOBE_VIEW\nattribute vec3 a_globe_anchor;attribute vec3 a_globe_normal;\n#endif\nuniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;uniform vec3 u_up_vector;\n#ifdef PROJECTION_GLOBE_VIEW\nuniform vec3 u_tile_id;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_camera_forward;uniform float u_zoom_transition;uniform vec3 u_ecef_origin;uniform mat4 u_tile_matrix;\n#endif\nvarying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_tex_size.xy;vec2 a_size=a_tex_size.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_min_font_scale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[3];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 tile_anchor=a_pos;vec3 h=elevationVector(tile_anchor)*elevation(tile_anchor);float globe_occlusion_fade;vec3 world_pos;vec3 mercator_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nmercator_pos=mercator_tile_position(u_inv_rot_matrix,tile_anchor,u_tile_id,u_merc_center);world_pos=mix_globe_mercator(a_globe_anchor+h,mercator_pos,u_zoom_transition);vec4 ecef_point=u_tile_matrix*vec4(world_pos,1.0);vec3 origin_to_point=ecef_point.xyz-u_ecef_origin;globe_occlusion_fade=dot(origin_to_point,u_camera_forward) >=0.0 ? 0.0 : 1.0;\n#else\nworld_pos=vec3(tile_anchor,0)+h;globe_occlusion_fade=1.0;\n#endif\nvec4 projected_point=u_matrix*vec4(world_pos,1);highp float camera_to_anchor_distance=projected_point.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(\n0.5+0.5*distance_ratio,0.0,1.5);size*=perspective_ratio;float font_scale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjected_point;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 displacement=vec3(a_globe_normal.z,0,-a_globe_normal.x);offsetProjected_point=u_matrix*vec4(a_globe_anchor+displacement,1);\n#else\noffsetProjected_point=u_matrix*vec4(tile_anchor+vec2(1,0),0,1);\n#endif\nvec2 a=projected_point.xy/projected_point.w;vec2 b=offsetProjected_point.xy/offsetProjected_point.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}vec4 projected_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 proj_pos=mix_globe_mercator(a_projected_pos.xyz+h,mercator_pos,u_zoom_transition);projected_pos=u_label_plane_matrix*vec4(proj_pos,1.0);\n#else\nprojected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,h.z,1.0);\n#endif\nhighp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);float z=0.0;vec2 offset=rotation_matrix*(a_offset/32.0*max(a_min_font_scale,font_scale)+a_pxoffset/16.0);\n#ifdef TERRAIN\n#ifdef PITCH_WITH_MAP_TERRAIN\nvec4 tile_pos=u_label_plane_matrix_inv*vec4(a_projected_pos.xy+offset,0.0,1.0);z=elevation(tile_pos.xy);\n#endif\n#endif\nfloat occlusion_fade=occlusionFade(projected_point)*globe_occlusion_fade;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 xAxis=u_pitch_with_map ? normalize(cross(a_globe_normal,u_up_vector)) : vec3(1,0,0);vec3 yAxis=u_pitch_with_map ? normalize(cross(a_globe_normal,xAxis)) : vec3(0,1,0);gl_Position=mix(u_coord_matrix*vec4(projected_pos.xyz/projected_pos.w+xAxis*offset.x+yAxis*offset.y,1.0),AWAY,float(projected_point.w <=0.0 || occlusion_fade==0.0));\n#else\ngl_Position=mix(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+offset,z,1.0),AWAY,float(projected_point.w <=0.0 || occlusion_fade==0.0));\n#endif\nfloat projection_transition_fade=1.0;\n#if defined(PROJECTED_POS_ON_VIEWPORT) && defined(PROJECTION_GLOBE_VIEW)\nprojection_transition_fade=1.0-step(EPSILON,u_zoom_transition);\n#endif\nv_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(occlusion_fade,fade_opacity[0]+fade_change))*projection_transition_fade;}"), symbolSDF: di("#define SDF_PX 8.0\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "attribute vec4 a_pos_offset;attribute vec4 a_tex_size;attribute vec4 a_pixeloffset;attribute vec4 a_projected_pos;attribute float a_fade_opacity;\n#ifdef PROJECTION_GLOBE_VIEW\nattribute vec3 a_globe_anchor;attribute vec3 a_globe_normal;\n#endif\nuniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec3 u_up_vector;\n#ifdef PROJECTION_GLOBE_VIEW\nuniform vec3 u_tile_id;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_camera_forward;uniform float u_zoom_transition;uniform vec3 u_ecef_origin;uniform mat4 u_tile_matrix;\n#endif\nvarying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_tex_size.xy;vec2 a_size=a_tex_size.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[3];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 tile_anchor=a_pos;vec3 h=elevationVector(tile_anchor)*elevation(tile_anchor);float globe_occlusion_fade;vec3 world_pos;vec3 mercator_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nmercator_pos=mercator_tile_position(u_inv_rot_matrix,tile_anchor,u_tile_id,u_merc_center);world_pos=mix_globe_mercator(a_globe_anchor+h,mercator_pos,u_zoom_transition);vec4 ecef_point=u_tile_matrix*vec4(world_pos,1.0);vec3 origin_to_point=ecef_point.xyz-u_ecef_origin;globe_occlusion_fade=dot(origin_to_point,u_camera_forward) >=0.0 ? 0.0 : 1.0;\n#else\nworld_pos=vec3(tile_anchor,0)+h;globe_occlusion_fade=1.0;\n#endif\nvec4 projected_point=u_matrix*vec4(world_pos,1);highp float camera_to_anchor_distance=projected_point.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(\n0.5+0.5*distance_ratio,0.0,1.5);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetprojected_point;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 displacement=vec3(a_globe_normal.z,0,-a_globe_normal.x);offsetprojected_point=u_matrix*vec4(a_globe_anchor+displacement,1);\n#else\noffsetprojected_point=u_matrix*vec4(tile_anchor+vec2(1,0),0,1);\n#endif\nvec2 a=projected_point.xy/projected_point.w;vec2 b=offsetprojected_point.xy/offsetprojected_point.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}vec4 projected_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 proj_pos=mix_globe_mercator(a_projected_pos.xyz+h,mercator_pos,u_zoom_transition);projected_pos=u_label_plane_matrix*vec4(proj_pos,1.0);\n#else\nprojected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,h.z,1.0);\n#endif\nhighp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);float z=0.0;vec2 offset=rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset);\n#ifdef TERRAIN\n#ifdef PITCH_WITH_MAP_TERRAIN\nvec4 tile_pos=u_label_plane_matrix_inv*vec4(a_projected_pos.xy+offset,0.0,1.0);z=elevation(tile_pos.xy);\n#endif\n#endif\nfloat occlusion_fade=occlusionFade(projected_point)*globe_occlusion_fade;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 xAxis=u_pitch_with_map ? normalize(cross(a_globe_normal,u_up_vector)) : vec3(1,0,0);vec3 yAxis=u_pitch_with_map ? normalize(cross(a_globe_normal,xAxis)) : vec3(0,1,0);gl_Position=mix(u_coord_matrix*vec4(projected_pos.xyz/projected_pos.w+xAxis*offset.x+yAxis*offset.y,1.0),AWAY,float(projected_point.w <=0.0 || occlusion_fade==0.0));\n#else\ngl_Position=mix(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+offset,z,1.0),AWAY,float(projected_point.w <=0.0 || occlusion_fade==0.0));\n#endif\nfloat gamma_scale=gl_Position.w;float projection_transition_fade=1.0;\n#if defined(PROJECTED_POS_ON_VIEWPORT) && defined(PROJECTION_GLOBE_VIEW)\nprojection_transition_fade=1.0-step(EPSILON,u_zoom_transition);\n#endif\nvec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(occlusion_fade,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity*projection_transition_fade);}"), symbolTextAndIcon: di("#define SDF_PX 8.0\n#define SDF 1.0\n#define ICON 0.0\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "attribute vec4 a_pos_offset;attribute vec4 a_tex_size;attribute vec4 a_projected_pos;attribute float a_fade_opacity;\n#ifdef PROJECTION_GLOBE_VIEW\nattribute vec3 a_globe_anchor;attribute vec3 a_globe_normal;\n#endif\nuniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec3 u_up_vector;uniform vec2 u_texsize_icon;\n#ifdef PROJECTION_GLOBE_VIEW\nuniform vec3 u_tile_id;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_camera_forward;uniform float u_zoom_transition;uniform vec3 u_ecef_origin;uniform mat4 u_tile_matrix;\n#endif\nvarying vec4 v_data0;varying vec4 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_tex_size.xy;vec2 a_size=a_tex_size.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[3];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 tile_anchor=a_pos;vec3 h=elevationVector(tile_anchor)*elevation(tile_anchor);float globe_occlusion_fade;vec3 world_pos;vec3 mercator_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nmercator_pos=mercator_tile_position(u_inv_rot_matrix,tile_anchor,u_tile_id,u_merc_center);world_pos=mix_globe_mercator(a_globe_anchor+h,mercator_pos,u_zoom_transition);vec4 ecef_point=u_tile_matrix*vec4(world_pos,1.0);vec3 origin_to_point=ecef_point.xyz-u_ecef_origin;globe_occlusion_fade=dot(origin_to_point,u_camera_forward) >=0.0 ? 0.0 : 1.0;\n#else\nworld_pos=vec3(tile_anchor,0)+h;globe_occlusion_fade=1.0;\n#endif\nvec4 projected_point=u_matrix*vec4(world_pos,1);highp float camera_to_anchor_distance=projected_point.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(\n0.5+0.5*distance_ratio,0.0,1.5);size*=perspective_ratio;float font_scale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offset_projected_point=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projected_point.xy/projected_point.w;vec2 b=offset_projected_point.xy/offset_projected_point.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}vec4 projected_pos;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 proj_pos=mix_globe_mercator(a_projected_pos.xyz+h,mercator_pos,u_zoom_transition);projected_pos=u_label_plane_matrix*vec4(proj_pos,1.0);\n#else\nprojected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,h.z,1.0);\n#endif\nhighp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);float z=0.0;vec2 offset=rotation_matrix*(a_offset/32.0*font_scale);\n#ifdef TERRAIN\n#ifdef PITCH_WITH_MAP_TERRAIN\nvec4 tile_pos=u_label_plane_matrix_inv*vec4(a_projected_pos.xy+offset,0.0,1.0);z=elevation(tile_pos.xy);\n#endif\n#endif\nfloat occlusion_fade=occlusionFade(projected_point)*globe_occlusion_fade;\n#ifdef PROJECTION_GLOBE_VIEW\nvec3 xAxis=u_pitch_with_map ? normalize(cross(a_globe_normal,u_up_vector)) : vec3(1,0,0);vec3 yAxis=u_pitch_with_map ? normalize(cross(a_globe_normal,xAxis)) : vec3(0,1,0);gl_Position=mix(u_coord_matrix*vec4(projected_pos.xyz/projected_pos.w+xAxis*offset.x+yAxis*offset.y,1.0),AWAY,float(projected_point.w <=0.0 || occlusion_fade==0.0));\n#else\ngl_Position=mix(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+offset,z,1.0),AWAY,float(projected_point.w <=0.0 || occlusion_fade==0.0));\n#endif\nfloat gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(occlusion_fade,fade_opacity[0]+fade_change));float projection_transition_fade=1.0;\n#if defined(PROJECTED_POS_ON_VIEWPORT) && defined(PROJECTION_GLOBE_VIEW)\nprojection_transition_fade=1.0-step(EPSILON,u_zoom_transition);\n#endif\nv_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity*projection_transition_fade,is_sdf);}"), terrainRaster: di("uniform sampler2D u_image0;varying vec2 v_pos0;\n#ifdef FOG\nvarying float v_fog_opacity;\n#endif\n#ifdef RENDER_SHADOWS\nvarying vec4 v_pos_light_view_0;varying vec4 v_pos_light_view_1;varying float v_depth;\n#endif\nvoid main() {vec4 color=texture2D(u_image0,v_pos0);\n#ifdef RENDER_SHADOWS\ncolor.xyz=shadowed_color(color.xyz,v_pos_light_view_0,v_pos_light_view_1,v_depth);\n#endif\n#ifdef FOG\n#ifdef ZERO_EXAGGERATION\ncolor=fog_dither(fog_apply_premultiplied(color,v_fog_pos));\n#else\ncolor=fog_dither(fog_apply_from_vert(color,v_fog_opacity));\n#endif\n#endif\ngl_FragColor=color;\n#ifdef TERRAIN_WIREFRAME\ngl_FragColor=vec4(1.0,0.0,0.0,0.8);\n#endif\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_matrix;uniform float u_skirt_height;attribute vec2 a_pos;varying vec2 v_pos0;\n#ifdef FOG\nvarying float v_fog_opacity;\n#endif\n#ifdef RENDER_SHADOWS\nuniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;varying vec4 v_pos_light_view_0;varying vec4 v_pos_light_view_1;varying float v_depth;\n#endif\nconst float wireframeOffset=0.00015;void main() {vec3 decomposedPosAndSkirt=decomposeToPosAndSkirt(a_pos);float skirt=decomposedPosAndSkirt.z;vec2 decodedPos=decomposedPosAndSkirt.xy;float elevation=elevation(decodedPos)-skirt*u_skirt_height;\n#ifdef TERRAIN_WIREFRAME\nelevation+=wireframeOffset;\n#endif\nv_pos0=decodedPos/8192.0;gl_Position=u_matrix*vec4(decodedPos,elevation,1.0);\n#ifdef FOG\n#ifdef ZERO_EXAGGERATION\nv_fog_pos=fog_position(decodedPos);\n#else\nv_fog_opacity=fog(fog_position(vec3(decodedPos,elevation)));\n#endif\n#endif\n#ifdef RENDER_SHADOWS\nvec3 pos=vec3(decodedPos,elevation);v_pos_light_view_0=u_light_matrix_0*vec4(pos,1.);v_pos_light_view_1=u_light_matrix_1*vec4(pos,1.);v_depth=gl_Position.w;\n#endif\n}"), terrainDepth: di("#ifdef GL_ES\nprecision highp float;\n#endif\nvarying float v_depth;void main() {gl_FragColor=pack_depth(v_depth);}", "uniform mat4 u_matrix;attribute vec2 a_pos;varying float v_depth;void main() {float elevation=elevation(a_pos);gl_Position=u_matrix*vec4(a_pos,elevation,1.0);v_depth=gl_Position.z/gl_Position.w;}"), skybox: di("\nvarying lowp vec3 v_uv;uniform lowp samplerCube u_cubemap;uniform lowp float u_opacity;uniform highp float u_temporal_offset;uniform highp vec3 u_sun_direction;float sun_disk(highp vec3 ray_direction,highp vec3 sun_direction) {highp float cos_angle=dot(normalize(ray_direction),sun_direction);const highp float cos_sun_angular_diameter=0.99996192306;const highp float smoothstep_delta=1e-5;return smoothstep(\ncos_sun_angular_diameter-smoothstep_delta,cos_sun_angular_diameter+smoothstep_delta,cos_angle);}float map(float value,float start,float end,float new_start,float new_end) {return ((value-start)*(new_end-new_start))/(end-start)+new_start;}void main() {vec3 uv=v_uv;const float y_bias=0.015;uv.y+=y_bias;uv.y=pow(abs(uv.y),1.0/5.0);uv.y=map(uv.y,0.0,1.0,-1.0,1.0);vec3 sky_color=textureCube(u_cubemap,uv).rgb;\n#ifdef FOG\nsky_color=fog_apply_sky_gradient(v_uv.xzy,sky_color);\n#endif\nsky_color.rgb=dither(sky_color.rgb,gl_FragCoord.xy+u_temporal_offset);sky_color+=0.1*sun_disk(v_uv,u_sun_direction);gl_FragColor=vec4(sky_color*u_opacity,u_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", ti), skyboxGradient: di("varying highp vec3 v_uv;uniform lowp sampler2D u_color_ramp;uniform highp vec3 u_center_direction;uniform lowp float u_radius;uniform lowp float u_opacity;uniform highp float u_temporal_offset;void main() {float progress=acos(dot(normalize(v_uv),u_center_direction))/u_radius;vec4 color=texture2D(u_color_ramp,vec2(progress,0.5));\n#ifdef FOG\ncolor.rgb=fog_apply_sky_gradient(v_uv.xzy,color.rgb/color.a)*color.a;\n#endif\ncolor*=u_opacity;color.rgb=dither(color.rgb,gl_FragCoord.xy+u_temporal_offset);gl_FragColor=color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", ti), skyboxCapture: di("\nvarying highp vec3 v_position;uniform highp float u_sun_intensity;uniform highp float u_luminance;uniform lowp vec3 u_sun_direction;uniform highp vec4 u_color_tint_r;uniform highp vec4 u_color_tint_m;\n#ifdef GL_ES\nprecision highp float;\n#endif\n#define BETA_R vec3(5.5e-6,13.0e-6,22.4e-6)\n#define BETA_M vec3(21e-6,21e-6,21e-6)\n#define MIE_G 0.76\n#define DENSITY_HEIGHT_SCALE_R 8000.0\n#define DENSITY_HEIGHT_SCALE_M 1200.0\n#define PLANET_RADIUS 6360e3\n#define ATMOSPHERE_RADIUS 6420e3\n#define SAMPLE_STEPS 10\n#define DENSITY_STEPS 4\nfloat ray_sphere_exit(vec3 orig,vec3 dir,float radius) {float a=dot(dir,dir);float b=2.0*dot(dir,orig);float c=dot(orig,orig)-radius*radius;float d=sqrt(b*b-4.0*a*c);return (-b+d)/(2.0*a);}vec3 extinction(vec2 density) {return exp(-vec3(BETA_R*u_color_tint_r.a*density.x+BETA_M*u_color_tint_m.a*density.y));}vec2 local_density(vec3 point) {float height=max(length(point)-PLANET_RADIUS,0.0);float exp_r=exp(-height/DENSITY_HEIGHT_SCALE_R);float exp_m=exp(-height/DENSITY_HEIGHT_SCALE_M);return vec2(exp_r,exp_m);}float phase_ray(float cos_angle) {return (3.0/(16.0*PI))*(1.0+cos_angle*cos_angle);}float phase_mie(float cos_angle) {return (3.0/(8.0*PI))*((1.0-MIE_G*MIE_G)*(1.0+cos_angle*cos_angle))/((2.0+MIE_G*MIE_G)*pow(1.0+MIE_G*MIE_G-2.0*MIE_G*cos_angle,1.5));}vec2 density_to_atmosphere(vec3 point,vec3 light_dir) {float ray_len=ray_sphere_exit(point,light_dir,ATMOSPHERE_RADIUS);float step_len=ray_len/float(DENSITY_STEPS);vec2 density_point_to_atmosphere=vec2(0.0);for (int i=0; i < DENSITY_STEPS;++i) {vec3 point_on_ray=point+light_dir*((float(i)+0.5)*step_len);density_point_to_atmosphere+=local_density(point_on_ray)*step_len;;}return density_point_to_atmosphere;}vec3 atmosphere(vec3 ray_dir,vec3 sun_direction,float sun_intensity) {vec2 density_orig_to_point=vec2(0.0);vec3 scatter_r=vec3(0.0);vec3 scatter_m=vec3(0.0);vec3 origin=vec3(0.0,PLANET_RADIUS,0.0);float ray_len=ray_sphere_exit(origin,ray_dir,ATMOSPHERE_RADIUS);float step_len=ray_len/float(SAMPLE_STEPS);for (int i=0; i < SAMPLE_STEPS;++i) {vec3 point_on_ray=origin+ray_dir*((float(i)+0.5)*step_len);vec2 density=local_density(point_on_ray)*step_len;density_orig_to_point+=density;vec2 density_point_to_atmosphere=density_to_atmosphere(point_on_ray,sun_direction);vec2 density_orig_to_atmosphere=density_orig_to_point+density_point_to_atmosphere;vec3 extinction=extinction(density_orig_to_atmosphere);scatter_r+=density.x*extinction;scatter_m+=density.y*extinction;}float cos_angle=dot(ray_dir,sun_direction);float phase_r=phase_ray(cos_angle);float phase_m=phase_mie(cos_angle);vec3 beta_r=BETA_R*u_color_tint_r.rgb*u_color_tint_r.a;vec3 beta_m=BETA_M*u_color_tint_m.rgb*u_color_tint_m.a;return (scatter_r*phase_r*beta_r+scatter_m*phase_m*beta_m)*sun_intensity;}const float A=0.15;const float B=0.50;const float C=0.10;const float D=0.20;const float E=0.02;const float F=0.30;vec3 uncharted2_tonemap(vec3 x) {return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;}void main() {vec3 ray_direction=v_position;ray_direction.y=pow(ray_direction.y,5.0);const float y_bias=0.015;ray_direction.y+=y_bias;vec3 color=atmosphere(normalize(ray_direction),u_sun_direction,u_sun_intensity);float white_scale=1.0748724675633854;color=uncharted2_tonemap((log2(2.0/pow(u_luminance,4.0)))*color)*white_scale;gl_FragColor=vec4(color,1.0);}", "attribute highp vec3 a_pos_3f;uniform mat3 u_matrix_3f;varying highp vec3 v_position;float map(float value,float start,float end,float new_start,float new_end) {return ((value-start)*(new_end-new_start))/(end-start)+new_start;}void main() {vec4 pos=vec4(u_matrix_3f*a_pos_3f,1.0);v_position=pos.xyz;v_position.y*=-1.0;v_position.y=map(v_position.y,-1.0,1.0,0.0,1.0);gl_Position=vec4(a_pos_3f.xy,0.0,1.0);}"), globeRaster: di("uniform sampler2D u_image0;varying vec2 v_pos0;\n#ifndef FOG\nuniform highp vec3 u_frustum_tl;uniform highp vec3 u_frustum_tr;uniform highp vec3 u_frustum_br;uniform highp vec3 u_frustum_bl;uniform highp vec3 u_globe_pos;uniform highp float u_globe_radius;uniform vec2 u_viewport;\n#endif\nvoid main() {vec4 color;\n#ifdef CUSTOM_ANTIALIASING\nvec2 uv=gl_FragCoord.xy/u_viewport;highp vec3 ray_dir=mix(\nmix(u_frustum_tl,u_frustum_tr,uv.x),mix(u_frustum_bl,u_frustum_br,uv.x),1.0-uv.y);vec3 dir=normalize(ray_dir);vec3 closest_point=dot(u_globe_pos,dir)*dir;float norm_dist_from_center=1.0-length(closest_point-u_globe_pos)/u_globe_radius;const float antialias_pixel=2.0;float antialias_factor=antialias_pixel*fwidth(norm_dist_from_center);float antialias=smoothstep(0.0,antialias_factor,norm_dist_from_center);vec4 raster=texture2D(u_image0,v_pos0);color=vec4(raster.rgb*antialias,raster.a*antialias);\n#else\ncolor=texture2D(u_image0,v_pos0);\n#endif\n#ifdef FOG\ncolor=fog_dither(fog_apply_premultiplied(color,v_fog_pos));\n#endif\ngl_FragColor=color;\n#ifdef TERRAIN_WIREFRAME\ngl_FragColor=vec4(1.0,0.0,0.0,0.8);\n#endif\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}", "uniform mat4 u_proj_matrix;uniform mat4 u_normalize_matrix;uniform mat4 u_globe_matrix;uniform mat4 u_merc_matrix;uniform float u_zoom_transition;uniform vec2 u_merc_center;uniform mat3 u_grid_matrix;uniform float u_skirt_height;\n#ifdef GLOBE_POLES\nattribute vec3 a_globe_pos;attribute vec2 a_uv;\n#else\nattribute vec2 a_pos;\n#endif\nvarying vec2 v_pos0;const float wireframeOffset=1e3;float mercatorXfromLng(float lng) {return (180.0+lng)/360.0;}float mercatorYfromLat(float lat) {return (180.0-(RAD_TO_DEG*log(tan(QUARTER_PI+lat/2.0*DEG_TO_RAD))))/360.0;}vec3 latLngToECEF(vec2 latLng) {latLng=DEG_TO_RAD*latLng;float cosLat=cos(latLng[0]);float sinLat=sin(latLng[0]);float cosLng=cos(latLng[1]);float sinLng=sin(latLng[1]);float sx=cosLat*sinLng*GLOBE_RADIUS;float sy=-sinLat*GLOBE_RADIUS;float sz=cosLat*cosLng*GLOBE_RADIUS;return vec3(sx,sy,sz);}void main() {\n#ifdef GLOBE_POLES\nvec3 globe_pos=a_globe_pos;vec2 uv=a_uv;\n#else\nfloat tiles=u_grid_matrix[0][2];float idx=u_grid_matrix[1][2];float idy=u_grid_matrix[2][2];vec3 decomposed_pos_and_skirt=decomposeToPosAndSkirt(a_pos);vec3 latLng=u_grid_matrix*vec3(decomposed_pos_and_skirt.xy,1.0);float mercatorY=mercatorYfromLat(latLng[0]);float uvY=mercatorY*tiles-idy;float mercatorX=mercatorXfromLng(latLng[1]);float uvX=mercatorX*tiles-idx;vec3 globe_pos=latLngToECEF(latLng.xy);vec2 merc_pos=vec2(mercatorX,mercatorY);vec2 uv=vec2(uvX,uvY);\n#endif\nv_pos0=uv;vec2 tile_pos=uv*EXTENT;vec3 globe_derived_up_vector=normalize(globe_pos)*u_tile_up_scale;\n#ifdef GLOBE_POLES\nvec3 up_vector=globe_derived_up_vector;\n#else\nvec3 up_vector=elevationVector(tile_pos);\n#endif\nfloat height=elevation(tile_pos);\n#ifdef TERRAIN_WIREFRAME\nheight+=wireframeOffset;\n#endif\nglobe_pos+=up_vector*height;\n#ifndef GLOBE_POLES\nglobe_pos-=globe_derived_up_vector*u_skirt_height*decomposed_pos_and_skirt.z;\n#endif\n#ifdef GLOBE_POLES\nvec4 interpolated_pos=u_globe_matrix*vec4(globe_pos,1.0);\n#else\nvec4 globe_world_pos=u_globe_matrix*vec4(globe_pos,1.0);vec4 merc_world_pos=vec4(0.0);if (u_zoom_transition > 0.0) {merc_world_pos=vec4(merc_pos,height-u_skirt_height*decomposed_pos_and_skirt.z,1.0);merc_world_pos.xy-=u_merc_center;merc_world_pos.x=wrap(merc_world_pos.x,-0.5,0.5);merc_world_pos=u_merc_matrix*merc_world_pos;}vec4 interpolated_pos=vec4(mix(globe_world_pos.xyz,merc_world_pos.xyz,u_zoom_transition),1.0);\n#endif\ngl_Position=u_proj_matrix*interpolated_pos;\n#ifdef FOG\nv_fog_pos=fog_position((u_normalize_matrix*vec4(globe_pos,1.0)).xyz);\n#endif\n}"), globeAtmosphere: di("uniform float u_transition;uniform highp float u_fadeout_range;uniform highp float u_temporal_offset;uniform vec3 u_start_color;uniform vec4 u_color;uniform vec4 u_space_color;uniform vec4 u_high_color;uniform float u_star_intensity;uniform float u_star_size;uniform float u_star_density;uniform float u_horizon_angle;uniform mat4 u_rotation_matrix;varying highp vec3 v_ray_dir;varying highp vec3 v_horizon_dir;highp float random(highp vec3 p) {p=fract(p*vec3(23.2342,97.1231,91.2342));p+=dot(p.zxy,p.yxz+123.1234);return fract(p.x*p.y);}float stars(vec3 p,float scale,vec2 offset) {vec2 uv_scale=(u_viewport/u_star_size)*scale;vec3 position=vec3(p.xy*uv_scale+offset*u_viewport,p.z);vec3 q=fract(position)-0.5;vec3 id=floor(position);float random_visibility=step(random(id),u_star_density);float circle=smoothstep(0.5+u_star_intensity,0.5,length(q));return circle*random_visibility;}void main() {highp vec3 dir=normalize(v_ray_dir);float globe_pos_dot_dir;\n#ifdef PROJECTION_GLOBE_VIEW\nglobe_pos_dot_dir=dot(u_globe_pos,dir);highp vec3 closest_point_forward=abs(globe_pos_dot_dir)*dir;float norm_dist_from_center=length(closest_point_forward-u_globe_pos)/u_globe_radius;if (norm_dist_from_center < 0.98) {discard;return;}\n#endif\nhighp vec3 horizon_dir=normalize(v_horizon_dir);float horizon_angle_mercator=dir.y < horizon_dir.y ?\n0.0 : max(acos(dot(dir,horizon_dir)),0.0);float horizon_angle;\n#ifdef PROJECTION_GLOBE_VIEW\nhighp vec3 closest_point=globe_pos_dot_dir*dir;float closest_point_to_center=length(closest_point-u_globe_pos);float theta=asin(clamp(closest_point_to_center/length(u_globe_pos),-1.0,1.0));horizon_angle=globe_pos_dot_dir < 0.0 ?\nPI-theta-u_horizon_angle : theta-u_horizon_angle;float angle_t=pow(u_transition,10.0);horizon_angle=mix(horizon_angle,horizon_angle_mercator,angle_t);\n#else\nhorizon_angle=horizon_angle_mercator;\n#endif\nhorizon_angle/=PI;float t=exp(-horizon_angle/u_fadeout_range);float alpha_0=u_color.a;float alpha_1=u_high_color.a;float alpha_2=u_space_color.a;vec3 color_stop_0=u_color.rgb;vec3 color_stop_1=u_high_color.rgb;vec3 color_stop_2=u_space_color.rgb;vec3 c0=mix(color_stop_2,color_stop_1,alpha_1);vec3 c1=mix(c0,color_stop_0,alpha_0);vec3 c2=mix(c0,c1,t);vec3 c =mix(color_stop_2,c2,t);float a0=mix(alpha_2,1.0,alpha_1);float a1=mix(a0,1.0,alpha_0);float a2=mix(a0,a1,t);float a =mix(alpha_2,a2,t);vec2 uv=gl_FragCoord.xy/u_viewport-0.5;float aspect_ratio=u_viewport.x/u_viewport.y;vec4 uv_dir=vec4(normalize(vec3(uv.x*aspect_ratio,uv.y,1.0)),1.0);uv_dir=u_rotation_matrix*uv_dir;vec3 n=abs(uv_dir.xyz);vec2 uv_remap=(n.x > n.y && n.x > n.z) ? uv_dir.yz/uv_dir.x:\n(n.y > n.x && n.y > n.z) ? uv_dir.zx/uv_dir.y:\nuv_dir.xy/uv_dir.z;uv_remap.x/=aspect_ratio;vec3 D=vec3(uv_remap,1.0);highp float star_field=0.0;if (u_star_intensity > 0.0) {star_field+=stars(D,1.2,vec2(0.0,0.0));star_field+=stars(D,1.0,vec2(1.0,0.0));star_field+=stars(D,0.8,vec2(0.0,1.0));star_field+=stars(D,0.6,vec2(1.0,1.0));star_field*=(1.0-pow(t,0.25+(1.0-u_high_color.a)*0.75));c+=star_field*alpha_2;}c=dither(c,gl_FragCoord.xy+u_temporal_offset);gl_FragColor=vec4(c,a);}", "attribute vec3 a_pos;attribute vec2 a_uv;uniform vec3 u_frustum_tl;uniform vec3 u_frustum_tr;uniform vec3 u_frustum_br;uniform vec3 u_frustum_bl;uniform float u_horizon;varying highp vec3 v_ray_dir;varying highp vec3 v_horizon_dir;void main() {v_ray_dir=mix(\nmix(u_frustum_tl,u_frustum_tr,a_uv.x),mix(u_frustum_bl,u_frustum_br,a_uv.x),a_uv.y);v_horizon_dir=mix(\nmix(u_frustum_tl,u_frustum_bl,u_horizon),mix(u_frustum_tr,u_frustum_br,u_horizon),a_uv.x);gl_Position=vec4(a_pos,1.0);}") }; function _i(e, t) { const i = e.replace(/\s*\/\/[^\n]*\n/g, "\n").split("\n"); for (let e of i) if (e = e.trim(), "#" === e[0] && e.includes("if") && !e.includes("endif")) { e = e.replace("#", "").replace(/ifdef|ifndef|elif|if/g, "").replace(/!|defined|\(|\)|\|\||&&/g, "").replace(/\s+/g, " ").trim(); const i = e.split(" "); for (const e of i) t.includes(e) || t.push(e); } } function di(e, t) { const i = /#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g, o = t.match(/attribute (highp |mediump |lowp )?([\w]+) ([\w]+)/g), r = {}, n = [...ai]; return _i(e, n), _i(t, n), { fragmentSource: e = e.replace(i, ((e, t, i, o, n) => (r[n] = !0, "define" === t ? `\n#ifndef HAS_UNIFORM_u_${n}\nvarying ${i} ${o} ${n};\n#else\nuniform ${i} ${o} u_${n};\n#endif\n` : `\n#ifdef HAS_UNIFORM_u_${n}\n ${i} ${o} ${n} = u_${n};\n#endif\n`))), vertexSource: t = t.replace(i, ((e, t, i, o, n) => { const s = "float" === o ? "vec2" : "vec4", a = n.match(/color/) ? "color" : s; return r[n] ? "define" === t ? `\n#ifndef HAS_UNIFORM_u_${n}\nuniform lowp float u_${n}_t;\nattribute ${i} ${s} a_${n};\nvarying ${i} ${o} ${n};\n#else\nuniform ${i} ${o} u_${n};\n#endif\n` : "vec4" === a ? `\n#ifndef HAS_UNIFORM_u_${n}\n ${n} = a_${n};\n#else\n ${i} ${o} ${n} = u_${n};\n#endif\n` : `\n#ifndef HAS_UNIFORM_u_${n}\n ${n} = unpack_mix_${a}(a_${n}, u_${n}_t);\n#else\n ${i} ${o} ${n} = u_${n};\n#endif\n` : "define" === t ? `\n#ifndef HAS_UNIFORM_u_${n}\nuniform lowp float u_${n}_t;\nattribute ${i} ${s} a_${n};\n#else\nuniform ${i} ${o} u_${n};\n#endif\n` : "vec4" === a ? `\n#ifndef HAS_UNIFORM_u_${n}\n ${i} ${o} ${n} = a_${n};\n#else\n ${i} ${o} ${n} = u_${n};\n#endif\n` : `\n#ifndef HAS_UNIFORM_u_${n}\n ${i} ${o} ${n} = unpack_mix_${a}(a_${n}, u_${n}_t);\n#else\n ${i} ${o} ${n} = u_${n};\n#endif\n` })), staticAttributes: o, usedDefines: n } } class pi { constructor() { this.boundProgram = null, this.boundLayoutVertexBuffer = null, this.boundPaintVertexBuffers = [], this.boundIndexBuffer = null, this.boundVertexOffset = null, this.boundDynamicVertexBuffers = [], this.vao = null; } bind(e, t, i, o, r, n, s) { this.context = e; let a = this.boundPaintVertexBuffers.length !== o.length; for (let e = 0; !a && e < o.length; e++) this.boundPaintVertexBuffers[e] !== o[e] && (a = !0); let l = this.boundDynamicVertexBuffers.length !== s.length; for (let e = 0; !l && e < s.length; e++) this.boundDynamicVertexBuffers[e] !== s[e] && (l = !0); if (!e.extVertexArrayObject || !this.vao || this.boundProgram !== t || this.boundLayoutVertexBuffer !== i || a || l || this.boundIndexBuffer !== r || this.boundVertexOffset !== n) this.freshBind(t, i, o, r, n, s); else { e.bindVertexArrayOES.set(this.vao); for (const e of s) e && e.bind(); r && r.dynamicDraw && r.bind(); } } freshBind(e, t, i, o, r, n) { let s; const a = e.numAttributes, l = this.context, c = l.gl; if (l.extVertexArrayObject) this.vao && this.destroy(), this.vao = l.extVertexArrayObject.createVertexArrayOES(), l.bindVertexArrayOES.set(this.vao), s = 0, this.boundProgram = e, this.boundLayoutVertexBuffer = t, this.boundPaintVertexBuffers = i, this.boundIndexBuffer = o, this.boundVertexOffset = r, this.boundDynamicVertexBuffers = n; else { s = l.currentNumAttributes || 0; for (let e = a; e < s; e++) c.disableVertexAttribArray(e); } t.enableAttributes(c, e), t.bind(), t.setVertexAttribPointers(c, e, r); for (const t of i) t.enableAttributes(c, e), t.bind(), t.setVertexAttribPointers(c, e, r); for (const t of n) t && (t.enableAttributes(c, e), t.bind(), t.setVertexAttribPointers(c, e, r)); o && o.bind(), l.currentNumAttributes = a; } destroy() { this.vao && (this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao), this.vao = null); } } function mi(t, i) { const o = Math.pow(2, i.canonical.z), r = i.canonical.y; return [new e.MercatorCoordinate(0, r / o).toLngLat().lat, new e.MercatorCoordinate(0, (r + 1) / o).toLngLat().lat] } function fi(t, i, o, r, n, s, a) { const l = t.context, c = l.gl, h = o.fbo; if (!h) return; t.prepareDrawTile(); const u = t.useProgram("hillshade"); l.activeTexture.set(c.TEXTURE0), c.bindTexture(c.TEXTURE_2D, h.colorAttachment.get()); const _ = ((e, t, i, o) => { const r = i.paint.get("hillshade-shadow-color"), n = i.paint.get("hillshade-highlight-color"), s = i.paint.get("hillshade-accent-color"); let a = i.paint.get("hillshade-illumination-direction") * (Math.PI / 180); "viewport" === i.paint.get("hillshade-illumination-anchor") && (a -= e.transform.angle); const l = !e.options.moving; return { u_matrix: o || e.transform.calculateProjMatrix(t.tileID.toUnwrapped(), l), u_image: 0, u_latrange: mi(0, t.tileID), u_light: [i.paint.get("hillshade-exaggeration"), a], u_shadow: r, u_highlight: n, u_accent: s } })(t, o, r, t.terrain ? i.projMatrix : null); t.prepareDrawProgram(l, u, i.toUnwrapped()); const { tileBoundsBuffer: d, tileBoundsIndexBuffer: p, tileBoundsSegments: m } = t.getTileBoundsBuffers(o); u.draw(l, c.TRIANGLES, n, s, a, e.CullFaceMode.disabled, _, r.id, d, p, m); } function gi(t, i, o) { if (!i.needsDEMTextureUpload) return; const r = t.context, n = r.gl; r.pixelStoreUnpackPremultiplyAlpha.set(!1), i.demTexture = i.demTexture || t.getTileTexture(o.stride); const s = o.getPixels(); i.demTexture ? i.demTexture.update(s, { premultiply: !1 }) : i.demTexture = new e.Texture(r, s, n.RGBA, { premultiply: !1 }), i.needsDEMTextureUpload = !1; } function vi(t, i, o, r, n, s) { const a = t.context, l = a.gl; if (!i.dem) return; const c = i.dem; if (a.activeTexture.set(l.TEXTURE1), gi(t, i, c), !i.demTexture) return; i.demTexture.bind(l.NEAREST, l.CLAMP_TO_EDGE); const h = c.dim; a.activeTexture.set(l.TEXTURE0); let u = i.fbo; if (!u) { const t = new e.Texture(a, { width: h, height: h, data: null }, l.RGBA); t.bind(l.LINEAR, l.CLAMP_TO_EDGE), u = i.fbo = a.createFramebuffer(h, h, !0), u.colorAttachment.set(t.texture); } a.bindFramebuffer.set(u.framebuffer), a.viewport.set([0, 0, h, h]); const { tileBoundsBuffer: _, tileBoundsIndexBuffer: d, tileBoundsSegments: p } = t.getMercatorTileBoundsBuffers(); t.useProgram("hillshadePrepare").draw(a, l.TRIANGLES, r, n, s, e.CullFaceMode.disabled, ((t, i) => { const o = i.stride, r = e.create(); return e.ortho(r, 0, e.EXTENT, -e.EXTENT, 0, 0, 1), e.translate(r, r, [0, -e.EXTENT, 0]), { u_matrix: r, u_image: 1, u_dimension: [o, o], u_zoom: t.overscaledZ, u_unpack: i.unpackVector } })(i.tileID, c), o.id, _, d, p), i.needsHillshadePrepare = !1; } const xi = t => ({ u_matrix: new e.UniformMatrix4f(t), u_image0: new e.Uniform1i(t), u_skirt_height: new e.Uniform1f(t) }), yi = (e, t) => ({ u_matrix: e, u_image0: 0, u_skirt_height: t }), bi = (e, t, i, o, r, n, s, a, l, c, h, u, _, d, p) => ({ u_proj_matrix: Float32Array.from(e), u_globe_matrix: t, u_normalize_matrix: Float32Array.from(o), u_merc_matrix: i, u_zoom_transition: r, u_merc_center: n, u_image0: 0, u_frustum_tl: s, u_frustum_tr: a, u_frustum_br: l, u_frustum_bl: c, u_globe_pos: h, u_globe_radius: u, u_viewport: _, u_grid_matrix: p ? Float32Array.from(p) : new Float32Array(9), u_skirt_height: d }); function wi(e, t) { return null != e && null != t && !(!e.hasData() || !t.hasData()) && null != e.demTexture && null != t.demTexture && e.tileID.key !== t.tileID.key } const Ti = new class { constructor() { this.operations = {}; } newMorphing(e, t, i, o, r) { if (e in this.operations) { const t = this.operations[e]; t.to.tileID.key !== i.tileID.key && (t.queued = i); } else this.operations[e] = { startTime: o, phase: 0, duration: r, from: t, to: i, queued: null }; } getMorphValuesForProxy(e) { if (!(e in this.operations)) return null; const t = this.operations[e]; return { from: t.from, to: t.to, phase: t.phase } } update(e) { for (const t in this.operations) { const i = this.operations[t]; for (i.phase = (e - i.startTime) / i.duration; i.phase >= 1 || !this._validOp(i);) if (!this._nextOp(i, e)) { delete this.operations[t]; break } } } _nextOp(e, t) { return !!e.queued && (e.from = e.to, e.to = e.queued, e.queued = null, e.phase = 0, e.startTime = t, !0) } _validOp(e) { return e.from.hasData() && e.to.hasData() } }, Ei = { 0: null, 1: "TERRAIN_VERTEX_MORPHING", 2: "TERRAIN_WIREFRAME" }; function Ci(e) { return 6 * Math.pow(1.5, 22 - e) } function Mi(e, t) { const i = 1 << e.z; return !t && (0 === e.x || e.x === i - 1) || 0 === e.y || e.y === i - 1 } const Ii = e => ({ u_matrix: e }); function Si(t, i, o, r, n) { if (n > 0) { const s = e.exported.now(), a = (s - t.timeAdded) / n, l = i ? (s - i.timeAdded) / n : -1, c = o.getSource(), h = r.coveringZoomLevel({ tileSize: c.tileSize, roundZoom: c.roundZoom }), u = !i || Math.abs(i.tileID.overscaledZ - h) > Math.abs(t.tileID.overscaledZ - h), _ = u && t.refreshedUponExpiration ? 1 : e.clamp(u ? a : 1 - l, 0, 1); return t.refreshedUponExpiration && a >= 1 && (t.refreshedUponExpiration = !1), i ? { opacity: 1, mix: 1 - _ } : { opacity: _, mix: 0 } } return { opacity: 1, mix: 0 } } class Di extends e.SourceCache { constructor(e) { const t = { type: "raster-dem", maxzoom: e.transform.maxZoom }, i = new z(je(), null), o = Pe("mock-dem", t, i, e.style); super("mock-dem", o, !1), o.setEventedParent(this), this._sourceLoaded = !0; } _loadTile(e, t) { e.state = "loaded", t(null); } } class Li extends e.SourceCache { constructor(e) { const t = Pe("proxy", { type: "geojson", maxzoom: e.transform.maxZoom }, new z(je(), null), e.style); super("proxy", t, !1), t.setEventedParent(this), this.map = this.getSource().map = e, this.used = this._sourceLoaded = !0, this.renderCache = [], this.renderCachePool = [], this.proxyCachedFBO = {}; } update(t, i, o) { if (t.freezeTileCoverage) return; this.transform = t; const r = t.coveringTiles({ tileSize: this._source.tileSize, minzoom: this._source.minzoom, maxzoom: this._source.maxzoom, roundZoom: this._source.roundZoom, reparseOverscaled: this._source.reparseOverscaled }).reduce(((i, o) => { if (i[o.key] = "", !this._tiles[o.key]) { const i = new e.Tile(o, this._source.tileSize * o.overscaleFactor(), t.tileZoom); i.state = "loaded", this._tiles[o.key] = i; } return i }), {}); for (const e in this._tiles) e in r || (this.freeFBO(e), this._tiles[e].unloadVectorData(), delete this._tiles[e]); } freeFBO(e) { const t = this.proxyCachedFBO[e]; if (void 0 !== t) { const i = Object.values(t); this.renderCachePool.push(...i), delete this.proxyCachedFBO[e]; } } deallocRenderCache() { this.renderCache.forEach((e => e.fb.destroy())), this.renderCache = [], this.renderCachePool = [], this.proxyCachedFBO = {}; } } class Ai extends e.OverscaledTileID { constructor(e, t, i) { super(e.overscaledZ, e.wrap, e.canonical.z, e.canonical.x, e.canonical.y), this.proxyTileKey = t, this.projMatrix = i; } } class zi extends e.Elevation { constructor(t, i) { super(), this.painter = t, this.terrainTileForTile = {}, this.prevTerrainTileForTile = {}; const [o, r, n] = function(t) { const i = new e.StructArrayLayout2i4, o = new e.StructArrayLayout3ui6, r = 131; i.reserve(17161), o.reserve(33800); const n = e.EXTENT / 128, s = e.EXTENT + n / 2, a = s + n; for (let t = -n; t < a; t += n) for (let o = -n; o < a; o += n) { const r = o < 0 || o > s || t < 0 || t > s ? 24575 : 0, n = e.clamp(Math.round(o), 0, e.EXTENT), a = e.clamp(Math.round(t), 0, e.EXTENT); i.emplaceBack(n + r, a); } const l = (e, t) => { const i = t * r + e; o.emplaceBack(i + 1, i, i + r), o.emplaceBack(i + r, i + r + 1, i + 1); }; for (let e = 1; e < 129; e++) for (let t = 1; t < 129; t++) l(t, e); return [0, 129].forEach((e => { for (let t = 0; t < 130; t++) l(t, e), l(e, t); })), [i, o, 32768] }(), s = t.context; this.gridBuffer = s.createVertexBuffer(o, e.posAttributes.members), this.gridIndexBuffer = s.createIndexBuffer(r), this.gridSegments = e.SegmentVector.simpleSegment(0, 0, o.length, r.length), this.gridNoSkirtSegments = e.SegmentVector.simpleSegment(0, 0, o.length, n), this.proxyCoords = [], this.proxiedCoords = {}, this._visibleDemTiles = [], this._drapedRenderBatches = [], this._sourceTilesOverlap = {}, this.proxySourceCache = new Li(i.map), this.orthoMatrix = e.create(), e.ortho(this.orthoMatrix, "globe" === this.painter.transform.projection.name ? .015 : 0, e.EXTENT, 0, e.EXTENT, 0, 1); const a = s.gl; this._overlapStencilMode = new e.StencilMode({ func: a.GEQUAL, mask: 255 }, 0, 255, a.KEEP, a.KEEP, a.REPLACE), this._previousZoom = t.transform.zoom, this.pool = [], this._findCoveringTileCache = {}, this._tilesDirty = {}, this.style = i, this._useVertexMorphing = !0, this._exaggeration = 1, this._mockSourceCache = new Di(i.map); } set style(e) { e.on("data", this._onStyleDataEvent.bind(this)), e.on("neworder", this._checkRenderCacheEfficiency.bind(this)), this._style = e, this._checkRenderCacheEfficiency(), this._style.map.on("moveend", (() => { this._clearLineLayersFromRenderCache(); })); } update(t, i, o) { if (t && t.terrain) { this._style !== t && (this.style = t), this.enabled = !0; const r = t.terrain.properties; this.sourceCache = 0 === t.terrain.drapeRenderMode ? this._mockSourceCache : t._getSourceCache(r.get("source")), this._exaggeration = r.get("exaggeration"); const n = () => { this.sourceCache.used && e.warnOnce(`Raster DEM source '${this.sourceCache.id}' is used both for terrain and as layer source.\nThis leads to lower resolution of hillshade. For full hillshade resolution but higher memory consumption, define another raster DEM source.`); const t = this.getScaledDemTileSize(); this.sourceCache.update(i, t, !0), this.resetTileLookupCache(this.sourceCache.id); }; this.sourceCache.usedForTerrain || (this.resetTileLookupCache(this.sourceCache.id), this.sourceCache.usedForTerrain = !0, n(), this._initializing = !0), n(), i.updateElevation(!0, o), this.resetTileLookupCache(this.proxySourceCache.id), this.proxySourceCache.update(i), this._emptyDEMTextureDirty = !0; } else this._disable(); } resetTileLookupCache(e) { this._findCoveringTileCache[e] = {}; } getScaledDemTileSize() { return this.sourceCache.getSource().tileSize / 128 * this.proxySourceCache.getSource().tileSize } _checkRenderCacheEfficiency() { const t = this.renderCacheEfficiency(this._style); this._style.map._optimizeForTerrain || 100 !== t.efficiency && e.warnOnce(`Terrain render cache efficiency is not optimal (${t.efficiency}%) and performance\n may be affected negatively, consider placing all background, fill and line layers before layer\n with id '${t.firstUndrapedLayer}' or create a map using optimizeForTerrain: true option.`); } _onStyleDataEvent(e) { e.coord && "source" === e.dataType ? this._clearRenderCacheForTile(e.sourceCacheId, e.coord) : "style" === e.dataType && (this._invalidateRenderCache = !0); } _disable() { if (this.enabled && (this.enabled = !1, this._sharedDepthStencil = void 0, this.proxySourceCache.deallocRenderCache(), this._style)) for (const e in this._style._sourceCaches) this._style._sourceCaches[e].usedForTerrain = !1; } destroy() { this._disable(), this._emptyDEMTexture && this._emptyDEMTexture.destroy(), this._emptyDepthBufferTexture && this._emptyDepthBufferTexture.destroy(), this.pool.forEach((e => e.fb.destroy())), this.pool = [], this._depthFBO && (this._depthFBO.destroy(), this._depthFBO = void 0, this._depthTexture = void 0); } _source() { return this.enabled ? this.sourceCache : null } isUsingMockSource() { return this.sourceCache === this._mockSourceCache } exaggeration() { return this._exaggeration } get visibleDemTiles() { return this._visibleDemTiles } get drapeBufferSize() { const e = 2 * this.proxySourceCache.getSource().tileSize; return [e, e] } set useVertexMorphing(e) { this._useVertexMorphing = e; } updateTileBinding(t) { if (!this.enabled) return; this.prevTerrainTileForTile = this.terrainTileForTile; const i = this.proxySourceCache, o = this.painter.transform; this._initializing && (this._initializing = 0 === o._centerAltitude && -1 === this.getAtPointOrZero(e.MercatorCoordinate.fromLngLat(o.center), -1), this._emptyDEMTextureDirty = !this._initializing); const r = this.proxyCoords = i.getIds().map((e => { const t = i.getTileByID(e).tileID; return t.projMatrix = o.calculateProjMatrix(t.toUnwrapped()), t })); ! function(t, i) { const o = i.transform.pointCoordinate(i.transform.getCameraPoint()), r = new e.pointGeometry(o.x, o.y); t.sort(((t, i) => { if (i.overscaledZ - t.overscaledZ) return i.overscaledZ - t.overscaledZ; const o = new e.pointGeometry(t.canonical.x + (1 << t.canonical.z) * t.wrap, t.canonical.y), n = new e.pointGeometry(i.canonical.x + (1 << i.canonical.z) * i.wrap, i.canonical.y), s = r.mult(1 << t.canonical.z); return s.x -= .5, s.y -= .5, s.distSqr(o) - s.distSqr(n) })); }(r, this.painter), this._previousZoom = o.zoom; const n = this.proxyToSource || {}; this.proxyToSource = {}, r.forEach((e => { this.proxyToSource[e.key] = {}; })), this.terrainTileForTile = {}; const s = this._style._sourceCaches; for (const e in s) { const i = s[e]; if (!i.used) continue; if (i !== this.sourceCache && this.resetTileLookupCache(i.id), this._setupProxiedCoordsForOrtho(i, t[e], n), i.usedForTerrain) continue; const o = t[e]; i.getSource().reparseOverscaled && this._assignTerrainTiles(o); } this.proxiedCoords[i.id] = r.map((e => new Ai(e, e.key, this.orthoMatrix))), this._assignTerrainTiles(r), this._prepareDEMTextures(), this._setupDrapedRenderBatches(), this._initFBOPool(), this._setupRenderCache(n), this.renderingToTexture = !1, this._updateTimestamp = e.exported.now(); const a = {}; this._visibleDemTiles = []; for (const e of this.proxyCoords) { const t = this.terrainTileForTile[e.key]; if (!t) continue; const i = t.tileID.key; i in a || (this._visibleDemTiles.push(t), a[i] = i); } } _assignTerrainTiles(e) { this._initializing || e.forEach((e => { if (this.terrainTileForTile[e.key]) return; const t = this._findTileCoveringTileID(e, this.sourceCache); t && (this.terrainTileForTile[e.key] = t); })); } _prepareDEMTextures() { const e = this.painter.context, t = e.gl; for (const i in this.terrainTileForTile) { const o = this.terrainTileForTile[i], r = o.dem; !r || o.demTexture && !o.needsDEMTextureUpload || (e.activeTexture.set(t.TEXTURE1), gi(this.painter, o, r)); } } _prepareDemTileUniforms(e, t, i, o) { if (!t || null == t.demTexture) return !1; const r = e.tileID.canonical, n = Math.pow(2, t.tileID.canonical.z - r.z), s = o || ""; return i[`u_dem_tl${s}`] = [r.x * n % 1, r.y * n % 1], i[`u_dem_scale${s}`] = n, !0 } get emptyDEMTexture() { return !this._emptyDEMTextureDirty && this._emptyDEMTexture ? this._emptyDEMTexture : this._updateEmptyDEMTexture() } get emptyDepthBufferTexture() { const t = this.painter.context, i = t.gl; if (!this._emptyDepthBufferTexture) { const o = new e.RGBAImage({ width: 1, height: 1 }, Uint8Array.of(255, 255, 255, 255)); this._emptyDepthBufferTexture = new e.Texture(t, o, i.RGBA, { premultiply: !1 }); } return this._emptyDepthBufferTexture } _getLoadedAreaMinimum() { let e = 0; const t = this._visibleDemTiles.reduce(((t, i) => { if (!i.dem) return t; const o = i.dem.tree.minimums[0]; return o > 0 && e++, t + o }), 0); return e ? t / e : 0 } _updateEmptyDEMTexture() { const t = this.painter.context, i = t.gl; t.activeTexture.set(i.TEXTURE2); const o = this._getLoadedAreaMinimum(), r = new e.RGBAImage({ width: 1, height: 1 }, new Uint8Array(e.DEMData.pack(o, this.sourceCache.getSource().encoding))); this._emptyDEMTextureDirty = !1; let n = this._emptyDEMTexture; return n ? n.update(r, { premultiply: !1 }) : n = this._emptyDEMTexture = new e.Texture(t, r, i.RGBA, { premultiply: !1 }), n } setupElevationDraw(t, i, o) { const r = this.painter.context, n = r.gl, s = (a = this.sourceCache.getSource().encoding, { u_dem: 2, u_dem_prev: 4, u_dem_unpack: e.DEMData.getUnpackVector(a), u_dem_tl: [0, 0], u_dem_tl_prev: [0, 0], u_dem_scale: 0, u_dem_scale_prev: 0, u_dem_size: 0, u_dem_lerp: 1, u_depth: 3, u_depth_size_inv: [0, 0], u_exaggeration: 0 }); var a; s.u_dem_size = this.sourceCache.getSource().tileSize, s.u_exaggeration = this.exaggeration(); let l = null, c = null, h = 1; if (o && o.morphing && this._useVertexMorphing) { const e = o.morphing.srcDemTile, i = o.morphing.dstDemTile; h = o.morphing.phase, e && i && (this._prepareDemTileUniforms(t, e, s, "_prev") && (c = e), this._prepareDemTileUniforms(t, i, s) && (l = i)); } if (c && l ? (r.activeTexture.set(n.TEXTURE2), l.demTexture.bind(n.NEAREST, n.CLAMP_TO_EDGE, n.NEAREST), r.activeTexture.set(n.TEXTURE4), c.demTexture.bind(n.NEAREST, n.CLAMP_TO_EDGE, n.NEAREST), s.u_dem_lerp = h) : (l = this.terrainTileForTile[t.tileID.key], r.activeTexture.set(n.TEXTURE2), (this._prepareDemTileUniforms(t, l, s) ? l.demTexture : this.emptyDEMTexture).bind(n.NEAREST, n.CLAMP_TO_EDGE)), r.activeTexture.set(n.TEXTURE3), o && o.useDepthForOcclusion ? (this._depthTexture && this._depthTexture.bind(n.NEAREST, n.CLAMP_TO_EDGE), this._depthFBO && (s.u_depth_size_inv = [1 / this._depthFBO.width, 1 / this._depthFBO.height])) : (this.emptyDepthBufferTexture.bind(n.NEAREST, n.CLAMP_TO_EDGE), s.u_depth_size_inv = [1, 1]), o && o.useMeterToDem && l) { const t = (1 << l.tileID.canonical.z) * e.mercatorZfromAltitude(1, this.painter.transform.center.lat) * this.sourceCache.getSource().tileSize; s.u_meter_to_dem = t; } if (o && o.labelPlaneMatrixInv && (s.u_label_plane_matrix_inv = o.labelPlaneMatrixInv), i.setTerrainUniformValues(r, s), "globe" === this.painter.transform.projection.name) { const e = this.globeUniformValues(this.painter.transform, t.tileID.canonical, o && o.useDenormalizedUpVectorScale); i.setGlobeUniformValues(r, e); } } globeUniformValues(t, i, o) { const r = t.projection; return { u_tile_tl_up: r.upVector(i, 0, 0), u_tile_tr_up: r.upVector(i, e.EXTENT, 0), u_tile_br_up: r.upVector(i, e.EXTENT, e.EXTENT), u_tile_bl_up: r.upVector(i, 0, e.EXTENT), u_tile_up_scale: o ? e.globeMetersToEcef(1) : r.upVectorScale(i, t.center.lat, t.worldSize).metersToTile } } renderToBackBuffer(t) { const i = this.painter, o = this.painter.context; 0 !== t.length && (o.bindFramebuffer.set(null), o.viewport.set([0, 0, i.width, i.height]), i.gpuTimingDeferredRenderStart(), this.renderingToTexture = !1, function(t, i, o, r, n) { if ("globe" === t.transform.projection.name) ! function(t, i, o, r, n) { const s = t.context, a = s.gl; let l, c; const h = t.options.showTerrainWireframe ? 2 : 0, u = t.transform, _ = e.globeUseCustomAntiAliasing(t, s, u), d = (e, i) => { if (c === e) return; const o = [Ei[e], "PROJECTION_GLOBE_VIEW"]; _ && o.push("CUSTOM_ANTIALIASING"), i && o.push(Ei[h]), l = t.useProgram("globeRaster", null, o), c = e; }, p = t.colorModeForRenderPass(), m = new e.DepthMode(a.LEQUAL, e.DepthMode.ReadWrite, t.depthRangeFor3D); Ti.update(n); const f = e.calculateGlobeMercatorMatrix(u), g = [e.mercatorXfromLng(u.center.lng), e.mercatorYfromLat(u.center.lat)], v = h ? [!1, !0] : [!1], x = t.globeSharedBuffers, y = [u.width * e.exported.devicePixelRatio, u.height * e.exported.devicePixelRatio], b = Float32Array.from(u.globeMatrix), w = { useDenormalizedUpVectorScale: !0 }; if (v.forEach((h => { const u = t.transform, _ = Ci(u.zoom) * i.exaggeration(); c = -1; const v = h ? a.LINES : a.TRIANGLES; for (const c of r) { const r = o.getTile(c), T = e.StencilMode.disabled, E = i.prevTerrainTileForTile[c.key], C = i.terrainTileForTile[c.key]; wi(E, C) && Ti.newMorphing(c.key, E, C, n, 250), s.activeTexture.set(a.TEXTURE0), r.texture.bind(a.LINEAR, a.CLAMP_TO_EDGE); const M = Ti.getMorphValuesForProxy(c.key), I = M ? 1 : 0; M && e.extend$1(w, { morphing: { srcDemTile: M.from, dstDemTile: M.to, phase: e.easeCubicInOut(M.phase) } }); const S = e.tileCornersToBounds(c.canonical), D = e.getLatitudinalLod(S.getCenter().lat), L = e.getGridMatrix(c.canonical, S, D, u.worldSize / u._pixelsPerMercatorPixel), A = e.globeNormalizeECEF(e.globeTileBounds(c.canonical)), z = bi(u.projMatrix, b, f, A, e.globeToMercatorTransition(u.zoom), g, u.frustumCorners.TL, u.frustumCorners.TR, u.frustumCorners.BR, u.frustumCorners.BL, u.globeCenterInViewSpace, u.globeRadius, y, _, L); if (d(I, h), i.setupElevationDraw(r, l, w), t.prepareDrawProgram(s, l, c.toUnwrapped()), x) { const [i, o, r] = h ? x.getWirefameBuffers(t.context, D) : x.getGridBuffers(D, 0 !== _); l.draw(s, v, m, T, p, e.CullFaceMode.backCCW, z, "globe_raster", i, o, r); } } })), x) { const n = ["GLOBE_POLES", "PROJECTION_GLOBE_VIEW"]; _ && n.push("CUSTOM_ANTIALIASING"), l = t.useProgram("globeRaster", null, n); for (const n of r) { const { x: r, y: c, z: h } = n.canonical, _ = 0 === c, d = c === (1 << h) - 1, [f, v, b, T] = x.getPoleBuffers(h); if (T && (_ || d)) { const c = o.getTile(n); s.activeTexture.set(a.TEXTURE0), c.texture.bind(a.LINEAR, a.CLAMP_TO_EDGE); let x = e.globePoleMatrixForTile(h, r, u); const E = e.globeNormalizeECEF(e.globeTileBounds(n.canonical)), C = (t, i) => t.draw(s, a.TRIANGLES, m, e.StencilMode.disabled, p, e.CullFaceMode.disabled, bi(u.projMatrix, x, x, E, 0, g, u.frustumCorners.TL, u.frustumCorners.TR, u.frustumCorners.BR, u.frustumCorners.BL, u.globeCenterInViewSpace, u.globeRadius, y, 0), "globe_pole_raster", i, b, T); i.setupElevationDraw(c, l, w), t.prepareDrawProgram(s, l, n.toUnwrapped()), _ && C(l, f), d && (x = e.scale(e.create(), x, [1, -1, 1]), C(l, v)); } } } }(t, i, o, r, n); else { const s = t.context, a = s.gl; let l, c; const h = t.options.showTerrainWireframe ? 2 : 0, u = (e, i) => { if (c === e) return; const o = [Ei[e]]; i && o.push(Ei[h]), l = t.useProgram("terrainRaster", null, o), c = e; }, _ = t.colorModeForRenderPass(), d = new e.DepthMode(a.LEQUAL, e.DepthMode.ReadWrite, t.depthRangeFor3D); Ti.update(n); const p = t.transform, m = Ci(p.zoom) * i.exaggeration(); (h ? [!1, !0] : [!1]).forEach((h => { c = -1; const f = h ? a.LINES : a.TRIANGLES, [g, v] = h ? i.getWirefameBuffer() : [i.gridIndexBuffer, i.gridSegments]; for (const c of r) { const r = o.getTile(c), x = e.StencilMode.disabled, y = i.prevTerrainTileForTile[c.key], b = i.terrainTileForTile[c.key]; wi(y, b) && Ti.newMorphing(c.key, y, b, n, 250), s.activeTexture.set(a.TEXTURE0), r.texture.bind(a.LINEAR, a.CLAMP_TO_EDGE, a.LINEAR_MIPMAP_NEAREST); const w = Ti.getMorphValuesForProxy(c.key), T = w ? 1 : 0; let E; w && (E = { morphing: { srcDemTile: w.from, dstDemTile: w.to, phase: e.easeCubicInOut(w.phase) } }); const C = yi(c.projMatrix, Mi(c.canonical, p.renderWorldCopies) ? m / 10 : m); u(T, h), i.setupElevationDraw(r, l, E), t.prepareDrawProgram(s, l, c.toUnwrapped()), l.draw(s, f, d, x, _, e.CullFaceMode.backCCW, C, "terrain_raster", i.gridBuffer, g, v); } })); } }(i, this, this.proxySourceCache, t, this._updateTimestamp), this.renderingToTexture = !0, i.gpuTimingDeferredRenderEnd(), t.splice(0, t.length)); } renderBatch(t) { if (0 === this._drapedRenderBatches.length) return t + 1; this.renderingToTexture = !0; const i = this.painter, o = this.painter.context, r = this.proxySourceCache, n = this.proxiedCoords[r.id], s = this._drapedRenderBatches.shift(), a = [], l = i.style.order; let c = 0; for (const h of n) { const n = r.getTileByID(h.proxyTileKey), u = r.proxyCachedFBO[h.key] ? r.proxyCachedFBO[h.key][t] : void 0, _ = void 0 !== u ? r.renderCache[u] : this.pool[c++], d = void 0 !== u; if (n.texture = _.tex, d && !_.dirty) { a.push(n.tileID); continue } let p; o.bindFramebuffer.set(_.fb.framebuffer), this.renderedToTile = !1, _.dirty && (o.clear({ color: e.Color.transparent, stencil: 0 }), _.dirty = !1); for (let e = s.start; e <= s.end; ++e) { const t = i.style._layers[l[e]]; if (t.isHidden(i.transform.zoom)) continue; const r = i.style._getLayerSourceCache(t), n = r ? this.proxyToSource[h.key][r.id] : [h]; if (!n) continue; const s = n; o.viewport.set([0, 0, _.fb.width, _.fb.height]), p !== (r ? r.id : null) && (this._setupStencil(_, n, t, r), p = r ? r.id : null), i.renderLayer(i, r, t, s); } this.renderedToTile ? (_.dirty = !0, a.push(n.tileID)) : d || --c, 5 === c && (c = 0, this.renderToBackBuffer(a)); } return this.renderToBackBuffer(a), this.renderingToTexture = !1, o.bindFramebuffer.set(null), o.viewport.set([0, 0, i.width, i.height]), s.end + 1 } postRender() {} renderCacheEfficiency(e) { const t = e.order.length; if (0 === t) return { efficiency: 100 }; let i, o = 0, r = 0, n = !1; for (let s = 0; s < t; ++s) { const t = e._layers[e.order[s]]; this._style.isLayerDraped(t) ? (n && ++o, ++r) : n || (n = !0, i = t.id); } return 0 === r ? { efficiency: 100 } : { efficiency: 100 * (1 - o / r), firstUndrapedLayer: i } } getMinElevationBelowMSL() { let e = 0; return this._visibleDemTiles.filter((e => e.dem)).forEach((t => { e = Math.min(e, t.dem.tree.minimums[0]); })), 0 === e ? e : (e - 30) * this._exaggeration } raycast(e, t, i) { if (!this._visibleDemTiles) return null; const o = this._visibleDemTiles.filter((e => e.dem)).map((o => { const r = o.tileID, n = 1 << r.overscaledZ, { x: s, y: a } = r.canonical, l = s / n, c = (s + 1) / n, h = a / n, u = (a + 1) / n; return { minx: l, miny: h, maxx: c, maxy: u, t: o.dem.tree.raycastRoot(l, h, c, u, e, t, i), tile: o } })); o.sort(((e, t) => (null !== e.t ? e.t : Number.MAX_VALUE) - (null !== t.t ? t.t : Number.MAX_VALUE))); for (const r of o) { if (null == r.t) return null; const o = r.tile.dem.tree.raycast(r.minx, r.miny, r.maxx, r.maxy, e, t, i); if (null != o) return o } return null } _createFBO() { const t = this.painter.context, i = t.gl, o = this.drapeBufferSize; t.activeTexture.set(i.TEXTURE0); const r = new e.Texture(t, { width: o[0], height: o[1], data: null }, i.RGBA); r.bind(i.LINEAR, i.CLAMP_TO_EDGE); const n = t.createFramebuffer(o[0], o[1], !1); return n.colorAttachment.set(r.texture), n.depthAttachment = new Ee(t, n.framebuffer), void 0 === this._sharedDepthStencil ? (this._sharedDepthStencil = t.createRenderbuffer(t.gl.DEPTH_STENCIL, o[0], o[1]), this._stencilRef = 0, n.depthAttachment.set(this._sharedDepthStencil), t.clear({ stencil: 0 })) : n.depthAttachment.set(this._sharedDepthStencil), t.extTextureFilterAnisotropic && !t.extTextureFilterAnisotropicForceOff && i.texParameterf(i.TEXTURE_2D, t.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT, t.extTextureFilterAnisotropicMax), { fb: n, tex: r, dirty: !1 } } _initFBOPool() { for (; this.pool.length < Math.min(5, this.proxyCoords.length);) this.pool.push(this._createFBO()); } _shouldDisableRenderCache() { if (this._style.light && this._style.light.hasTransition()) return !0; for (const e in this._style._sourceCaches) if (this._style._sourceCaches[e].hasTransition()) return !0; return this._style.order.some((e => { const t = this._style._layers[e], i = t.isHidden(this.painter.transform.zoom); return "custom" === t.type ? !i && t.shouldRedrape() : !i && t.hasTransition() })) } _clearLineLayersFromRenderCache() { let t = !1; for (const e of this._style._getSources()) if (e instanceof Ie) { t = !0; break } if (!t) return; const i = {}; for (let t = 0; t < this._style.order.length; ++t) { const o = this._style._layers[this._style.order[t]], r = this._style._getLayerSourceCache(o); if (r && !i[r.id] && !o.isHidden(this.painter.transform.zoom) && "line" === o.type && o.widthExpression() instanceof e.ZoomDependentExpression) { i[r.id] = !0; for (const e of this.proxyCoords) { const t = this.proxyToSource[e.key][r.id]; if (t) for (const e of t) this._clearRenderCacheForTile(r.id, e); } } } } _clearRasterLayersFromRenderCache() { let e = !1; for (const t in this._style._sourceCaches) if (this._style._sourceCaches[t]._source instanceof Se) { e = !0; break } if (!e) return; const t = {}; for (let e = 0; e < this._style.order.length; ++e) { const i = this._style._layers[this._style.order[e]], o = this._style._getLayerSourceCache(i); if (!o || t[o.id]) continue; if (i.isHidden(this.painter.transform.zoom) || "raster" !== i.type) continue; const r = i.paint.get("raster-fade-duration"); for (const e of this.proxyCoords) { const t = this.proxyToSource[e.key][o.id]; if (t) for (const e of t) { const t = Si(o.getTile(e), o.findLoadedParent(e, 0), o, this.painter.transform, r); (1 !== t.opacity || 0 !== t.mix) && this._clearRenderCacheForTile(o.id, e); } } } } _setupDrapedRenderBatches() { const e = this._style.order, t = e.length; if (0 === t) return; const i = []; let o, r = 0, n = this._style._layers[e[r]]; for (; !this._style.isLayerDraped(n) && n.isHidden(this.painter.transform.zoom) && ++r < t;) n = this._style._layers[e[r]]; for (; r < t; ++r) { const t = this._style._layers[e[r]]; t.isHidden(this.painter.transform.zoom) || (this._style.isLayerDraped(t) ? void 0 === o && (o = r) : void 0 !== o && (i.push({ start: o, end: r - 1 }), o = void 0)); } void 0 !== o && i.push({ start: o, end: r - 1 }), this._drapedRenderBatches = i; } _setupRenderCache(e) { const t = this.proxySourceCache; if (this._shouldDisableRenderCache() || this._invalidateRenderCache) { if (this._invalidateRenderCache = !1, t.renderCache.length > t.renderCachePool.length) { const e = Object.values(t.proxyCachedFBO); t.proxyCachedFBO = {}; for (let i = 0; i < e.length; ++i) { const o = Object.values(e[i]); t.renderCachePool.push(...o); } } return } this._clearRasterLayersFromRenderCache(); const i = this.proxyCoords, o = this._tilesDirty; for (let r = i.length - 1; r >= 0; r--) { const n = i[r]; if (t.getTileByID(n.key), void 0 !== t.proxyCachedFBO[n.key]) { const i = e[n.key], r = this.proxyToSource[n.key]; let s = 0; for (const e in r) { const t = r[e], n = i[e]; if (!n || n.length !== t.length || t.some(((t, i) => t !== n[i] || o[e] && o[e].hasOwnProperty(t.key)))) { s = -1; break }++s; } for (const e in t.proxyCachedFBO[n.key]) t.renderCache[t.proxyCachedFBO[n.key][e]].dirty = s < 0 || s !== Object.values(i).length; } } const r = [...this._drapedRenderBatches]; r.sort(((e, t) => t.end - t.start - (e.end - e.start))); for (const e of r) for (const o of i) { if (t.proxyCachedFBO[o.key]) continue; let i = t.renderCachePool.pop(); void 0 === i && t.renderCache.length < 50 && (i = t.renderCache.length, t.renderCache.push(this._createFBO())), void 0 !== i && (t.proxyCachedFBO[o.key] = {}, t.proxyCachedFBO[o.key][e.start] = i, t.renderCache[i].dirty = !0); } this._tilesDirty = {}; } _setupStencil(e, t, i, o) { if (!o || !this._sourceTilesOverlap[o.id]) return void(this._overlapStencilType && (this._overlapStencilType = !1)); const r = this.painter.context, n = r.gl; if (t.length <= 1) return void(this._overlapStencilType = !1); let s; if (i.isTileClipped()) s = t.length, this._overlapStencilMode.test = { func: n.EQUAL, mask: 255 }, this._overlapStencilType = "Clip"; else { if (!(t[0].overscaledZ > t[t.length - 1].overscaledZ)) return void(this._overlapStencilType = !1); s = 1, this._overlapStencilMode.test = { func: n.GREATER, mask: 255 }, this._overlapStencilType = "Mask"; } this._stencilRef + s > 255 && (r.clear({ stencil: 0 }), this._stencilRef = 0), this._stencilRef += s, this._overlapStencilMode.ref = this._stencilRef, i.isTileClipped() && this._renderTileClippingMasks(t, this._overlapStencilMode.ref); } clipOrMaskOverlapStencilType() { return "Clip" === this._overlapStencilType || "Mask" === this._overlapStencilType } stencilModeForRTTOverlap(t) { return this.renderingToTexture && this._overlapStencilType ? ("Clip" === this._overlapStencilType && (this._overlapStencilMode.ref = this.painter._tileClippingMaskIDs[t.key]), this._overlapStencilMode) : e.StencilMode.disabled } _renderTileClippingMasks(t, i) { const o = this.painter, r = this.painter.context, n = r.gl; o._tileClippingMaskIDs = {}, r.setColorMode(e.ColorMode.disabled), r.setDepthMode(e.DepthMode.disabled); const s = o.useProgram("clippingMask"); for (const a of t) { const t = o._tileClippingMaskIDs[a.key] = --i; s.draw(r, n.TRIANGLES, e.DepthMode.disabled, new e.StencilMode({ func: n.ALWAYS, mask: 0 }, t, 255, n.KEEP, n.KEEP, n.REPLACE), e.ColorMode.disabled, e.CullFaceMode.disabled, Ii(a.projMatrix), "$clipping", o.tileExtentBuffer, o.quadTriangleIndexBuffer, o.tileExtentSegments); } } pointCoordinate(t) { const i = this.painter.transform; if (t.x < 0 || t.x > i.width || t.y < 0 || t.y > i.height) return null; const o = [t.x, t.y, 1, 1]; e.transformMat4$1(o, o, i.pixelMatrixInverse), e.scale$1(o, o, 1 / o[3]), o[0] /= i.worldSize, o[1] /= i.worldSize; const r = i._camera.position, n = e.mercatorZfromAltitude(1, i.center.lat), s = [r[0], r[1], r[2] / n, 0], a = e.subtract([], o.slice(0, 3), s); e.normalize(a, a); const l = this.raycast(s, a, this._exaggeration); return null !== l && l ? (e.scaleAndAdd(s, s, a, l), s[3] = s[2], s[2] *= n, s) : null } drawDepth() { const t = this.painter, i = t.context, o = this.proxySourceCache, r = Math.ceil(t.width), n = Math.ceil(t.height); if (!this._depthFBO || this._depthFBO.width === r && this._depthFBO.height === n || (this._depthFBO.destroy(), this._depthFBO = void 0, this._depthTexture = void 0), !this._depthFBO) { const t = i.gl, o = i.createFramebuffer(r, n, !0); i.activeTexture.set(t.TEXTURE0); const s = new e.Texture(i, { width: r, height: n, data: null }, t.RGBA); s.bind(t.NEAREST, t.CLAMP_TO_EDGE), o.colorAttachment.set(s.texture); const a = i.createRenderbuffer(i.gl.DEPTH_COMPONENT16, r, n); o.depthAttachment.set(a), this._depthFBO = o, this._depthTexture = s; } i.bindFramebuffer.set(this._depthFBO.framebuffer), i.viewport.set([0, 0, r, n]), function(t, i, o, r) { if ("globe" === t.transform.projection.name) return; const n = t.context, s = n.gl; n.clear({ depth: 1 }); const a = t.useProgram("terrainDepth"), l = new e.DepthMode(s.LESS, e.DepthMode.ReadWrite, t.depthRangeFor3D); for (const t of r) { const r = o.getTile(t), c = yi(t.projMatrix, 0); i.setupElevationDraw(r, a), a.draw(n, s.TRIANGLES, l, e.StencilMode.disabled, e.ColorMode.unblended, e.CullFaceMode.backCCW, c, "terrain_depth", i.gridBuffer, i.gridIndexBuffer, i.gridNoSkirtSegments); } }(t, this, o, this.proxyCoords); } _setupProxiedCoordsForOrtho(e, t, i) { if (e.getSource() instanceof Ae) return this._setupProxiedCoordsForImageSource(e, t, i); this._findCoveringTileCache[e.id] = this._findCoveringTileCache[e.id] || {}; const o = this.proxiedCoords[e.id] = [], r = this.proxyCoords; for (let t = 0; t < r.length; t++) { const n = r[t], s = this._findTileCoveringTileID(n, e); if (s) { const t = this._createProxiedId(n, s, i[n.key] && i[n.key][e.id]); o.push(t), this.proxyToSource[n.key][e.id] = [t]; } } let n = !1; for (let r = 0; r < t.length; r++) { const s = e.getTile(t[r]); if (!s || !s.hasData()) continue; const a = this._findTileCoveringTileID(s.tileID, this.proxySourceCache); if (a && a.tileID.canonical.z !== s.tileID.canonical.z) { const t = this.proxyToSource[a.tileID.key][e.id], r = this._createProxiedId(a.tileID, s, i[a.tileID.key] && i[a.tileID.key][e.id]); t ? t.splice(t.length - 1, 0, r) : this.proxyToSource[a.tileID.key][e.id] = [r], o.push(r), n = !0; } } this._sourceTilesOverlap[e.id] = n; } _setupProxiedCoordsForImageSource(t, i, o) { if (!t.getSource().loaded()) return; const r = this.proxiedCoords[t.id] = [], n = this.proxyCoords, s = t.getSource(), a = new e.pointGeometry(s.tileID.x, s.tileID.y)._div(1 << s.tileID.z), l = s.coordinates.map(e.MercatorCoordinate.fromLngLat).reduce(((e, t) => (e.min.x = Math.min(e.min.x, t.x - a.x), e.min.y = Math.min(e.min.y, t.y - a.y), e.max.x = Math.max(e.max.x, t.x - a.x), e.max.y = Math.max(e.max.y, t.y - a.y), e)), { min: new e.pointGeometry(Number.MAX_VALUE, Number.MAX_VALUE), max: new e.pointGeometry(-Number.MAX_VALUE, -Number.MAX_VALUE) }), c = (t, i) => { const o = t.wrap + t.canonical.x / (1 << t.canonical.z), r = t.canonical.y / (1 << t.canonical.z), n = e.EXTENT / (1 << t.canonical.z), s = i.wrap + i.canonical.x / (1 << i.canonical.z), a = i.canonical.y / (1 << i.canonical.z); return o + n < s + l.min.x || o > s + l.max.x || r + n < a + l.min.y || r > a + l.max.y }; for (let e = 0; e < n.length; e++) { const s = n[e]; for (let e = 0; e < i.length; e++) { const n = t.getTile(i[e]); if (!n || !n.hasData()) continue; if (c(s, n.tileID)) continue; const a = this._createProxiedId(s, n, o[s.key] && o[s.key][t.id]), l = this.proxyToSource[s.key][t.id]; l ? l.push(a) : this.proxyToSource[s.key][t.id] = [a], r.push(a); } } } _createProxiedId(t, i, o) { let r = this.orthoMatrix; if (o) { const e = o.find((e => e.key === i.tileID.key)); if (e) return e } if (i.tileID.key !== t.key) { const o = t.canonical.z - i.tileID.canonical.z; let n, s, a; r = e.create(); const l = i.tileID.wrap - t.wrap << t.overscaledZ; o > 0 ? (n = e.EXTENT >> o, s = n * ((i.tileID.canonical.x << o) - t.canonical.x + l), a = n * ((i.tileID.canonical.y << o) - t.canonical.y)) : (n = e.EXTENT << -o, s = e.EXTENT * (i.tileID.canonical.x - (t.canonical.x + l << -o)), a = e.EXTENT * (i.tileID.canonical.y - (t.canonical.y << -o))), e.ortho(r, 0, n, 0, n, 0, 1), e.translate(r, r, [s, a, 0]); } return new Ai(i.tileID, t.key, r) } _findTileCoveringTileID(t, i) { let o = i.getTile(t); if (o && o.hasData()) return o; const r = this._findCoveringTileCache[i.id], n = r[t.key]; if (o = n ? i.getTileByID(n) : null, o && o.hasData() || null === n) return o; let s = o ? o.tileID : t, a = s.overscaledZ; const l = i.getSource().minzoom, c = []; if (!n) { const r = i.getSource().maxzoom; if (t.canonical.z >= r) { const o = t.canonical.z - r; i.getSource().reparseOverscaled ? (a = Math.max(t.canonical.z + 2, i.transform.tileZoom), s = new e.OverscaledTileID(a, t.wrap, r, t.canonical.x >> o, t.canonical.y >> o)) : 0 !== o && (a = r, s = new e.OverscaledTileID(a, t.wrap, r, t.canonical.x >> o, t.canonical.y >> o)); } s.key !== t.key && (c.push(s.key), o = i.getTile(s)); } const h = e => { c.forEach((t => { r[t] = e; })), c.length = 0; }; for (a -= 1; a >= l && (!o || !o.hasData()); a--) { o && h(o.tileID.key); const e = s.calculateScaledKey(a); if (o = i.getTileByID(e), o && o.hasData()) break; const t = r[e]; if (null === t) break; void 0 === t ? c.push(e) : o = i.getTileByID(t); } return h(o ? o.tileID.key : null), o && o.hasData() ? o : null } findDEMTileFor(e) { return this.enabled ? this._findTileCoveringTileID(e, this.sourceCache) : null } prepareDrawTile() { this.renderedToTile = !0; } _clearRenderCacheForTile(e, t) { let i = this._tilesDirty[e]; i || (i = this._tilesDirty[e] = {}), i[t.key] = !0; } getWirefameBuffer() { if (!this.wireframeSegments) { const t = function(t) { let i = 0; const o = new e.StructArrayLayout2ui4, r = 131; for (let e = 1; e < 129; e++) { for (let t = 1; t < 129; t++) i = e * r + t, o.emplaceBack(i, i + 1), o.emplaceBack(i, i + r), o.emplaceBack(i + 1, i + r), 128 === e && o.emplaceBack(i + r, i + r + 1); o.emplaceBack(i + 1, i + 1 + r); } return o }(); this.wireframeIndexBuffer = this.painter.context.createIndexBuffer(t), this.wireframeSegments = e.SegmentVector.simpleSegment(0, 0, this.gridBuffer.length, t.length); } return [this.wireframeIndexBuffer, this.wireframeSegments] } } class Pi { static cacheKey(e, t, i, o) { let r = `${t}${o?o.cacheKey:""}`; for (const t of i) e.usedDefines.includes(t) && (r += `/${t}`); return r } constructor(t, i, o, r, n, s) { const a = t.gl; this.program = a.createProgram(); const l = function(e) { const t = []; for (let i = 0; i < e.length; i++) { if (null === e[i]) continue; const o = e[i].split(" "); t.push(o.pop()); } return t }(o.staticAttributes), c = r ? r.getBinderAttributes() : [], h = l.concat(c); let u = r ? r.defines() : []; u = u.concat(s.map((e => `#define ${e}`))); const _ = t.isWebGL2 ? "#version 300 es\n" : "", d = _ + u.concat(t.extStandardDerivatives && 0 === _.length ? "#extension GL_OES_standard_derivatives : enable\n".concat(hi) : hi, hi, ci, li.fragmentSource, si.fragmentSource, o.fragmentSource).join("\n"), p = _ + u.concat("\n#ifdef GL_ES\nprecision highp float;\n#else\n\n#if !defined(lowp)\n#define lowp\n#endif\n\n#if !defined(mediump)\n#define mediump\n#endif\n\n#if !defined(highp)\n#define highp\n#endif\n\n#endif", ci, li.vertexSource, si.vertexSource, ni.vertexSource, o.vertexSource).join("\n"), m = a.createShader(a.FRAGMENT_SHADER); if (a.isContextLost()) return void(this.failedToCreate = !0); a.shaderSource(m, d), a.compileShader(m), a.attachShader(this.program, m); const f = a.createShader(a.VERTEX_SHADER); if (a.isContextLost()) this.failedToCreate = !0; else { a.shaderSource(f, p), a.compileShader(f), a.attachShader(this.program, f), this.attributes = {}, this.numAttributes = h.length; for (let e = 0; e < this.numAttributes; e++) h[e] && (a.bindAttribLocation(this.program, e, h[e]), this.attributes[h[e]] = e); a.linkProgram(this.program), a.deleteShader(f), a.deleteShader(m), this.fixedUniforms = n(t), this.binderUniforms = r ? r.getUniforms(t) : [], s.includes("TERRAIN") && (this.terrainUniforms = (t => ({ u_dem: new e.Uniform1i(t), u_dem_prev: new e.Uniform1i(t), u_dem_unpack: new e.Uniform4f(t), u_dem_tl: new e.Uniform2f(t), u_dem_scale: new e.Uniform1f(t), u_dem_tl_prev: new e.Uniform2f(t), u_dem_scale_prev: new e.Uniform1f(t), u_dem_size: new e.Uniform1f(t), u_dem_lerp: new e.Uniform1f(t), u_exaggeration: new e.Uniform1f(t), u_depth: new e.Uniform1i(t), u_depth_size_inv: new e.Uniform2f(t), u_meter_to_dem: new e.Uniform1f(t), u_label_plane_matrix_inv: new e.UniformMatrix4f(t) }))(t)), s.includes("GLOBE") && (this.globeUniforms = (t => ({ u_tile_tl_up: new e.Uniform3f(t), u_tile_tr_up: new e.Uniform3f(t), u_tile_br_up: new e.Uniform3f(t), u_tile_bl_up: new e.Uniform3f(t), u_tile_up_scale: new e.Uniform1f(t) }))(t)), s.includes("FOG") && (this.fogUniforms = (t => ({ u_fog_matrix: new e.UniformMatrix4f(t), u_fog_range: new e.Uniform2f(t), u_fog_color: new e.Uniform4f(t), u_fog_horizon_blend: new e.Uniform1f(t), u_fog_temporal_offset: new e.Uniform1f(t), u_frustum_tl: new e.Uniform3f(t), u_frustum_tr: new e.Uniform3f(t), u_frustum_br: new e.Uniform3f(t), u_frustum_bl: new e.Uniform3f(t), u_globe_pos: new e.Uniform3f(t), u_globe_radius: new e.Uniform1f(t), u_globe_transition: new e.Uniform1f(t), u_is_globe: new e.Uniform1i(t), u_viewport: new e.Uniform2f(t) }))(t)); } } setTerrainUniformValues(e, t) { if (!this.terrainUniforms) return; const i = this.terrainUniforms; if (!this.failedToCreate) { e.program.set(this.program); for (const e in t) i[e] && i[e].set(this.program, e, t[e]); } } setGlobeUniformValues(e, t) { if (!this.globeUniforms) return; const i = this.globeUniforms; if (!this.failedToCreate) { e.program.set(this.program); for (const e in t) i[e] && i[e].set(this.program, e, t[e]); } } setFogUniformValues(e, t) { if (!this.fogUniforms) return; const i = this.fogUniforms; if (!this.failedToCreate) { e.program.set(this.program); for (const e in t) i[e].set(this.program, e, t[e]); } } draw(e, t, i, o, r, n, s, a, l, c, h, u, _, d, p) { const m = e.gl; if (this.failedToCreate) return; e.program.set(this.program), e.setDepthMode(i), e.setStencilMode(o), e.setColorMode(r), e.setCullFace(n); for (const e of Object.keys(this.fixedUniforms)) this.fixedUniforms[e].set(this.program, e, s[e]); d && d.setUniforms(this.program, e, this.binderUniforms, u, { zoom: _ }); const f = { [m.LINES]: 2, [m.TRIANGLES]: 3, [m.LINE_STRIP]: 1 }[t]; for (const i of h.get()) { const o = i.vaos || (i.vaos = {}); (o[a] || (o[a] = new pi)).bind(e, this, l, d ? d.getPaintVertexBuffers() : [], c, i.vertexOffset, p || []), m.drawElements(t, i.primitiveLength * f, m.UNSIGNED_SHORT, i.primitiveOffset * f * 2); } } } function Ri(e, t) { const i = Math.pow(2, t.tileID.overscaledZ), o = t.tileSize * Math.pow(2, e.transform.tileZoom) / i, r = o * (t.tileID.canonical.x + t.tileID.wrap * i), n = o * t.tileID.canonical.y; return { u_image: 0, u_texsize: t.imageAtlasTexture.size, u_tile_units_to_pixels: 1 / P(t, 1, e.transform.tileZoom), u_pixel_coord_upper: [r >> 16, n >> 16], u_pixel_coord_lower: [65535 & r, 65535 & n] } } const Oi = e.create(), Bi = (t, i, o, r, n, s, a, l, c, h, u) => { const _ = i.style.light, d = _.properties.get("position"), p = [d.x, d.y, d.z], m = e.create$1(); "viewport" === _.properties.get("anchor") && (e.fromRotation(m, -i.transform.angle), e.transformMat3(p, p, m)); const f = _.properties.get("color"), g = i.transform, v = { u_matrix: t, u_lightpos: p, u_lightintensity: _.properties.get("intensity"), u_lightcolor: [f.r, f.g, f.b], u_vertical_gradient: +o, u_opacity: r, u_tile_id: [0, 0, 0], u_zoom_transition: 0, u_inv_rot_matrix: Oi, u_merc_center: [0, 0], u_up_dir: [0, 0, 0], u_height_lift: 0, u_ao: n, u_edge_radius: s }; return "globe" === g.projection.name && (v.u_tile_id = [a.canonical.x, a.canonical.y, 1 << a.canonical.z], v.u_zoom_transition = c, v.u_inv_rot_matrix = u, v.u_merc_center = h, v.u_up_dir = g.projection.upVector(new e.CanonicalTileID(0, 0, 0), h[0] * e.EXTENT, h[1] * e.EXTENT), v.u_height_lift = l), v }, ki = (t, i, o, r, n, s, a, l, c, h, u, _) => { const d = Bi(t, i, o, r, n, s, a, c, h, u, _), p = { u_height_factor: -Math.pow(2, a.overscaledZ) / l.tileSize / 8 }; return e.extend(d, Ri(i, l), p) }, Fi = e => ({ u_matrix: e }), Ui = (t, i, o) => e.extend(Fi(t), Ri(i, o)), Ni = (e, t) => ({ u_matrix: e, u_world: t }), Gi = (t, i, o, r) => e.extend(Ui(t, i, o), { u_world: r }), ji = e.create(), Zi = (t, i, o, r, n, s) => { const a = t.transform, l = "globe" === a.projection.name; let c; if ("map" === s.paint.get("circle-pitch-alignment")) if (l) { const t = e.globePixelsToTileUnits(a.zoom, i.canonical) * a._pixelsPerMercatorPixel; c = Float32Array.from([t, 0, 0, t]); } else c = a.calculatePixelsToTileUnitsMatrix(o); else c = new Float32Array([a.pixelsToGLUnits[0], 0, 0, a.pixelsToGLUnits[1]]); const h = { u_camera_to_center_distance: a.cameraToCenterDistance, u_matrix: t.translatePosMatrix(i.projMatrix, o, s.paint.get("circle-translate"), s.paint.get("circle-translate-anchor")), u_device_pixel_ratio: e.exported.devicePixelRatio, u_extrude_scale: c, u_inv_rot_matrix: ji, u_merc_center: [0, 0], u_tile_id: [0, 0, 0], u_zoom_transition: 0, u_up_dir: [0, 0, 0] }; if (l) { h.u_inv_rot_matrix = r, h.u_merc_center = n, h.u_tile_id = [i.canonical.x, i.canonical.y, 1 << i.canonical.z], h.u_zoom_transition = e.globeToMercatorTransition(a.zoom); const t = n[0] * e.EXTENT, o = n[1] * e.EXTENT; h.u_up_dir = a.projection.upVector(new e.CanonicalTileID(0, 0, 0), t, o); } return h }, Vi = e => { const t = []; return "map" === e.paint.get("circle-pitch-alignment") && t.push("PITCH_WITH_MAP"), "map" === e.paint.get("circle-pitch-scale") && t.push("SCALE_WITH_MAP"), t }, Wi = (t, i, o, r) => { const n = e.EXTENT / o.tileSize; return { u_matrix: t, u_camera_to_center_distance: i.getCameraToCenterDistance(r), u_extrude_scale: [i.pixelsToGLUnits[0] / n, i.pixelsToGLUnits[1] / n] } }, Xi = (e, t, i = 1) => ({ u_matrix: e, u_color: t, u_overlay: 0, u_overlay_scale: i }), qi = e.create(), $i = (t, i, o, r, n, s, a) => { const l = t.transform, c = "globe" === l.projection.name, h = c ? e.globePixelsToTileUnits(l.zoom, i.canonical) * l._pixelsPerMercatorPixel : P(o, 1, s), u = { u_matrix: i.projMatrix, u_extrude_scale: h, u_intensity: a, u_inv_rot_matrix: qi, u_merc_center: [0, 0], u_tile_id: [0, 0, 0], u_zoom_transition: 0, u_up_dir: [0, 0, 0] }; if (c) { u.u_inv_rot_matrix = r, u.u_merc_center = n, u.u_tile_id = [i.canonical.x, i.canonical.y, 1 << i.canonical.z], u.u_zoom_transition = e.globeToMercatorTransition(l.zoom); const t = n[0] * e.EXTENT, o = n[1] * e.EXTENT; u.u_up_dir = l.projection.upVector(new e.CanonicalTileID(0, 0, 0), t, o); } return u }, Hi = (e, t, i, o, r, n, s) => { const a = e.transform, l = a.calculatePixelsToTileUnitsMatrix(t); return { u_matrix: Ji(e, t, i, o), u_pixels_to_tile_units: l, u_device_pixel_ratio: n, u_units_to_pixels: [1 / a.pixelsToGLUnits[0], 1 / a.pixelsToGLUnits[1]], u_dash_image: 0, u_gradient_image: 1, u_image_height: r, u_texsize: Qi(i) ? t.lineAtlasTexture.size : [0, 0], u_tile_units_to_pixels: Ki(t, e.transform), u_alpha_discard_threshold: 0, u_trim_offset: s } }, Yi = (e, t, i, o, r) => { const n = e.transform; return { u_matrix: Ji(e, t, i, o), u_texsize: t.imageAtlasTexture.size, u_pixels_to_tile_units: n.calculatePixelsToTileUnitsMatrix(t), u_device_pixel_ratio: r, u_image: 0, u_tile_units_to_pixels: Ki(t, n), u_units_to_pixels: [1 / n.pixelsToGLUnits[0], 1 / n.pixelsToGLUnits[1]], u_alpha_discard_threshold: 0 } }; function Ki(e, t) { return 1 / P(e, 1, t.tileZoom) } function Ji(e, t, i, o) { return e.translatePosMatrix(o || t.tileID.projMatrix, t, i.paint.get("line-translate"), i.paint.get("line-translate-anchor")) } function Qi(e) { const t = e.paint.get("line-dasharray").value; return t.value || "constant" !== t.kind } const eo = (e, t, i, o, r, n) => { return { u_matrix: e, u_tl_parent: t, u_scale_parent: i, u_fade_t: o.mix, u_opacity: o.opacity * r.paint.get("raster-opacity"), u_image0: 0, u_image1: 1, u_brightness_low: r.paint.get("raster-brightness-min"), u_brightness_high: r.paint.get("raster-brightness-max"), u_saturation_factor: (a = r.paint.get("raster-saturation"), a > 0 ? 1 - 1 / (1.001 - a) : -a), u_contrast_factor: (s = r.paint.get("raster-contrast"), s > 0 ? 1 / (1 - s) : 1 + s), u_spin_weights: to(r.paint.get("raster-hue-rotate")), u_perspective_transform: n }; var s, a; }; function to(e) { e *= Math.PI / 180; const t = Math.sin(e), i = Math.cos(e); return [(2 * i + 1) / 3, (-Math.sqrt(3) * t - i + 1) / 3, (Math.sqrt(3) * t - i + 1) / 3] } const io = e.create(), oo = (t, i, o, r, n, s, a, l, c, h, u, _, d, p, m, f) => { const g = n.transform, v = { u_is_size_zoom_constant: +("constant" === t || "source" === t), u_is_size_feature_constant: +("constant" === t || "camera" === t), u_size_t: i ? i.uSizeT : 0, u_size: i ? i.uSize : 0, u_camera_to_center_distance: g.cameraToCenterDistance, u_rotate_symbol: +o, u_aspect_ratio: g.width / g.height, u_fade_change: n.options.fadeDuration ? n.symbolFadeChange : 1, u_matrix: s, u_label_plane_matrix: a, u_coord_matrix: l, u_is_text: +c, u_pitch_with_map: +r, u_texsize: h, u_texture: 0, u_tile_id: [0, 0, 0], u_zoom_transition: 0, u_inv_rot_matrix: io, u_merc_center: [0, 0], u_camera_forward: [0, 0, 0], u_ecef_origin: [0, 0, 0], u_tile_matrix: io, u_up_vector: [0, -1, 0] }; return "globe" === f.name && (v.u_tile_id = [u.canonical.x, u.canonical.y, 1 << u.canonical.z], v.u_zoom_transition = _, v.u_inv_rot_matrix = p, v.u_merc_center = d, v.u_camera_forward = g._camera.forward(), v.u_ecef_origin = e.globeECEFOrigin(g.globeMatrix, u.toUnwrapped()), v.u_tile_matrix = Float32Array.from(g.globeMatrix), v.u_up_vector = m), v }, ro = (t, i, o, r, n, s, a, l, c, h, u, _, d, p, m, f, g) => e.extend(oo(t, i, o, r, n, s, a, l, c, h, _, d, p, m, f, g), { u_gamma_scale: r ? n.transform.cameraToCenterDistance * Math.cos(n.terrain ? 0 : n.transform._pitch) : 1, u_device_pixel_ratio: e.exported.devicePixelRatio, u_is_halo: +u }), no = (t, i, o, r, n, s, a, l, c, h, u, _, d, p, m, f) => e.extend(ro(t, i, o, r, n, s, a, l, !0, c, !0, u, _, d, p, m, f), { u_texsize_icon: h, u_texture_icon: 1 }), so = (e, t, i) => ({ u_matrix: e, u_opacity: t, u_color: i }), ao = (t, i, o, r, n) => e.extend(function(e, t, i) { const o = t.imageManager.getPattern(e.toString()), { width: r, height: n } = t.imageManager.getPixelSize(), s = Math.pow(2, i.tileID.overscaledZ), a = i.tileSize * Math.pow(2, t.transform.tileZoom) / s, l = a * (i.tileID.canonical.x + i.tileID.wrap * s), c = a * i.tileID.canonical.y; return { u_image: 0, u_pattern_tl: o.tl, u_pattern_br: o.br, u_texsize: [r, n], u_pattern_size: o.displaySize, u_tile_units_to_pixels: 1 / P(i, 1, t.transform.tileZoom), u_pixel_coord_upper: [l >> 16, c >> 16], u_pixel_coord_lower: [65535 & l, 65535 & c] } }(r, o, n), { u_matrix: t, u_opacity: i }), lo = { fillExtrusion: t => ({ u_matrix: new e.UniformMatrix4f(t), u_lightpos: new e.Uniform3f(t), u_lightintensity: new e.Uniform1f(t), u_lightcolor: new e.Uniform3f(t), u_vertical_gradient: new e.Uniform1f(t), u_opacity: new e.Uniform1f(t), u_edge_radius: new e.Uniform1f(t), u_ao: new e.Uniform2f(t), u_tile_id: new e.Uniform3f(t), u_zoom_transition: new e.Uniform1f(t), u_inv_rot_matrix: new e.UniformMatrix4f(t), u_merc_center: new e.Uniform2f(t), u_up_dir: new e.Uniform3f(t), u_height_lift: new e.Uniform1f(t) }), fillExtrusionPattern: t => ({ u_matrix: new e.UniformMatrix4f(t), u_lightpos: new e.Uniform3f(t), u_lightintensity: new e.Uniform1f(t), u_lightcolor: new e.Uniform3f(t), u_vertical_gradient: new e.Uniform1f(t), u_height_factor: new e.Uniform1f(t), u_edge_radius: new e.Uniform1f(t), u_ao: new e.Uniform2f(t), u_tile_id: new e.Uniform3f(t), u_zoom_transition: new e.Uniform1f(t), u_inv_rot_matrix: new e.UniformMatrix4f(t), u_merc_center: new e.Uniform2f(t), u_up_dir: new e.Uniform3f(t), u_height_lift: new e.Uniform1f(t), u_image: new e.Uniform1i(t), u_texsize: new e.Uniform2f(t), u_pixel_coord_upper: new e.Uniform2f(t), u_pixel_coord_lower: new e.Uniform2f(t), u_tile_units_to_pixels: new e.Uniform1f(t), u_opacity: new e.Uniform1f(t) }), fill: t => ({ u_matrix: new e.UniformMatrix4f(t) }), fillPattern: t => ({ u_matrix: new e.UniformMatrix4f(t), u_image: new e.Uniform1i(t), u_texsize: new e.Uniform2f(t), u_pixel_coord_upper: new e.Uniform2f(t), u_pixel_coord_lower: new e.Uniform2f(t), u_tile_units_to_pixels: new e.Uniform1f(t) }), fillOutline: t => ({ u_matrix: new e.UniformMatrix4f(t), u_world: new e.Uniform2f(t) }), fillOutlinePattern: t => ({ u_matrix: new e.UniformMatrix4f(t), u_world: new e.Uniform2f(t), u_image: new e.Uniform1i(t), u_texsize: new e.Uniform2f(t), u_pixel_coord_upper: new e.Uniform2f(t), u_pixel_coord_lower: new e.Uniform2f(t), u_tile_units_to_pixels: new e.Uniform1f(t) }), circle: t => ({ u_camera_to_center_distance: new e.Uniform1f(t), u_extrude_scale: new e.UniformMatrix2f(t), u_device_pixel_ratio: new e.Uniform1f(t), u_matrix: new e.UniformMatrix4f(t), u_inv_rot_matrix: new e.UniformMatrix4f(t), u_merc_center: new e.Uniform2f(t), u_tile_id: new e.Uniform3f(t), u_zoom_transition: new e.Uniform1f(t), u_up_dir: new e.Uniform3f(t) }), collisionBox: t => ({ u_matrix: new e.UniformMatrix4f(t), u_camera_to_center_distance: new e.Uniform1f(t), u_extrude_scale: new e.Uniform2f(t) }), collisionCircle: t => ({ u_matrix: new e.UniformMatrix4f(t), u_inv_matrix: new e.UniformMatrix4f(t), u_camera_to_center_distance: new e.Uniform1f(t), u_viewport_size: new e.Uniform2f(t) }), debug: t => ({ u_color: new e.UniformColor(t), u_matrix: new e.UniformMatrix4f(t), u_overlay: new e.Uniform1i(t), u_overlay_scale: new e.Uniform1f(t) }), clippingMask: t => ({ u_matrix: new e.UniformMatrix4f(t) }), heatmap: t => ({ u_extrude_scale: new e.Uniform1f(t), u_intensity: new e.Uniform1f(t), u_matrix: new e.UniformMatrix4f(t), u_inv_rot_matrix: new e.UniformMatrix4f(t), u_merc_center: new e.Uniform2f(t), u_tile_id: new e.Uniform3f(t), u_zoom_transition: new e.Uniform1f(t), u_up_dir: new e.Uniform3f(t) }), heatmapTexture: t => ({ u_image: new e.Uniform1i(t), u_color_ramp: new e.Uniform1i(t), u_opacity: new e.Uniform1f(t) }), hillshade: t => ({ u_matrix: new e.UniformMatrix4f(t), u_image: new e.Uniform1i(t), u_latrange: new e.Uniform2f(t), u_light: new e.Uniform2f(t), u_shadow: new e.UniformColor(t), u_highlight: new e.UniformColor(t), u_accent: new e.UniformColor(t) }), hillshadePrepare: t => ({ u_matrix: new e.UniformMatrix4f(t), u_image: new e.Uniform1i(t), u_dimension: new e.Uniform2f(t), u_zoom: new e.Uniform1f(t), u_unpack: new e.Uniform4f(t) }), line: t => ({ u_matrix: new e.UniformMatrix4f(t), u_pixels_to_tile_units: new e.UniformMatrix2f(t), u_device_pixel_ratio: new e.Uniform1f(t), u_units_to_pixels: new e.Uniform2f(t), u_dash_image: new e.Uniform1i(t), u_gradient_image: new e.Uniform1i(t), u_image_height: new e.Uniform1f(t), u_texsize: new e.Uniform2f(t), u_tile_units_to_pixels: new e.Uniform1f(t), u_alpha_discard_threshold: new e.Uniform1f(t), u_trim_offset: new e.Uniform2f(t) }), linePattern: t => ({ u_matrix: new e.UniformMatrix4f(t), u_texsize: new e.Uniform2f(t), u_pixels_to_tile_units: new e.UniformMatrix2f(t), u_device_pixel_ratio: new e.Uniform1f(t), u_image: new e.Uniform1i(t), u_units_to_pixels: new e.Uniform2f(t), u_tile_units_to_pixels: new e.Uniform1f(t), u_alpha_discard_threshold: new e.Uniform1f(t) }), raster: t => ({ u_matrix: new e.UniformMatrix4f(t), u_tl_parent: new e.Uniform2f(t), u_scale_parent: new e.Uniform1f(t), u_fade_t: new e.Uniform1f(t), u_opacity: new e.Uniform1f(t), u_image0: new e.Uniform1i(t), u_image1: new e.Uniform1i(t), u_brightness_low: new e.Uniform1f(t), u_brightness_high: new e.Uniform1f(t), u_saturation_factor: new e.Uniform1f(t), u_contrast_factor: new e.Uniform1f(t), u_spin_weights: new e.Uniform3f(t), u_perspective_transform: new e.Uniform2f(t) }), symbolIcon: t => ({ u_is_size_zoom_constant: new e.Uniform1i(t), u_is_size_feature_constant: new e.Uniform1i(t), u_size_t: new e.Uniform1f(t), u_size: new e.Uniform1f(t), u_camera_to_center_distance: new e.Uniform1f(t), u_rotate_symbol: new e.Uniform1i(t), u_aspect_ratio: new e.Uniform1f(t), u_fade_change: new e.Uniform1f(t), u_matrix: new e.UniformMatrix4f(t), u_label_plane_matrix: new e.UniformMatrix4f(t), u_coord_matrix: new e.UniformMatrix4f(t), u_is_text: new e.Uniform1i(t), u_pitch_with_map: new e.Uniform1i(t), u_texsize: new e.Uniform2f(t), u_tile_id: new e.Uniform3f(t), u_zoom_transition: new e.Uniform1f(t), u_inv_rot_matrix: new e.UniformMatrix4f(t), u_merc_center: new e.Uniform2f(t), u_camera_forward: new e.Uniform3f(t), u_tile_matrix: new e.UniformMatrix4f(t), u_up_vector: new e.Uniform3f(t), u_ecef_origin: new e.Uniform3f(t), u_texture: new e.Uniform1i(t) }), symbolSDF: t => ({ u_is_size_zoom_constant: new e.Uniform1i(t), u_is_size_feature_constant: new e.Uniform1i(t), u_size_t: new e.Uniform1f(t), u_size: new e.Uniform1f(t), u_camera_to_center_distance: new e.Uniform1f(t), u_rotate_symbol: new e.Uniform1i(t), u_aspect_ratio: new e.Uniform1f(t), u_fade_change: new e.Uniform1f(t), u_matrix: new e.UniformMatrix4f(t), u_label_plane_matrix: new e.UniformMatrix4f(t), u_coord_matrix: new e.UniformMatrix4f(t), u_is_text: new e.Uniform1i(t), u_pitch_with_map: new e.Uniform1i(t), u_texsize: new e.Uniform2f(t), u_texture: new e.Uniform1i(t), u_gamma_scale: new e.Uniform1f(t), u_device_pixel_ratio: new e.Uniform1f(t), u_tile_id: new e.Uniform3f(t), u_zoom_transition: new e.Uniform1f(t), u_inv_rot_matrix: new e.UniformMatrix4f(t), u_merc_center: new e.Uniform2f(t), u_camera_forward: new e.Uniform3f(t), u_tile_matrix: new e.UniformMatrix4f(t), u_up_vector: new e.Uniform3f(t), u_ecef_origin: new e.Uniform3f(t), u_is_halo: new e.Uniform1i(t) }), symbolTextAndIcon: t => ({ u_is_size_zoom_constant: new e.Uniform1i(t), u_is_size_feature_constant: new e.Uniform1i(t), u_size_t: new e.Uniform1f(t), u_size: new e.Uniform1f(t), u_camera_to_center_distance: new e.Uniform1f(t), u_rotate_symbol: new e.Uniform1i(t), u_aspect_ratio: new e.Uniform1f(t), u_fade_change: new e.Uniform1f(t), u_matrix: new e.UniformMatrix4f(t), u_label_plane_matrix: new e.UniformMatrix4f(t), u_coord_matrix: new e.UniformMatrix4f(t), u_is_text: new e.Uniform1i(t), u_pitch_with_map: new e.Uniform1i(t), u_texsize: new e.Uniform2f(t), u_texsize_icon: new e.Uniform2f(t), u_texture: new e.Uniform1i(t), u_texture_icon: new e.Uniform1i(t), u_gamma_scale: new e.Uniform1f(t), u_device_pixel_ratio: new e.Uniform1f(t), u_is_halo: new e.Uniform1i(t) }), background: t => ({ u_matrix: new e.UniformMatrix4f(t), u_opacity: new e.Uniform1f(t), u_color: new e.UniformColor(t) }), backgroundPattern: t => ({ u_matrix: new e.UniformMatrix4f(t), u_opacity: new e.Uniform1f(t), u_image: new e.Uniform1i(t), u_pattern_tl: new e.Uniform2f(t), u_pattern_br: new e.Uniform2f(t), u_texsize: new e.Uniform2f(t), u_pattern_size: new e.Uniform2f(t), u_pixel_coord_upper: new e.Uniform2f(t), u_pixel_coord_lower: new e.Uniform2f(t), u_tile_units_to_pixels: new e.Uniform1f(t) }), terrainRaster: xi, terrainDepth: xi, skybox: t => ({ u_matrix: new e.UniformMatrix4f(t), u_sun_direction: new e.Uniform3f(t), u_cubemap: new e.Uniform1i(t), u_opacity: new e.Uniform1f(t), u_temporal_offset: new e.Uniform1f(t) }), skyboxGradient: t => ({ u_matrix: new e.UniformMatrix4f(t), u_color_ramp: new e.Uniform1i(t), u_center_direction: new e.Uniform3f(t), u_radius: new e.Uniform1f(t), u_opacity: new e.Uniform1f(t), u_temporal_offset: new e.Uniform1f(t) }), skyboxCapture: t => ({ u_matrix_3f: new e.UniformMatrix3f(t), u_sun_direction: new e.Uniform3f(t), u_sun_intensity: new e.Uniform1f(t), u_color_tint_r: new e.Uniform4f(t), u_color_tint_m: new e.Uniform4f(t), u_luminance: new e.Uniform1f(t) }), globeRaster: t => ({ u_proj_matrix: new e.UniformMatrix4f(t), u_globe_matrix: new e.UniformMatrix4f(t), u_normalize_matrix: new e.UniformMatrix4f(t), u_merc_matrix: new e.UniformMatrix4f(t), u_zoom_transition: new e.Uniform1f(t), u_merc_center: new e.Uniform2f(t), u_image0: new e.Uniform1i(t), u_grid_matrix: new e.UniformMatrix3f(t), u_skirt_height: new e.Uniform1f(t), u_frustum_tl: new e.Uniform3f(t), u_frustum_tr: new e.Uniform3f(t), u_frustum_br: new e.Uniform3f(t), u_frustum_bl: new e.Uniform3f(t), u_globe_pos: new e.Uniform3f(t), u_globe_radius: new e.Uniform1f(t), u_viewport: new e.Uniform2f(t) }), globeAtmosphere: t => ({ u_frustum_tl: new e.Uniform3f(t), u_frustum_tr: new e.Uniform3f(t), u_frustum_br: new e.Uniform3f(t), u_frustum_bl: new e.Uniform3f(t), u_horizon: new e.Uniform1f(t), u_transition: new e.Uniform1f(t), u_fadeout_range: new e.Uniform1f(t), u_color: new e.Uniform4f(t), u_high_color: new e.Uniform4f(t), u_space_color: new e.Uniform4f(t), u_star_intensity: new e.Uniform1f(t), u_star_density: new e.Uniform1f(t), u_star_size: new e.Uniform1f(t), u_temporal_offset: new e.Uniform1f(t), u_horizon_angle: new e.Uniform1f(t), u_rotation_matrix: new e.UniformMatrix4f(t) }) }; let co; function ho(t, i, o, r, n, s, a) { const l = t.context, c = l.gl, h = t.transform, u = t.useProgram("collisionBox"), _ = []; let d = 0, p = 0; for (let m = 0; m < r.length; m++) { const f = r[m], g = i.getTile(f), v = g.getBucket(o); if (!v) continue; const x = yt(f, v, h); let y = x; 0 === n[0] && 0 === n[1] || (y = t.translatePosMatrix(x, g, n, s)); const b = a ? v.textCollisionBox : v.iconCollisionBox, w = v.collisionCircleArray; if (w.length > 0) { const t = e.create(), i = y; e.mul(t, v.placementInvProjMatrix, h.glCoordMatrix), e.mul(t, t, v.placementViewportMatrix), _.push({ circleArray: w, circleOffset: p, transform: i, invTransform: t, projection: v.getProjection() }), d += w.length / 4, p = d; } b && (t.terrain && t.terrain.setupElevationDraw(g, u), u.draw(l, c.LINES, e.DepthMode.disabled, e.StencilMode.disabled, t.colorModeForRenderPass(), e.CullFaceMode.disabled, Wi(y, h, g, v.getProjection()), o.id, b.layoutVertexBuffer, b.indexBuffer, b.segments, null, h.zoom, null, [b.collisionVertexBuffer, b.collisionVertexBufferExt])); } if (!a || !_.length) return; const m = t.useProgram("collisionCircle"), f = new e.StructArrayLayout2f1f2i16; f.resize(4 * d), f._trim(); let g = 0; for (const e of _) for (let t = 0; t < e.circleArray.length / 4; t++) { const i = 4 * t, o = e.circleArray[i + 0], r = e.circleArray[i + 1], n = e.circleArray[i + 2], s = e.circleArray[i + 3]; f.emplace(g++, o, r, n, s, 0), f.emplace(g++, o, r, n, s, 1), f.emplace(g++, o, r, n, s, 2), f.emplace(g++, o, r, n, s, 3); }(!co || co.length < 2 * d) && (co = function(t) { const i = 2 * t, o = new e.StructArrayLayout3ui6; o.resize(i), o._trim(); for (let e = 0; e < i; e++) { const t = 6 * e; o.uint16[t + 0] = 4 * e + 0, o.uint16[t + 1] = 4 * e + 1, o.uint16[t + 2] = 4 * e + 2, o.uint16[t + 3] = 4 * e + 2, o.uint16[t + 4] = 4 * e + 3, o.uint16[t + 5] = 4 * e + 0; } return o }(d)); const v = l.createIndexBuffer(co, !0), x = l.createVertexBuffer(f, e.collisionCircleLayout.members, !0); for (const i of _) { const r = { u_matrix: i.transform, u_inv_matrix: i.invTransform, u_camera_to_center_distance: (y = h).getCameraToCenterDistance(i.projection), u_viewport_size: [y.width, y.height] }; m.draw(l, c.TRIANGLES, e.DepthMode.disabled, e.StencilMode.disabled, t.colorModeForRenderPass(), e.CullFaceMode.disabled, r, o.id, x, v, e.SegmentVector.simpleSegment(0, 2 * i.circleOffset, i.circleArray.length, i.circleArray.length / 2), null, h.zoom); } var y; x.destroy(), v.destroy(); } const uo = e.create(); function _o({ width: t, height: i, anchor: o, textOffset: r, textScale: n }, s) { const { horizontalAlign: a, verticalAlign: l } = e.getAnchorAlignment(o), c = -(a - .5) * t, h = -(l - .5) * i, u = e.evaluateVariableOffset(o, r); return new e.pointGeometry((c / n + u[0]) * s, (h / n + u[1]) * s) } function po(t, i, o, r, n, s, a, l, c, h, u) { const _ = t.text.placedSymbolArray, d = t.text.dynamicLayoutVertexArray, p = t.icon.dynamicLayoutVertexArray, m = {}, f = t.getProjection(), g = bt(l, f, s), v = s.elevation, x = f.upVectorScale(l.canonical, s.center.lat, s.worldSize).metersToTile; d.clear(); for (let p = 0; p < _.length; p++) { const y = _.get(p), { tileAnchorX: b, tileAnchorY: w, numGlyphs: T } = y, E = t.allowVerticalPlacement && !y.placedOrientation, C = y.hidden || !y.crossTileID || E ? null : r[y.crossTileID]; if (C) { let r = 0, _ = 0, p = 0; if (v) { const e = v ? v.getAtTileOffset(l, b, w) : 0, [t, i, o] = f.upVector(l.canonical, b, w); r = e * t * x, _ = e * i * x, p = e * o * x; } let [E, M, I, S] = nt(y.projectedAnchorX + r, y.projectedAnchorY + _, y.projectedAnchorZ + p, o ? g : a); const D = st(s.getCameraToCenterDistance(f), S); let L = n.evaluateSizeForFeature(t.textSizeData, h, y) * D / e.ONE_EM; o && (L *= t.tilePixelRatio / c); const A = _o(C, L); o ? (({ x: E, y: M, z: I } = f.projectTilePoint(b + A.x, w + A.y, l.canonical)), [E, M, I] = nt(E + r, M + _, I + p, a)) : (i && A._rotate(-s.angle), E += A.x, M += A.y, I = 0); const z = t.allowVerticalPlacement && y.placedOrientation === e.WritingMode.vertical ? Math.PI / 2 : 0; for (let t = 0; t < T; t++) e.addDynamicAttributes(d, E, M, I, z); u && y.associatedIconIndex >= 0 && (m[y.associatedIconIndex] = { x: E, y: M, z: I, angle: z }); } else mt(T, d); } if (u) { p.clear(); const i = t.icon.placedSymbolArray; for (let t = 0; t < i.length; t++) { const o = i.get(t), { numGlyphs: r } = o, n = m[t]; if (o.hidden || !n) mt(r, p); else { const { x: t, y: i, z: o, angle: s } = n; for (let n = 0; n < r; n++) e.addDynamicAttributes(p, t, i, o, s); } } t.icon.dynamicLayoutVertexBuffer.updateData(p); } t.text.dynamicLayoutVertexBuffer.updateData(d); } function mo(e, t, i) { return i.iconsInText && t ? "symbolTextAndIcon" : e ? "symbolSDF" : "symbolIcon" } function fo(t, i, o, r, n, s, a, l, c, h, u, _) { const d = t.context, p = d.gl, m = t.transform, f = "map" === l, g = "map" === c, v = f && "point" !== o.layout.get("symbol-placement"), x = f && !g && !v, y = void 0 !== o.layout.get("symbol-sort-key").constantOr(1); let b = !1; const w = t.depthModeForSublayer(0, e.DepthMode.ReadOnly), T = [e.mercatorXfromLng(m.center.lng), e.mercatorYfromLat(m.center.lat)], E = o.layout.get("text-variable-anchor"), C = "globe" === m.projection.name, M = [], I = [0, -1, 0]; let S = I; !C && !m.mercatorFromTransition || f || (S = function(t) { const i = t._camera.getWorldToCamera(t.worldSize, 1), o = e.multiply([], i, t.globeMatrix); e.invert(o, o); const r = [0, 0, 0], n = [0, 1, 0, 0]; return e.transformMat4$1(n, n, o), r[0] = n[0], r[1] = n[1], r[2] = n[2], e.normalize(r, r), r }(m)); for (const l of r) { const r = i.getTile(l), c = r.getBucket(o); if (!c) continue; if ("mercator" === c.projection.name && C) continue; const u = n ? c.text : c.icon; if (!u || c.fullyClipped || !u.segments.get().length) continue; const _ = u.programConfigurations.get(o.id), d = n || c.sdfIcons, w = n ? c.textSizeData : c.iconSizeData, D = g || 0 !== m.pitch, L = e.evaluateSizeForZoom(w, m.zoom); let A, z, P, R, O = [0, 0], B = null; if (n) { if (z = r.glyphAtlasTexture, P = p.LINEAR, A = r.glyphAtlasTexture.size, c.iconsInText) { O = r.imageAtlasTexture.size, B = r.imageAtlasTexture; const e = "composite" === w.kind || "camera" === w.kind; R = D || t.options.rotating || t.options.zooming || e ? p.LINEAR : p.NEAREST; } } else { const e = 1 !== o.layout.get("icon-size").constantOr(0) || c.iconsNeedLinear; z = r.imageAtlasTexture, P = d || t.options.rotating || t.options.zooming || e || D ? p.LINEAR : p.NEAREST, A = r.imageAtlasTexture.size; } const k = "globe" === c.projection.name, F = k ? S : I, U = k ? e.globeToMercatorTransition(m.zoom) : 0, N = bt(l, c.getProjection(), m), G = m.calculatePixelsToTileUnitsMatrix(r), j = it(N, r.tileID.canonical, g, f, m, c.getProjection(), G), Z = t.terrain && g && v ? e.invert(e.create(), j) : uo, V = rt(N, r.tileID.canonical, g, f, m, c.getProjection(), G), W = E && c.hasTextData(), X = "none" !== o.layout.get("icon-text-fit") && W && c.hasIconData(); if (v) { const e = m.elevation, i = e ? e.getAtTileOffsetFunc(l, m.center.lat, m.worldSize, c.getProjection()) : null, o = ot(N, r.tileID.canonical, g, f, m, c.getProjection(), G); lt(c, N, t, n, o, V, g, h, i, l); } const q = v || n && E || X, $ = t.translatePosMatrix(N, r, s, a), H = q ? uo : j, Y = t.translatePosMatrix(V, r, s, a, !0), K = c.getProjection().createInversionMatrix(m, l.canonical), J = []; t.terrainRenderModeElevated() && g && J.push("PITCH_WITH_MAP_TERRAIN"), k && J.push("PROJECTION_GLOBE_VIEW"), q && J.push("PROJECTED_POS_ON_VIEWPORT"); const Q = d && 0 !== o.paint.get(n ? "text-halo-width" : "icon-halo-width").constantOr(1); let ee; ee = d ? c.iconsInText ? no(w.kind, L, x, g, t, $, H, Y, A, O, l, U, T, K, F, c.getProjection()) : ro(w.kind, L, x, g, t, $, H, Y, n, A, !0, l, U, T, K, F, c.getProjection()) : oo(w.kind, L, x, g, t, $, H, Y, n, A, l, U, T, K, F, c.getProjection()); const te = { program: t.useProgram(mo(d, n, c), _, J), buffers: u, uniformValues: ee, atlasTexture: z, atlasTextureIcon: B, atlasInterpolation: P, atlasInterpolationIcon: R, isSDF: d, hasHalo: Q, tile: r, labelPlaneMatrixInv: Z }; if (y && c.canOverlap) { b = !0; const t = u.segments.get(); for (const i of t) M.push({ segments: new e.SegmentVector([i]), sortKey: i.sortKey, state: te }); } else M.push({ segments: u.segments, sortKey: 0, state: te }); } b && M.sort(((e, t) => e.sortKey - t.sortKey)); for (const e of M) { const i = e.state; if (t.terrain && t.terrain.setupElevationDraw(i.tile, i.program, { useDepthForOcclusion: !C, labelPlaneMatrixInv: i.labelPlaneMatrixInv }), d.activeTexture.set(p.TEXTURE0), i.atlasTexture.bind(i.atlasInterpolation, p.CLAMP_TO_EDGE), i.atlasTextureIcon && (d.activeTexture.set(p.TEXTURE1), i.atlasTextureIcon && i.atlasTextureIcon.bind(i.atlasInterpolationIcon, p.CLAMP_TO_EDGE)), i.isSDF) { const r = i.uniformValues; i.hasHalo && (r.u_is_halo = 1, go(i.buffers, e.segments, o, t, i.program, w, u, _, r)), r.u_is_halo = 0; } go(i.buffers, e.segments, o, t, i.program, w, u, _, i.uniformValues); } } function go(t, i, o, r, n, s, a, l, c) { const h = r.context, u = [t.dynamicLayoutVertexBuffer, t.opacityVertexBuffer, t.globeExtVertexBuffer]; n.draw(h, h.gl.TRIANGLES, s, a, l, e.CullFaceMode.disabled, c, o.id, t.layoutVertexBuffer, t.indexBuffer, i, o.paint, r.transform.zoom, t.programConfigurations.get(o.id), u); } function vo(t, i, o, r, n, s, a) { const l = t.context.gl, c = o.paint.get("fill-pattern"), h = c && c.constantOr(1); let u, _, d, p, m; a ? (_ = h && !o.getPaintProperty("fill-outline-color") ? "fillOutlinePattern" : "fillOutline", u = l.LINES) : (_ = h ? "fillPattern" : "fill", u = l.TRIANGLES); for (const f of r) { const r = i.getTile(f); if (h && !r.patternsLoaded()) continue; const g = r.getBucket(o); if (!g) continue; t.prepareDrawTile(); const v = g.programConfigurations.get(o.id), x = t.useProgram(_, v); h && (t.context.activeTexture.set(l.TEXTURE0), r.imageAtlasTexture.bind(l.LINEAR, l.CLAMP_TO_EDGE), v.updatePaintBuffers()); const y = c.constantOr(null); if (y && r.imageAtlas) { const e = r.imageAtlas.patternPositions[y.toString()]; e && v.setConstantPatternPositions(e); } const b = t.translatePosMatrix(f.projMatrix, r, o.paint.get("fill-translate"), o.paint.get("fill-translate-anchor")); if (a) { p = g.indexBuffer2, m = g.segments2; const e = t.terrain && t.terrain.renderingToTexture ? t.terrain.drapeBufferSize : [l.drawingBufferWidth, l.drawingBufferHeight]; d = "fillOutlinePattern" === _ && h ? Gi(b, t, r, e) : Ni(b, e); } else p = g.indexBuffer, m = g.segments, d = h ? Ui(b, t, r) : Fi(b); t.prepareDrawProgram(t.context, x, f.toUnwrapped()), x.draw(t.context, u, n, t.stencilModeForClipping(f), s, e.CullFaceMode.disabled, d, o.id, g.layoutVertexBuffer, p, m, o.paint, t.transform.zoom, v); } } function xo(t, i, o, r, n, s, a) { const l = t.context, c = l.gl, h = t.transform, u = o.paint.get("fill-extrusion-pattern"), _ = u.constantOr(1), d = o.paint.get("fill-extrusion-opacity"), p = [o.paint.get("fill-extrusion-ambient-occlusion-intensity"), o.paint.get("fill-extrusion-ambient-occlusion-radius")], m = o.layout.get("fill-extrusion-edge-radius"), f = "globe" === h.projection.name ? e.fillExtrusionHeightLift() : 0, g = "globe" === h.projection.name, v = g ? e.globeToMercatorTransition(h.zoom) : 0, x = [e.mercatorXfromLng(h.center.lng), e.mercatorYfromLat(h.center.lat)], y = []; g && y.push("PROJECTION_GLOBE_VIEW"), p[0] > 0 && y.push("FAUX_AO"); for (const b of r) { const r = i.getTile(b), w = r.getBucket(o); if (!w || w.projection.name !== h.projection.name) continue; const T = w.programConfigurations.get(o.id), E = t.useProgram(_ ? "fillExtrusionPattern" : "fillExtrusion", T, y); if (t.terrain) { const e = t.terrain; if (t.style.terrainSetForDrapingOnly()) e.setupElevationDraw(r, E, { useMeterToDem: !0 }); else { if (!w.enableTerrain) continue; if (e.setupElevationDraw(r, E, { useMeterToDem: !0 }), yo(l, i, b, w, o, e), !w.centroidVertexBuffer) { const e = E.attributes.a_centroid_pos; void 0 !== e && c.vertexAttrib2f(e, 0, 0); } } } _ && (t.context.activeTexture.set(c.TEXTURE0), r.imageAtlasTexture.bind(c.LINEAR, c.CLAMP_TO_EDGE), T.updatePaintBuffers()); const C = u.constantOr(null); if (C && r.imageAtlas) { const e = r.imageAtlas.patternPositions[C.toString()]; e && T.setConstantPatternPositions(e); } const M = t.translatePosMatrix(b.projMatrix, r, o.paint.get("fill-extrusion-translate"), o.paint.get("fill-extrusion-translate-anchor")), I = h.projection.createInversionMatrix(h, b.canonical), S = o.paint.get("fill-extrusion-vertical-gradient"), D = _ ? ki(M, t, S, d, p, m, b, r, f, v, x, I) : Bi(M, t, S, d, p, m, b, f, v, x, I); t.prepareDrawProgram(l, E, b.toUnwrapped()); const L = []; t.terrain && L.push(w.centroidVertexBuffer), g && L.push(w.layoutVertexExtBuffer), E.draw(l, l.gl.TRIANGLES, n, s, a, e.CullFaceMode.backCCW, D, o.id, w.layoutVertexBuffer, w.indexBuffer, w.segments, o.paint, t.transform.zoom, T, L); } } function yo(t, i, o, r, n, s) { const a = [t => { let i = t.canonical.x - 1, o = t.wrap; return i < 0 && (i = (1 << t.canonical.z) - 1, o--), new e.OverscaledTileID(t.overscaledZ, o, t.canonical.z, i, t.canonical.y) }, t => { let i = t.canonical.x + 1, o = t.wrap; return i === 1 << t.canonical.z && (i = 0, o++), new e.OverscaledTileID(t.overscaledZ, o, t.canonical.z, i, t.canonical.y) }, t => new e.OverscaledTileID(t.overscaledZ, t.wrap, t.canonical.z, t.canonical.x, (0 === t.canonical.y ? 1 << t.canonical.z : t.canonical.y) - 1), t => new e.OverscaledTileID(t.overscaledZ, t.wrap, t.canonical.z, t.canonical.x, t.canonical.y === (1 << t.canonical.z) - 1 ? 0 : t.canonical.y + 1)], l = e => { const t = i.getSource().minzoom, o = e => { const t = i.getTileByID(e); if (t && t.hasData()) return t.getBucket(n) }, r = [0, -1, 1]; for (const i of r) { if (e.overscaledZ + i < t) continue; const r = o(e.calculateScaledKey(e.overscaledZ + i)); if (r) return r } }, c = [0, 0, 0], h = (t, i) => (c[0] = Math.min(t.min.y, i.min.y), c[1] = Math.max(t.max.y, i.max.y), c[2] = e.EXTENT - i.min.x > t.max.x ? i.min.x - e.EXTENT : t.max.x, c), u = (t, i) => (c[0] = Math.min(t.min.x, i.min.x), c[1] = Math.max(t.max.x, i.max.x), c[2] = e.EXTENT - i.min.y > t.max.y ? i.min.y - e.EXTENT : t.max.y, c), _ = [(e, t) => h(e, t), (e, t) => h(t, e), (e, t) => u(e, t), (e, t) => u(t, e)], d = new e.pointGeometry(0, 0); let p, m, f; const g = (t, i, r, n, a) => { const l = [ [n ? r : t, n ? t : r, 0], [n ? r : i, n ? i : r, 0] ], c = a < 0 ? e.EXTENT + a : a, h = [n ? c : (t + i) / 2, n ? (t + i) / 2 : c, 0]; return 0 === r && a < 0 || 0 !== r && a > 0 ? s.getForTilePoints(f, [h], !0, m) : l.push(h), s.getForTilePoints(o, l, !0, p), Math.max(l[0][2], l[1][2], h[2]) / s.exaggeration() }; for (let t = 0; t < 4; t++) { const i = (t < 2 ? 1 : 5) - t, n = r.borders[t]; if (0 === n.length) continue; const c = f = a[t](o), h = l(c); if (!(h && h instanceof e.FillExtrusionBucket && h.enableTerrain)) continue; if (r.borderDoneWithNeighborZ[t] === h.canonical.z && h.borderDoneWithNeighborZ[i] === r.canonical.z) continue; if (m = s.findDEMTileFor(c), !m || !m.dem) continue; if (!p) { const e = s.findDEMTileFor(o); if (!e || !e.dem) return; p = e; } const u = h.borders[i]; let v = 0; const x = h.borderDoneWithNeighborZ[i] !== r.canonical.z; if (r.canonical.z === h.canonical.z) { for (let o = 0; o < n.length; o++) { const s = r.featuresOnBorder[n[o]], a = s.borders[t]; let l; for (; v < u.length && (l = h.featuresOnBorder[u[v]], !(l.borders[i][1] > a[0] + 3));) x && h.encodeCentroid(void 0, l, !1), v++; if (l && v < u.length) { const o = v; let n = 0; for (; !(l.borders[i][0] > a[1] - 3) && (n++, ++v !== u.length);) l = h.featuresOnBorder[u[v]]; if (l = h.featuresOnBorder[u[o]], s.intersectsCount() > 1 || l.intersectsCount() > 1 || 1 !== n) { 1 !== n && (v = o), r.encodeCentroid(void 0, s, !1), x && h.encodeCentroid(void 0, l, !1); continue } const c = _[t](s, l), p = t % 2 ? e.EXTENT - 1 : 0; d.x = g(c[0], Math.min(e.EXTENT - 1, c[1]), p, t < 2, c[2]), d.y = 0, r.encodeCentroid(d, s, !1), x && h.encodeCentroid(d, l, !1); } else r.encodeCentroid(void 0, s, !1); } r.borderDoneWithNeighborZ[t] = h.canonical.z, r.needsCentroidUpdate = !0, x && (h.borderDoneWithNeighborZ[i] = r.canonical.z, h.needsCentroidUpdate = !0); } else { for (const e of n) r.encodeCentroid(void 0, r.featuresOnBorder[e], !1); if (x) { for (const e of u) h.encodeCentroid(void 0, h.featuresOnBorder[e], !1); h.borderDoneWithNeighborZ[i] = r.canonical.z, h.needsCentroidUpdate = !0; } r.borderDoneWithNeighborZ[t] = h.canonical.z, r.needsCentroidUpdate = !0; } }(r.needsCentroidUpdate || !r.centroidVertexBuffer && 0 !== r.centroidVertexArray.length) && r.uploadCentroid(t); } const bo = new e.Color(1, 0, 0, 1), wo = new e.Color(0, 1, 0, 1), To = new e.Color(0, 0, 1, 1), Eo = new e.Color(1, 0, 1, 1), Co = new e.Color(0, 1, 1, 1); function Mo(t, i, o) { const r = t.context, n = t.transform, s = r.gl, a = "globe" === n.projection.name, l = a ? ["PROJECTION_GLOBE_VIEW"] : null; let c = o.projMatrix; if (a && e.globeToMercatorTransition(n.zoom) > 0) { const t = e.transitionTileAABBinECEF(o.canonical, n), i = e.globeDenormalizeECEF(t); c = e.multiply(new Float32Array(16), n.globeMatrix, i), e.multiply(c, n.projMatrix, c); } const h = t.useProgram("debug", null, l), u = i.getTileByID(o.key); t.terrain && t.terrain.setupElevationDraw(u, h); const _ = e.DepthMode.disabled, d = e.StencilMode.disabled, p = t.colorModeForRenderPass(), m = "$debug"; r.activeTexture.set(s.TEXTURE0), t.emptyTexture.bind(s.LINEAR, s.CLAMP_TO_EDGE), a ? u._makeGlobeTileDebugBuffers(t.context, n) : u._makeDebugTileBoundsBuffers(t.context, n.projection); const f = u._tileDebugBuffer || t.debugBuffer, g = u._tileDebugIndexBuffer || t.debugIndexBuffer, v = u._tileDebugSegments || t.debugSegments; h.draw(r, s.LINE_STRIP, _, d, p, e.CullFaceMode.disabled, Xi(c, e.Color.red), m, f, g, v, null, null, null, [u._globeTileDebugBorderBuffer]); const x = u.latestRawTileData, y = Math.floor((x && x.byteLength || 0) / 1024), b = i.getTile(o).tileSize, w = 512 / Math.min(b, 512) * (o.overscaledZ / n.zoom) * .5; let T = o.canonical.toString(); o.overscaledZ !== o.canonical.z && (T += ` => ${o.overscaledZ}`), T += ` ${y}kb`, function(e, t) { e.initDebugOverlayCanvas(); const i = e.debugOverlayCanvas, o = e.context.gl, r = e.debugOverlayCanvas.getContext("2d"); r.clearRect(0, 0, i.width, i.height), r.shadowColor = "white", r.shadowBlur = 2, r.lineWidth = 1.5, r.strokeStyle = "white", r.textBaseline = "top", r.font = "bold 36px Open Sans, sans-serif", r.fillText(t, 5, 5), r.strokeText(t, 5, 5), e.debugOverlayTexture.update(i), e.debugOverlayTexture.bind(o.LINEAR, o.CLAMP_TO_EDGE); }(t, T); const E = u._tileDebugTextBuffer || t.debugBuffer, C = u._tileDebugTextIndexBuffer || t.quadTriangleIndexBuffer, M = u._tileDebugTextSegments || t.debugSegments; h.draw(r, s.TRIANGLES, _, d, e.ColorMode.alphaBlended, e.CullFaceMode.disabled, Xi(c, e.Color.transparent, w), m, E, C, M, null, null, null, [u._globeTileDebugTextBuffer]); } function Io(e, t, i, o) { Do(e, 0, t + i / 2, e.transform.width, i, o); } function So(e, t, i, o) { Do(e, t - i / 2, 0, i, e.transform.height, o); } function Do(t, i, o, r, n, s) { const a = t.context, l = a.gl; l.enable(l.SCISSOR_TEST), l.scissor(i * e.exported.devicePixelRatio, o * e.exported.devicePixelRatio, r * e.exported.devicePixelRatio, n * e.exported.devicePixelRatio), a.clear({ color: s }), l.disable(l.SCISSOR_TEST); } const Lo = e.createLayout([{ name: "a_pos_3f", components: 3, type: "Float32" }]), { members: Ao } = Lo; function zo(e, t, i, o) { e.emplaceBack(t, i, o); } class Po { constructor(t) { this.vertexArray = new e.StructArrayLayout3f12, this.indices = new e.StructArrayLayout3ui6, zo(this.vertexArray, -1, -1, 1), zo(this.vertexArray, 1, -1, 1), zo(this.vertexArray, -1, 1, 1), zo(this.vertexArray, 1, 1, 1), zo(this.vertexArray, -1, -1, -1), zo(this.vertexArray, 1, -1, -1), zo(this.vertexArray, -1, 1, -1), zo(this.vertexArray, 1, 1, -1), this.indices.emplaceBack(5, 1, 3), this.indices.emplaceBack(3, 7, 5), this.indices.emplaceBack(6, 2, 0), this.indices.emplaceBack(0, 4, 6), this.indices.emplaceBack(2, 6, 7), this.indices.emplaceBack(7, 3, 2), this.indices.emplaceBack(5, 4, 0), this.indices.emplaceBack(0, 1, 5), this.indices.emplaceBack(0, 2, 3), this.indices.emplaceBack(3, 1, 0), this.indices.emplaceBack(7, 6, 4), this.indices.emplaceBack(4, 5, 7), this.vertexBuffer = t.createVertexBuffer(this.vertexArray, Ao), this.indexBuffer = t.createIndexBuffer(this.indices), this.segment = e.SegmentVector.simpleSegment(0, 0, 36, 12); } } function Ro(t, i, o, r, n, s) { const a = t.gl, l = i.paint.get("sky-atmosphere-color"), c = i.paint.get("sky-atmosphere-halo-color"), h = i.paint.get("sky-atmosphere-sun-intensity"), u = ((e, t, i, o, r) => ({ u_matrix_3f: e, u_sun_direction: t, u_sun_intensity: i, u_color_tint_r: [o.r, o.g, o.b, o.a], u_color_tint_m: [r.r, r.g, r.b, r.a], u_luminance: 5e-5 }))(e.fromMat4(e.create$1(), r), n, h, l, c); a.framebufferTexture2D(a.FRAMEBUFFER, a.COLOR_ATTACHMENT0, a.TEXTURE_CUBE_MAP_POSITIVE_X + s, i.skyboxTexture, 0), o.draw(t, a.TRIANGLES, e.DepthMode.disabled, e.StencilMode.disabled, e.ColorMode.unblended, e.CullFaceMode.frontCW, u, "skyboxCapture", i.skyboxGeometry.vertexBuffer, i.skyboxGeometry.indexBuffer, i.skyboxGeometry.segment); } const Oo = e.createLayout([{ type: "Float32", name: "a_pos", components: 3 }, { type: "Float32", name: "a_uv", components: 2 }]); class Bo { constructor(t) { const i = new e.StructArrayLayout5f20; i.emplaceBack(-1, 1, 1, 0, 0), i.emplaceBack(1, 1, 1, 1, 0), i.emplaceBack(1, -1, 1, 1, 1), i.emplaceBack(-1, -1, 1, 0, 1); const o = new e.StructArrayLayout3ui6; o.emplaceBack(0, 1, 2), o.emplaceBack(2, 3, 0), this.vertexBuffer = t.createVertexBuffer(i, Oo.members), this.indexBuffer = t.createIndexBuffer(o), this.segments = e.SegmentVector.simpleSegment(0, 0, 4, 2); } destroy() { this.vertexBuffer.destroy(), this.indexBuffer.destroy(), this.segments.destroy(); } } const ko = { symbol: function(t, i, o, r, n) { if ("translucent" !== t.renderPass) return; const s = e.StencilMode.disabled, a = t.colorModeForRenderPass(); o.layout.get("text-variable-anchor") && function(t, i, o, r, n, s, a) { const l = i.transform, c = "map" === n, h = "map" === s; for (const i of t) { const t = r.getTile(i), n = t.getBucket(o); if (!n || !n.text || !n.text.segments.get().length) continue; const s = e.evaluateSizeForZoom(n.textSizeData, l.zoom), u = bt(i, n.getProjection(), l), _ = l.calculatePixelsToTileUnitsMatrix(t), d = it(u, t.tileID.canonical, h, c, l, n.getProjection(), _), p = "none" !== o.layout.get("icon-text-fit") && n.hasIconData(); if (s) { const o = Math.pow(2, l.zoom - t.tileID.overscaledZ); po(n, c, h, a, e.symbolSize, l, d, i, o, s, p); } } }(r, t, o, i, o.layout.get("text-rotation-alignment"), o.layout.get("text-pitch-alignment"), n), 0 !== o.paint.get("icon-opacity").constantOr(1) && fo(t, i, o, r, !1, o.paint.get("icon-translate"), o.paint.get("icon-translate-anchor"), o.layout.get("icon-rotation-alignment"), o.layout.get("icon-pitch-alignment"), o.layout.get("icon-keep-upright"), s, a), 0 !== o.paint.get("text-opacity").constantOr(1) && fo(t, i, o, r, !0, o.paint.get("text-translate"), o.paint.get("text-translate-anchor"), o.layout.get("text-rotation-alignment"), o.layout.get("text-pitch-alignment"), o.layout.get("text-keep-upright"), s, a), i.map.showCollisionBoxes && (ho(t, i, o, r, o.paint.get("text-translate"), o.paint.get("text-translate-anchor"), !0), ho(t, i, o, r, o.paint.get("icon-translate"), o.paint.get("icon-translate-anchor"), !1)); }, circle: function(t, i, o, r) { if ("translucent" !== t.renderPass) return; const n = o.paint.get("circle-opacity"), s = o.paint.get("circle-stroke-width"), a = o.paint.get("circle-stroke-opacity"), l = void 0 !== o.layout.get("circle-sort-key").constantOr(1); if (0 === n.constantOr(1) && (0 === s.constantOr(1) || 0 === a.constantOr(1))) return; const c = t.context, h = c.gl, u = t.transform, _ = t.depthModeForSublayer(0, e.DepthMode.ReadOnly), d = e.StencilMode.disabled, p = t.colorModeForRenderPass(), m = "globe" === u.projection.name, f = [e.mercatorXfromLng(u.center.lng), e.mercatorYfromLat(u.center.lat)], g = []; for (let n = 0; n < r.length; n++) { const s = r[n], a = i.getTile(s), c = a.getBucket(o); if (!c || c.projection.name !== u.projection.name) continue; const h = c.programConfigurations.get(o.id), _ = Vi(o); m && _.push("PROJECTION_GLOBE_VIEW"); const d = t.useProgram("circle", h, _), p = c.layoutVertexBuffer, v = c.globeExtVertexBuffer, x = c.indexBuffer, y = u.projection.createInversionMatrix(u, s.canonical), b = { programConfiguration: h, program: d, layoutVertexBuffer: p, globeExtVertexBuffer: v, indexBuffer: x, uniformValues: Zi(t, s, a, y, f, o), tile: a }; if (l) { const t = c.segments.get(); for (const i of t) g.push({ segments: new e.SegmentVector([i]), sortKey: i.sortKey, state: b }); } else g.push({ segments: c.segments, sortKey: 0, state: b }); } l && g.sort(((e, t) => e.sortKey - t.sortKey)); const v = { useDepthForOcclusion: !m }; for (const i of g) { const { programConfiguration: r, program: n, layoutVertexBuffer: s, globeExtVertexBuffer: a, indexBuffer: l, uniformValues: m, tile: f } = i.state, g = i.segments; t.terrain && t.terrain.setupElevationDraw(f, n, v), t.prepareDrawProgram(c, n, f.tileID.toUnwrapped()), n.draw(c, h.TRIANGLES, _, d, p, e.CullFaceMode.disabled, m, o.id, s, l, g, o.paint, u.zoom, r, [a]); } }, heatmap: function(t, i, o, r) { if (0 !== o.paint.get("heatmap-opacity")) if ("offscreen" === t.renderPass) { const n = t.context, s = n.gl, a = e.StencilMode.disabled, l = new e.ColorMode([s.ONE, s.ONE], e.Color.transparent, [!0, !0, !0, !0]); ! function(e, t, i, o) { const r = e.gl, n = t.width * o, s = t.height * o; e.activeTexture.set(r.TEXTURE1), e.viewport.set([0, 0, n, s]); let a = i.heatmapFbo; if (!a || a && (a.width !== n || a.height !== s)) { a && a.destroy(); const t = r.createTexture(); r.bindTexture(r.TEXTURE_2D, t), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_S, r.CLAMP_TO_EDGE), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_T, r.CLAMP_TO_EDGE), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MIN_FILTER, r.LINEAR), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MAG_FILTER, r.LINEAR), a = i.heatmapFbo = e.createFramebuffer(n, s, !1), function(e, t, i, o, r, n) { const s = e.gl; s.texImage2D(s.TEXTURE_2D, 0, e.isWebGL2 && e.extRenderToTextureHalfFloat ? s.RGBA16F : s.RGBA, r, n, 0, s.RGBA, e.extRenderToTextureHalfFloat ? e.isWebGL2 ? s.HALF_FLOAT : e.extTextureHalfFloat.HALF_FLOAT_OES : s.UNSIGNED_BYTE, null), o.colorAttachment.set(i); }(e, 0, t, a, n, s); } else r.bindTexture(r.TEXTURE_2D, a.colorAttachment.get()), e.bindFramebuffer.set(a.framebuffer); }(n, t, o, "globe" === t.transform.projection.name ? .5 : .25), n.clear({ color: e.Color.transparent }); const c = t.transform, h = "globe" === c.projection.name, u = h ? ["PROJECTION_GLOBE_VIEW"] : null, _ = h ? e.CullFaceMode.frontCCW : e.CullFaceMode.disabled, d = [e.mercatorXfromLng(c.center.lng), e.mercatorYfromLat(c.center.lat)]; for (let p = 0; p < r.length; p++) { const m = r[p]; if (i.hasRenderableParent(m)) continue; const f = i.getTile(m), g = f.getBucket(o); if (!g || g.projection.name !== c.projection.name) continue; const v = g.programConfigurations.get(o.id), x = t.useProgram("heatmap", v, u), { zoom: y } = t.transform; t.terrain && t.terrain.setupElevationDraw(f, x), t.prepareDrawProgram(n, x, m.toUnwrapped()); const b = c.projection.createInversionMatrix(c, m.canonical); x.draw(n, s.TRIANGLES, e.DepthMode.disabled, a, l, _, $i(t, m, f, b, d, y, o.paint.get("heatmap-intensity")), o.id, g.layoutVertexBuffer, g.indexBuffer, g.segments, o.paint, t.transform.zoom, v, h ? [g.globeExtVertexBuffer] : null); } n.viewport.set([0, 0, t.width, t.height]); } else "translucent" === t.renderPass && (t.context.setColorMode(t.colorModeForRenderPass()), function(t, i) { const o = t.context, r = o.gl, n = i.heatmapFbo; if (!n) return; o.activeTexture.set(r.TEXTURE0), r.bindTexture(r.TEXTURE_2D, n.colorAttachment.get()), o.activeTexture.set(r.TEXTURE1); let s = i.colorRampTexture; s || (s = i.colorRampTexture = new e.Texture(o, i.colorRamp, r.RGBA)), s.bind(r.LINEAR, r.CLAMP_TO_EDGE), t.useProgram("heatmapTexture").draw(o, r.TRIANGLES, e.DepthMode.disabled, e.StencilMode.disabled, t.colorModeForRenderPass(), e.CullFaceMode.disabled, ((e, t, i, o) => ({ u_image: 0, u_color_ramp: 1, u_opacity: t.paint.get("heatmap-opacity") }))(0, i), i.id, t.viewportBuffer, t.quadTriangleIndexBuffer, t.viewportSegments, i.paint, t.transform.zoom); }(t, o)); }, line: function(t, i, o, r) { if ("translucent" !== t.renderPass) return; const n = o.paint.get("line-opacity"), s = o.paint.get("line-width"); if (0 === n.constantOr(1) || 0 === s.constantOr(1)) return; const a = t.depthModeForSublayer(0, e.DepthMode.ReadOnly), l = t.colorModeForRenderPass(), c = t.terrain && t.terrain.renderingToTexture ? 1 : e.exported.devicePixelRatio, h = o.paint.get("line-dasharray"), u = h.constantOr(1), _ = o.layout.get("line-cap"), d = o.paint.get("line-pattern"), p = d.constantOr(1), m = o.paint.get("line-gradient"), f = p ? "linePattern" : "line", g = t.context, v = g.gl, x = (e => { const t = []; Qi(e) && t.push("RENDER_LINE_DASH"), e.paint.get("line-gradient") && t.push("RENDER_LINE_GRADIENT"); const i = e.paint.get("line-trim-offset"); 0 === i[0] && 0 === i[1] || t.push("RENDER_LINE_TRIM_OFFSET"); const o = e.paint.get("line-pattern").constantOr(1), r = 1 !== e.paint.get("line-opacity").constantOr(1); return !o && r && t.push("RENDER_LINE_ALPHA_DISCARD"), t })(o); let y = x.includes("RENDER_LINE_ALPHA_DISCARD"); t.terrain && t.terrain.clipOrMaskOverlapStencilType() && (y = !1); for (const n of r) { const r = i.getTile(n); if (p && !r.patternsLoaded()) continue; const s = r.getBucket(o); if (!s) continue; t.prepareDrawTile(); const b = s.programConfigurations.get(o.id), w = t.useProgram(f, b, x), T = d.constantOr(null); if (T && r.imageAtlas) { const e = r.imageAtlas.patternPositions[T.toString()]; e && b.setConstantPatternPositions(e); } const E = h.constantOr(null), C = _.constantOr(null); if (!p && E && C && r.lineAtlas) { const e = r.lineAtlas.getDash(E, C); e && b.setConstantPatternPositions(e); } let [M, I] = o.paint.get("line-trim-offset"); if ("round" === C || "square" === C) { const e = 1; M !== I && (0 === M && (M -= e), 1 === I && (I += e)); } const S = t.terrain ? n.projMatrix : null, D = p ? Yi(t, r, o, S, c) : Hi(t, r, o, S, s.lineClipsArray.length, c, [M, I]); if (m) { const r = s.gradients[o.id]; let a = r.texture; if (o.gradientVersion !== r.version) { let l = 256; if (o.stepInterpolant) { const o = i.getSource().maxzoom, r = n.canonical.z === o ? Math.ceil(1 << t.transform.maxZoom - n.canonical.z) : 1; l = e.clamp(e.nextPowerOfTwo(s.maxLineLength / e.EXTENT * 1024 * r), 256, g.maxTextureSize); } r.gradient = e.renderColorRamp({ expression: o.gradientExpression(), evaluationKey: "lineProgress", resolution: l, image: r.gradient || void 0, clips: s.lineClipsArray }), r.texture ? r.texture.update(r.gradient) : r.texture = new e.Texture(g, r.gradient, v.RGBA), r.version = o.gradientVersion, a = r.texture; } g.activeTexture.set(v.TEXTURE1), a.bind(o.stepInterpolant ? v.NEAREST : v.LINEAR, v.CLAMP_TO_EDGE); } u && (g.activeTexture.set(v.TEXTURE0), r.lineAtlasTexture.bind(v.LINEAR, v.REPEAT), b.updatePaintBuffers()), p && (g.activeTexture.set(v.TEXTURE0), r.imageAtlasTexture.bind(v.LINEAR, v.CLAMP_TO_EDGE), b.updatePaintBuffers()), t.prepareDrawProgram(g, w, n.toUnwrapped()); const L = i => { w.draw(g, v.TRIANGLES, a, i, l, e.CullFaceMode.disabled, D, o.id, s.layoutVertexBuffer, s.indexBuffer, s.segments, o.paint, t.transform.zoom, b, [s.layoutVertexBuffer2]); }; if (y) { const i = t.stencilModeForClipping(n).ref; 0 === i && t.terrain && g.clear({ stencil: 0 }); const o = { func: v.EQUAL, mask: 255 }; D.u_alpha_discard_threshold = .8, L(new e.StencilMode(o, i, 255, v.KEEP, v.KEEP, v.INVERT)), D.u_alpha_discard_threshold = 0, L(new e.StencilMode(o, i, 255, v.KEEP, v.KEEP, v.KEEP)); } else L(t.stencilModeForClipping(n)); } y && (t.resetStencilClippingMasks(), t.terrain && g.clear({ stencil: 0 })); }, fill: function(t, i, o, r) { const n = o.paint.get("fill-color"), s = o.paint.get("fill-opacity"); if (0 === s.constantOr(1)) return; const a = t.colorModeForRenderPass(), l = o.paint.get("fill-pattern"), c = t.opaquePassEnabledForLayer() && !l.constantOr(1) && 1 === n.constantOr(e.Color.transparent).a && 1 === s.constantOr(0) ? "opaque" : "translucent"; if (t.renderPass === c) { const n = t.depthModeForSublayer(1, "opaque" === t.renderPass ? e.DepthMode.ReadWrite : e.DepthMode.ReadOnly); vo(t, i, o, r, n, a, !1); } if ("translucent" === t.renderPass && o.paint.get("fill-antialias")) { const n = t.depthModeForSublayer(o.getPaintProperty("fill-outline-color") ? 2 : 0, e.DepthMode.ReadOnly); vo(t, i, o, r, n, a, !0); } }, "fill-extrusion": function(t, i, o, r) { const n = o.paint.get("fill-extrusion-opacity"); if (0 !== n && "translucent" === t.renderPass) { const s = new e.DepthMode(t.context.gl.LEQUAL, e.DepthMode.ReadWrite, t.depthRangeFor3D); if (1 !== n || o.paint.get("fill-extrusion-pattern").constantOr(1)) xo(t, i, o, r, s, e.StencilMode.disabled, e.ColorMode.disabled), xo(t, i, o, r, s, t.stencilModeFor3D(), t.colorModeForRenderPass()), t.resetStencilClippingMasks(); else { const n = t.colorModeForRenderPass(); xo(t, i, o, r, s, e.StencilMode.disabled, n); } } }, hillshade: function(t, i, o, r) { if ("offscreen" !== t.renderPass && "translucent" !== t.renderPass) return; const n = t.context, s = t.depthModeForSublayer(0, e.DepthMode.ReadOnly), a = t.colorModeForRenderPass(), l = t.terrain && t.terrain.renderingToTexture, [c, h] = "translucent" !== t.renderPass || l ? [{}, r] : t.stencilConfigForOverlap(r); for (const r of h) { const n = i.getTile(r); if (n.needsHillshadePrepare && "offscreen" === t.renderPass) vi(t, n, o, s, e.StencilMode.disabled, a); else if ("translucent" === t.renderPass) { const e = l && t.terrain ? t.terrain.stencilModeForRTTOverlap(r) : c[r.overscaledZ]; fi(t, r, n, o, s, e, a); } } n.viewport.set([0, 0, t.width, t.height]), t.resetStencilClippingMasks(); }, raster: function(t, i, o, r, n, s) { if ("translucent" !== t.renderPass) return; if (0 === o.paint.get("raster-opacity")) return; if (!r.length) return; const a = t.context, l = a.gl, c = i.getSource(), h = t.useProgram("raster"), u = t.colorModeForRenderPass(), _ = t.terrain && t.terrain.renderingToTexture, [d, p] = c instanceof Ae || _ ? [{}, r] : t.stencilConfigForOverlap(r), m = p[p.length - 1].overscaledZ, f = !t.options.moving; for (const r of p) { const n = _ ? e.DepthMode.disabled : t.depthModeForSublayer(r.overscaledZ - m, 1 === o.paint.get("raster-opacity") ? e.DepthMode.ReadWrite : e.DepthMode.ReadOnly, l.LESS), p = r.toUnwrapped(), g = i.getTile(r); if (_ && (!g || !g.hasData())) continue; const v = _ ? r.projMatrix : t.transform.calculateProjMatrix(p, f), x = t.terrain && _ ? t.terrain.stencilModeForRTTOverlap(r) : d[r.overscaledZ], y = s ? 0 : o.paint.get("raster-fade-duration"); g.registerFadeDuration(y); const b = i.findLoadedParent(r, 0), w = Si(g, b, i, t.transform, y); let T, E; t.terrain && t.terrain.prepareDrawTile(); const C = "nearest" === o.paint.get("raster-resampling") ? l.NEAREST : l.LINEAR; a.activeTexture.set(l.TEXTURE0), g.texture.bind(C, l.CLAMP_TO_EDGE), a.activeTexture.set(l.TEXTURE1), b ? (b.texture.bind(C, l.CLAMP_TO_EDGE), T = Math.pow(2, b.tileID.overscaledZ - g.tileID.overscaledZ), E = [g.tileID.canonical.x * T % 1, g.tileID.canonical.y * T % 1]) : g.texture.bind(C, l.CLAMP_TO_EDGE), g.texture.useMipmap && a.extTextureFilterAnisotropic && t.transform.pitch > 20 && l.texParameterf(l.TEXTURE_2D, a.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT, a.extTextureFilterAnisotropicMax); const M = eo(v, E || [0, 0], T || 1, w, o, c instanceof Ae ? c.perspectiveTransform : [0, 0]); if (t.prepareDrawProgram(a, h, p), c instanceof Ae) c.boundsBuffer && c.boundsSegments && h.draw(a, l.TRIANGLES, n, e.StencilMode.disabled, u, e.CullFaceMode.disabled, M, o.id, c.boundsBuffer, t.quadTriangleIndexBuffer, c.boundsSegments); else { const { tileBoundsBuffer: i, tileBoundsIndexBuffer: r, tileBoundsSegments: s } = t.getTileBoundsBuffers(g); h.draw(a, l.TRIANGLES, n, x, u, e.CullFaceMode.disabled, M, o.id, i, r, s); } } t.resetStencilClippingMasks(); }, background: function(t, i, o, r) { const n = o.paint.get("background-color"), s = o.paint.get("background-opacity"); if (0 === s) return; const a = t.context, l = a.gl, c = t.transform, h = c.tileSize, u = o.paint.get("background-pattern"); if (t.isPatternMissing(u)) return; const _ = !u && 1 === n.a && 1 === s && t.opaquePassEnabledForLayer() ? "opaque" : "translucent"; if (t.renderPass !== _) return; const d = e.StencilMode.disabled, p = t.depthModeForSublayer(0, "opaque" === _ ? e.DepthMode.ReadWrite : e.DepthMode.ReadOnly), m = t.colorModeForRenderPass(), f = t.useProgram(u ? "backgroundPattern" : "background"); let g, v = r; v || (g = t.getBackgroundTiles(), v = Object.values(g).map((e => e.tileID))), u && (a.activeTexture.set(l.TEXTURE0), t.imageManager.bind(t.context)); for (const _ of v) { const v = _.toUnwrapped(), x = r ? _.projMatrix : t.transform.calculateProjMatrix(v); t.prepareDrawTile(); const y = i ? i.getTile(_) : g ? g[_.key] : new e.Tile(_, h, c.zoom, t), b = u ? ao(x, s, t, u, { tileID: _, tileSize: h }) : so(x, s, n); t.prepareDrawProgram(a, f, v); const { tileBoundsBuffer: w, tileBoundsIndexBuffer: T, tileBoundsSegments: E } = t.getTileBoundsBuffers(y); f.draw(a, l.TRIANGLES, p, d, m, e.CullFaceMode.disabled, b, o.id, w, T, E); } }, sky: function(t, i, o) { const r = t.transform, n = "mercator" === r.projection.name || "globe" === r.projection.name ? 1 : e.smoothstep(7, 8, r.zoom), s = o.paint.get("sky-opacity") * n; if (0 === s) return; const a = t.context, l = o.paint.get("sky-type"), c = new e.DepthMode(a.gl.LEQUAL, e.DepthMode.ReadOnly, [0, 1]), h = t.frameCounter / 1e3 % 1; "atmosphere" === l ? "offscreen" === t.renderPass ? o.needsSkyboxCapture(t) && (function(t, i, o, r) { const n = t.context, s = n.gl; let a = i.skyboxFbo; if (!a) { a = i.skyboxFbo = n.createFramebuffer(32, 32, !1), i.skyboxGeometry = new Po(n), i.skyboxTexture = n.gl.createTexture(), s.bindTexture(s.TEXTURE_CUBE_MAP, i.skyboxTexture), s.texParameteri(s.TEXTURE_CUBE_MAP, s.TEXTURE_WRAP_S, s.CLAMP_TO_EDGE), s.texParameteri(s.TEXTURE_CUBE_MAP, s.TEXTURE_WRAP_T, s.CLAMP_TO_EDGE), s.texParameteri(s.TEXTURE_CUBE_MAP, s.TEXTURE_MIN_FILTER, s.LINEAR), s.texParameteri(s.TEXTURE_CUBE_MAP, s.TEXTURE_MAG_FILTER, s.LINEAR); for (let e = 0; e < 6; ++e) s.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X + e, 0, s.RGBA, 32, 32, 0, s.RGBA, s.UNSIGNED_BYTE, null); } n.bindFramebuffer.set(a.framebuffer), n.viewport.set([0, 0, 32, 32]); const l = i.getCenter(t, !0), c = t.useProgram("skyboxCapture"), h = new Float64Array(16); e.identity(h), e.rotateY(h, h, .5 * -Math.PI), Ro(n, i, c, h, l, 0), e.identity(h), e.rotateY(h, h, .5 * Math.PI), Ro(n, i, c, h, l, 1), e.identity(h), e.rotateX(h, h, .5 * -Math.PI), Ro(n, i, c, h, l, 2), e.identity(h), e.rotateX(h, h, .5 * Math.PI), Ro(n, i, c, h, l, 3), e.identity(h), Ro(n, i, c, h, l, 4), e.identity(h), e.rotateY(h, h, Math.PI), Ro(n, i, c, h, l, 5), n.viewport.set([0, 0, t.width, t.height]); }(t, o), o.markSkyboxValid(t)) : "sky" === t.renderPass && function(t, i, o, r, n) { const s = t.context, a = s.gl, l = t.transform, c = t.useProgram("skybox"); s.activeTexture.set(a.TEXTURE0), a.bindTexture(a.TEXTURE_CUBE_MAP, i.skyboxTexture); const h = ((e, t, i, o, r) => ({ u_matrix: e, u_sun_direction: t, u_cubemap: 0, u_opacity: o, u_temporal_offset: r }))(l.skyboxMatrix, i.getCenter(t, !1), 0, r, n); t.prepareDrawProgram(s, c), c.draw(s, a.TRIANGLES, o, e.StencilMode.disabled, t.colorModeForRenderPass(), e.CullFaceMode.backCW, h, "skybox", i.skyboxGeometry.vertexBuffer, i.skyboxGeometry.indexBuffer, i.skyboxGeometry.segment); }(t, o, c, s, h) : "gradient" === l && "sky" === t.renderPass && function(t, i, o, r, n) { const s = t.context, a = s.gl, l = t.transform, c = t.useProgram("skyboxGradient"); i.skyboxGeometry || (i.skyboxGeometry = new Po(s)), s.activeTexture.set(a.TEXTURE0); let h = i.colorRampTexture; h || (h = i.colorRampTexture = new e.Texture(s, i.colorRamp, a.RGBA)), h.bind(a.LINEAR, a.CLAMP_TO_EDGE); const u = ((t, i, o, r, n) => ({ u_matrix: t, u_color_ramp: 0, u_center_direction: i, u_radius: e.degToRad(o), u_opacity: r, u_temporal_offset: n }))(l.skyboxMatrix, i.getCenter(t, !1), i.paint.get("sky-gradient-radius"), r, n); t.prepareDrawProgram(s, c), c.draw(s, a.TRIANGLES, o, e.StencilMode.disabled, t.colorModeForRenderPass(), e.CullFaceMode.backCW, u, "skyboxGradient", i.skyboxGeometry.vertexBuffer, i.skyboxGeometry.indexBuffer, i.skyboxGeometry.segment); }(t, o, c, s, h); }, debug: function(e, t, i) { for (let o = 0; o < i.length; o++) Mo(e, t, i[o]); }, custom: function(t, i, o, r) { const n = t.context, s = o.implementation; if (!t.transform.projection.unsupportedLayers || !t.transform.projection.unsupportedLayers.includes("custom") || t.terrain && (t.terrain.renderingToTexture || "offscreen" === t.renderPass) && o.isLayerDraped()) { if ("offscreen" === t.renderPass) { const i = s.prerender; if (i) { if (t.setCustomLayerDefaults(), n.setColorMode(t.colorModeForRenderPass()), "globe" === t.transform.projection.name) { const o = t.transform.pointMerc; i.call(s, n.gl, t.transform.customLayerMatrix(), t.transform.getProjection(), t.transform.globeToMercatorMatrix(), e.globeToMercatorTransition(t.transform.zoom), [o.x, o.y], t.transform.pixelsPerMeterRatio); } else i.call(s, n.gl, t.transform.customLayerMatrix()); n.setDirty(), t.setBaseState(); } } else if ("translucent" === t.renderPass) { if (t.terrain && t.terrain.renderingToTexture) { const i = s.renderToTile; if (i) { const o = r[0].canonical, a = new e.MercatorCoordinate(o.x + r[0].wrap * (1 << o.z), o.y, o.z); n.setDepthMode(e.DepthMode.disabled), n.setStencilMode(e.StencilMode.disabled), n.setColorMode(t.colorModeForRenderPass()), t.setCustomLayerDefaults(), i.call(s, n.gl, a), n.setDirty(), t.setBaseState(); } return } t.setCustomLayerDefaults(), n.setColorMode(t.colorModeForRenderPass()), n.setStencilMode(e.StencilMode.disabled); const i = "3d" === s.renderingMode ? new e.DepthMode(t.context.gl.LEQUAL, e.DepthMode.ReadWrite, t.depthRangeFor3D) : t.depthModeForSublayer(0, e.DepthMode.ReadOnly); if (n.setDepthMode(i), "globe" === t.transform.projection.name) { const i = t.transform.pointMerc; s.render(n.gl, t.transform.customLayerMatrix(), t.transform.getProjection(), t.transform.globeToMercatorMatrix(), e.globeToMercatorTransition(t.transform.zoom), [i.x, i.y], t.transform.pixelsPerMeterRatio); } else s.render(n.gl, t.transform.customLayerMatrix()); n.setDirty(), t.setBaseState(), n.bindFramebuffer.set(null); } } else e.warnOnce("Custom layers are not yet supported with this projection. Use mercator or globe to enable usage of custom layers."); } }; class Fo { constructor(t, i, o = !1) { this.context = new Me(t, o), this.transform = i, this._tileTextures = {}, this.frameCopies = [], this.loadTimeStamps = [], this.setup(), this.numSublayers = e.SourceCache.maxUnderzooming + e.SourceCache.maxOverzooming + 1, this.depthEpsilon = 1 / Math.pow(2, 16), this.crossTileSymbolIndex = new qt, this.deferredRenderGpuTimeQueries = [], this.gpuTimers = {}, this.frameCounter = 0, this._backgroundTiles = {}; } updateTerrain(e, t) { const i = !!e && !!e.terrain && this.transform.projection.supportsTerrain; if (!(i || this._terrain && this._terrain.enabled)) return; this._terrain || (this._terrain = new zi(this, e)); const o = this._terrain; this.transform.elevation = i ? o : null, o.update(e, this.transform, t); } _updateFog(e) { const t = e.fog; if (!t || "globe" === this.transform.projection.name || t.getOpacity(this.transform.pitch) < 1 || t.properties.get("horizon-blend") < .03) return void(this.transform.fogCullDistSq = null); const [i, o] = t.getFovAdjustedRange(this.transform._fov); if (i > o) return void(this.transform.fogCullDistSq = null); const r = i + .78 * (o - i); this.transform.fogCullDistSq = r * r; } get terrain() { return this.transform._terrainEnabled() && this._terrain && this._terrain.enabled ? this._terrain : null } resize(t, i) { if (this.width = t * e.exported.devicePixelRatio, this.height = i * e.exported.devicePixelRatio, this.context.viewport.set([0, 0, this.width, this.height]), this.style) for (const e of this.style.order) this.style._layers[e].resize(); } setup() { const t = this.context, i = new e.StructArrayLayout2i4; i.emplaceBack(0, 0), i.emplaceBack(e.EXTENT, 0), i.emplaceBack(0, e.EXTENT), i.emplaceBack(e.EXTENT, e.EXTENT), this.tileExtentBuffer = t.createVertexBuffer(i, e.posAttributes.members), this.tileExtentSegments = e.SegmentVector.simpleSegment(0, 0, 4, 2); const o = new e.StructArrayLayout2i4; o.emplaceBack(0, 0), o.emplaceBack(e.EXTENT, 0), o.emplaceBack(0, e.EXTENT), o.emplaceBack(e.EXTENT, e.EXTENT), this.debugBuffer = t.createVertexBuffer(o, e.posAttributes.members), this.debugSegments = e.SegmentVector.simpleSegment(0, 0, 4, 5); const r = new e.StructArrayLayout2i4; r.emplaceBack(-1, -1), r.emplaceBack(1, -1), r.emplaceBack(-1, 1), r.emplaceBack(1, 1), this.viewportBuffer = t.createVertexBuffer(r, e.posAttributes.members), this.viewportSegments = e.SegmentVector.simpleSegment(0, 0, 4, 2); const n = new e.StructArrayLayout4i8; n.emplaceBack(0, 0, 0, 0), n.emplaceBack(e.EXTENT, 0, e.EXTENT, 0), n.emplaceBack(0, e.EXTENT, 0, e.EXTENT), n.emplaceBack(e.EXTENT, e.EXTENT, e.EXTENT, e.EXTENT), this.mercatorBoundsBuffer = t.createVertexBuffer(n, e.boundsAttributes.members), this.mercatorBoundsSegments = e.SegmentVector.simpleSegment(0, 0, 4, 2); const s = new e.StructArrayLayout3ui6; s.emplaceBack(0, 1, 2), s.emplaceBack(2, 1, 3), this.quadTriangleIndexBuffer = t.createIndexBuffer(s); const a = new e.StructArrayLayout1ui2; for (const e of [0, 1, 3, 2, 0]) a.emplaceBack(e); this.debugIndexBuffer = t.createIndexBuffer(a), this.emptyTexture = new e.Texture(t, new e.RGBAImage({ width: 1, height: 1 }, Uint8Array.of(0, 0, 0, 0)), t.gl.RGBA), this.identityMat = e.create(); const l = this.context.gl; this.stencilClearMode = new e.StencilMode({ func: l.ALWAYS, mask: 0 }, 0, 255, l.ZERO, l.ZERO, l.ZERO), this.loadTimeStamps.push(e.window.performance.now()), this.atmosphereBuffer = new Bo(this.context); } getMercatorTileBoundsBuffers() { return { tileBoundsBuffer: this.mercatorBoundsBuffer, tileBoundsIndexBuffer: this.quadTriangleIndexBuffer, tileBoundsSegments: this.mercatorBoundsSegments } } getTileBoundsBuffers(e) { return e._makeTileBoundsBuffers(this.context, this.transform.projection), e._tileBoundsBuffer ? { tileBoundsBuffer: e._tileBoundsBuffer, tileBoundsIndexBuffer: e._tileBoundsIndexBuffer, tileBoundsSegments: e._tileBoundsSegments } : this.getMercatorTileBoundsBuffers() } clearStencil() { const t = this.context, i = t.gl; this.nextStencilID = 1, this.currentStencilSource = void 0, this._tileClippingMaskIDs = {}, this.useProgram("clippingMask").draw(t, i.TRIANGLES, e.DepthMode.disabled, this.stencilClearMode, e.ColorMode.disabled, e.CullFaceMode.disabled, Ii(this.identityMat), "$clipping", this.viewportBuffer, this.quadTriangleIndexBuffer, this.viewportSegments); } resetStencilClippingMasks() { this.terrain || (this.currentStencilSource = void 0, this._tileClippingMaskIDs = {}); } _renderTileClippingMasks(t, i, o) { if (!i || this.currentStencilSource === i.id || !t.isTileClipped() || !o || 0 === o.length) return; if (this._tileClippingMaskIDs && !this.terrain) { let e = !1; for (const t of o) if (void 0 === this._tileClippingMaskIDs[t.key]) { e = !0; break } if (!e) return } this.currentStencilSource = i.id; const r = this.context, n = r.gl; this.nextStencilID + o.length > 256 && this.clearStencil(), r.setColorMode(e.ColorMode.disabled), r.setDepthMode(e.DepthMode.disabled); const s = this.useProgram("clippingMask"); this._tileClippingMaskIDs = {}; for (const t of o) { const o = i.getTile(t), a = this._tileClippingMaskIDs[t.key] = this.nextStencilID++, { tileBoundsBuffer: l, tileBoundsIndexBuffer: c, tileBoundsSegments: h } = this.getTileBoundsBuffers(o); s.draw(r, n.TRIANGLES, e.DepthMode.disabled, new e.StencilMode({ func: n.ALWAYS, mask: 0 }, a, 255, n.KEEP, n.KEEP, n.REPLACE), e.ColorMode.disabled, e.CullFaceMode.disabled, Ii(t.projMatrix), "$clipping", l, c, h); } } stencilModeFor3D() { this.currentStencilSource = void 0, this.nextStencilID + 1 > 256 && this.clearStencil(); const t = this.nextStencilID++, i = this.context.gl; return new e.StencilMode({ func: i.NOTEQUAL, mask: 255 }, t, 255, i.KEEP, i.KEEP, i.REPLACE) } stencilModeForClipping(t) { if (this.terrain) return this.terrain.stencilModeForRTTOverlap(t); const i = this.context.gl; return new e.StencilMode({ func: i.EQUAL, mask: 255 }, this._tileClippingMaskIDs[t.key], 0, i.KEEP, i.KEEP, i.REPLACE) } stencilConfigForOverlap(t) { const i = this.context.gl, o = t.sort(((e, t) => t.overscaledZ - e.overscaledZ)), r = o[o.length - 1].overscaledZ, n = o[0].overscaledZ - r + 1; if (n > 1) { this.currentStencilSource = void 0, this.nextStencilID + n > 256 && this.clearStencil(); const t = {}; for (let o = 0; o < n; o++) t[o + r] = new e.StencilMode({ func: i.GEQUAL, mask: 255 }, o + this.nextStencilID, 255, i.KEEP, i.KEEP, i.REPLACE); return this.nextStencilID += n, [t, o] } return [{ [r]: e.StencilMode.disabled }, o] } colorModeForRenderPass() { const t = this.context.gl; if (this._showOverdrawInspector) { const i = 1 / 8; return new e.ColorMode([t.CONSTANT_COLOR, t.ONE], new e.Color(i, i, i, 0), [!0, !0, !0, !0]) } return "opaque" === this.renderPass ? e.ColorMode.unblended : e.ColorMode.alphaBlended } depthModeForSublayer(t, i, o) { if (!this.opaquePassEnabledForLayer()) return e.DepthMode.disabled; const r = 1 - ((1 + this.currentLayer) * this.numSublayers + t) * this.depthEpsilon; return new e.DepthMode(o || this.context.gl.LEQUAL, i, [r, r]) } opaquePassEnabledForLayer() { return this.currentLayer < this.opaquePassCutoff } render(t, i) { this.style = t, this.options = i, this.imageManager = t.imageManager, this.glyphManager = t.glyphManager, this.symbolFadeChange = t.placement.symbolFadeChange(e.exported.now()), this.imageManager.beginFrame(); const o = this.style.order, r = this.style._sourceCaches; for (const e in r) { const t = r[e]; t.used && t.prepare(this.context); } const n = {}, s = {}, a = {}; for (const e in r) { const t = r[e]; n[e] = t.getVisibleCoordinates(), s[e] = n[e].slice().reverse(), a[e] = t.getVisibleCoordinates(!0).reverse(); } this.opaquePassCutoff = 1 / 0; for (let e = 0; e < o.length; e++) if (this.style._layers[o[e]].is3D()) { this.opaquePassCutoff = e; break } if (this.terrain && (this.terrain.updateTileBinding(a), this.opaquePassCutoff = 0), "globe" !== this.transform.projection.name || this.globeSharedBuffers || (this.globeSharedBuffers = new e.GlobeSharedBuffers(this.context)), !e.isMapAuthenticated(this.context.gl)) return; this.renderPass = "offscreen"; for (const e of o) { const i = this.style._layers[e], o = t._getLayerSourceCache(i); if (!i.hasOffscreenPass() || i.isHidden(this.transform.zoom)) continue; const r = o ? s[o.id] : void 0; ("custom" === i.type || i.isSky() || r && r.length) && this.renderLayer(this, o, i, r); } this.depthRangeFor3D = [0, 1 - (t.order.length + 2) * this.numSublayers * this.depthEpsilon]; const l = this.terrain; if (l && (this.style.hasSymbolLayers() || this.style.hasCircleLayers()) && l.drawDepth(), this.context.bindFramebuffer.set(null), this.context.viewport.set([0, 0, this.width, this.height]), this.context.clear({ color: i.showOverdrawInspector ? e.Color.black : e.Color.transparent, depth: 1 }), this.clearStencil(), this._showOverdrawInspector = i.showOverdrawInspector, this.renderPass = "opaque", !this.terrain) for (this.currentLayer = o.length - 1; this.currentLayer >= 0; this.currentLayer--) { const e = this.style._layers[o[this.currentLayer]], i = t._getLayerSourceCache(e); if (e.isSky()) continue; const r = i ? s[i.id] : void 0; this._renderTileClippingMasks(e, i, r), this.renderLayer(this, i, e, r); } if (this.style.fog && this.transform.projection.supportsFog && function(t, i) { const o = t.context, r = o.gl, n = t.transform, s = new e.DepthMode(r.LEQUAL, e.DepthMode.ReadOnly, [0, 1]), a = t.useProgram("globeAtmosphere", null, "globe" === n.projection.name ? ["PROJECTION_GLOBE_VIEW", "FOG"] : ["FOG"]), l = e.globeToMercatorTransition(n.zoom), c = i.properties.get("color").toArray01(), h = i.properties.get("high-color").toArray01(), u = i.properties.get("space-color").toArray01PremultipliedAlpha(), _ = e.identity$1([]); e.rotateY$1(_, _, -e.degToRad(n._center.lng)), e.rotateX$1(_, _, e.degToRad(n._center.lat)), e.rotateZ$1(_, _, n.angle), e.rotateX$1(_, _, -n._pitch); const d = e.fromQuat(new Float32Array(16), _), p = e.mapValue(i.properties.get("star-intensity"), 0, 1, 0, .25), m = 5e-4, f = e.mapValue(i.properties.get("horizon-blend"), 0, 1, m, .25), g = e.globeUseCustomAntiAliasing(t, o, n) && f === m ? n.worldSize / (2 * Math.PI * 1.025) - 1 : n.globeRadius, v = t.frameCounter / 1e3 % 1, x = e.length(n.globeCenterInViewSpace), y = Math.sqrt(Math.pow(x, 2) - Math.pow(g, 2)), b = Math.acos(y / x), w = ((t, i, o, r, n, s, a, l, c, h, u, _, d, p) => ({ u_frustum_tl: t, u_frustum_tr: i, u_frustum_br: o, u_frustum_bl: r, u_horizon: n, u_transition: s, u_fadeout_range: a, u_color: l, u_high_color: c, u_space_color: h, u_star_intensity: u, u_star_size: 5 * e.exported.devicePixelRatio, u_star_density: 0, u_temporal_offset: _, u_horizon_angle: d, u_rotation_matrix: p }))(n.frustumCorners.TL, n.frustumCorners.TR, n.frustumCorners.BR, n.frustumCorners.BL, n.frustumCorners.horizon, l, f, c, h, u, p, v, b, d); t.prepareDrawProgram(o, a); const T = t.atmosphereBuffer; T && a.draw(o, r.TRIANGLES, s, e.StencilMode.disabled, e.ColorMode.alphaBlended, e.CullFaceMode.backCW, w, "skybox", T.vertexBuffer, T.indexBuffer, T.segments); }(this, this.style.fog), this.renderPass = "sky", (e.globeToMercatorTransition(this.transform.zoom) > 0 || "globe" !== this.transform.projection.name) && this.transform.isHorizonVisible()) for (this.currentLayer = 0; this.currentLayer < o.length; this.currentLayer++) { const e = this.style._layers[o[this.currentLayer]], i = t._getLayerSourceCache(e); e.isSky() && this.renderLayer(this, i, e, i ? s[i.id] : void 0); } for (this.renderPass = "translucent", this.currentLayer = 0; this.currentLayer < o.length;) { const e = this.style._layers[o[this.currentLayer]], i = t._getLayerSourceCache(e); if (e.isSky()) { ++this.currentLayer; continue } if (this.terrain && this.style.isLayerDraped(e)) { if (e.isHidden(this.transform.zoom)) { ++this.currentLayer; continue } this.currentLayer = this.terrain.renderBatch(this.currentLayer); continue } const r = i ? ("symbol" === e.type ? a : s)[i.id] : void 0; this._renderTileClippingMasks(e, i, i ? n[i.id] : void 0), this.renderLayer(this, i, e, r), ++this.currentLayer; } if (this.terrain && this.terrain.postRender(), this.options.showTileBoundaries || this.options.showQueryGeometry || this.options.showTileAABBs) { let i = null; e.values(this.style._layers).forEach((e => { const o = t._getLayerSourceCache(e); o && !e.isHidden(this.transform.zoom) && (!i || i.getSource().maxzoom < o.getSource().maxzoom) && (i = o); })), i && this.options.showTileBoundaries && ko.debug(this, i, i.getVisibleCoordinates()); } this.options.showPadding && function(e) { const t = e.transform.padding; Io(e, e.transform.height - (t.top || 0), 3, bo), Io(e, t.bottom || 0, 3, wo), So(e, t.left || 0, 3, To), So(e, e.transform.width - (t.right || 0), 3, Eo); const i = e.transform.centerPoint; ! function(e, t, i, o) { Do(e, t - 1, i - 10, 2, 20, o), Do(e, t - 10, i - 1, 20, 2, o); }(e, i.x, e.transform.height - i.y, Co); }(this), this.context.setDefault(), this.frameCounter = (this.frameCounter + 1) % Number.MAX_SAFE_INTEGER, this.tileLoaded && this.options.speedIndexTiming && (this.loadTimeStamps.push(e.window.performance.now()), this.saveCanvasCopy()); } renderLayer(e, t, i, o) { i.isHidden(this.transform.zoom) || ("background" === i.type || "sky" === i.type || "custom" === i.type || o && o.length) && (this.id = i.id, this.gpuTimingStart(i), (!e.transform.projection.unsupportedLayers || !e.transform.projection.unsupportedLayers.includes(i.type) || e.terrain && "custom" === i.type) && ko[i.type](e, t, i, o, this.style.placement.variableOffsets, this.options.isInitialLoad), this.gpuTimingEnd()); } gpuTimingStart(e) { if (!this.options.gpuTiming) return; const t = this.context.extTimerQuery; let i = this.gpuTimers[e.id]; i || (i = this.gpuTimers[e.id] = { calls: 0, cpuTime: 0, query: t.createQueryEXT() }), i.calls++, t.beginQueryEXT(t.TIME_ELAPSED_EXT, i.query); } gpuTimingDeferredRenderStart() { if (this.options.gpuTimingDeferredRender) { const e = this.context.extTimerQuery, t = e.createQueryEXT(); this.deferredRenderGpuTimeQueries.push(t), e.beginQueryEXT(e.TIME_ELAPSED_EXT, t); } } gpuTimingDeferredRenderEnd() { if (!this.options.gpuTimingDeferredRender) return; const e = this.context.extTimerQuery; e.endQueryEXT(e.TIME_ELAPSED_EXT); } gpuTimingEnd() { if (!this.options.gpuTiming) return; const e = this.context.extTimerQuery; e.endQueryEXT(e.TIME_ELAPSED_EXT); } collectGpuTimers() { const e = this.gpuTimers; return this.gpuTimers = {}, e } collectDeferredRenderGpuQueries() { const e = this.deferredRenderGpuTimeQueries; return this.deferredRenderGpuTimeQueries = [], e } queryGpuTimers(e) { const t = {}; for (const i in e) { const o = e[i], r = this.context.extTimerQuery, n = r.getQueryObjectEXT(o.query, r.QUERY_RESULT_EXT) / 1e6; r.deleteQueryEXT(o.query), t[i] = n; } return t } queryGpuTimeDeferredRender(e) { if (!this.options.gpuTimingDeferredRender) return 0; const t = this.context.extTimerQuery; let i = 0; for (const o of e) i += t.getQueryObjectEXT(o, t.QUERY_RESULT_EXT) / 1e6, t.deleteQueryEXT(o); return i } translatePosMatrix(t, i, o, r, n) { if (!o[0] && !o[1]) return t; const s = n ? "map" === r ? this.transform.angle : 0 : "viewport" === r ? -this.transform.angle : 0; if (s) { const e = Math.sin(s), t = Math.cos(s); o = [o[0] * t - o[1] * e, o[0] * e + o[1] * t]; } const a = [n ? o[0] : P(i, o[0], this.transform.zoom), n ? o[1] : P(i, o[1], this.transform.zoom), 0], l = new Float32Array(16); return e.translate(l, t, a), l } saveTileTexture(e) { const t = this._tileTextures[e.size[0]]; t ? t.push(e) : this._tileTextures[e.size[0]] = [e]; } getTileTexture(e) { const t = this._tileTextures[e]; return t && t.length > 0 ? t.pop() : null } isPatternMissing(e) { return null === e || void 0 !== e && !this.imageManager.getPattern(e.toString()) } terrainRenderModeElevated() { return this.style && !!this.style.getTerrain() && !!this.terrain && !this.terrain.renderingToTexture } currentGlobalDefines() { const e = this.terrain && this.terrain.renderingToTexture, t = this.terrain && 0 === this.terrain.exaggeration(), i = this.style && this.style.fog, o = []; return this.terrainRenderModeElevated() && o.push("TERRAIN"), "globe" === this.transform.projection.name && o.push("GLOBE"), t && o.push("ZERO_EXAGGERATION"), i && !e && 0 !== i.getOpacity(this.transform.pitch) && o.push("FOG"), e && o.push("RENDER_TO_TEXTURE"), this._showOverdrawInspector && o.push("OVERDRAW_INSPECTOR"), o } useProgram(e, t, i) { this.cache = this.cache || {}; const o = i || [], r = this.currentGlobalDefines().concat(o), n = Pi.cacheKey(ui[e], e, r, t); return this.cache[n] || (this.cache[n] = new Pi(this.context, e, ui[e], t, lo[e], r)), this.cache[n] } setCustomLayerDefaults() { this.context.unbindVAO(), this.context.cullFace.setDefault(), this.context.frontFace.setDefault(), this.context.cullFaceSide.setDefault(), this.context.activeTexture.setDefault(), this.context.pixelStoreUnpack.setDefault(), this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(), this.context.pixelStoreUnpackFlipY.setDefault(); } setBaseState() { const e = this.context.gl; this.context.cullFace.set(!1), this.context.viewport.set([0, 0, this.width, this.height]), this.context.blendEquation.set(e.FUNC_ADD); } initDebugOverlayCanvas() { null == this.debugOverlayCanvas && (this.debugOverlayCanvas = e.window.document.createElement("canvas"), this.debugOverlayCanvas.width = 512, this.debugOverlayCanvas.height = 512, this.debugOverlayTexture = new e.Texture(this.context, this.debugOverlayCanvas, this.context.gl.RGBA)); } destroy() { this._terrain && this._terrain.destroy(), this.globeSharedBuffers && this.globeSharedBuffers.destroy(), this.emptyTexture.destroy(), this.debugOverlayTexture && this.debugOverlayTexture.destroy(), this.atmosphereBuffer && this.atmosphereBuffer.destroy(); } prepareDrawTile() { this.terrain && this.terrain.prepareDrawTile(); } prepareDrawProgram(t, i, o) { if (this.terrain && this.terrain.renderingToTexture) return; const r = this.style.fog; if (r) { const n = r.getOpacity(this.transform.pitch), s = ((t, i, o, r, n, s, a, l, c, h, u) => { const _ = t.transform, d = i.properties.get("color").toArray01(); d[3] = r; const p = t.frameCounter / 1e3 % 1; return { u_fog_matrix: o ? _.calculateFogTileMatrix(o) : t.identityMat, u_fog_range: i.getFovAdjustedRange(_._fov), u_fog_color: d, u_fog_horizon_blend: i.properties.get("horizon-blend"), u_fog_temporal_offset: p, u_frustum_tl: n, u_frustum_tr: s, u_frustum_br: a, u_frustum_bl: l, u_globe_pos: c, u_globe_radius: h, u_viewport: u, u_globe_transition: e.globeToMercatorTransition(_.zoom), u_is_globe: +("globe" === _.projection.name) } })(this, r, o, n, this.transform.frustumCorners.TL, this.transform.frustumCorners.TR, this.transform.frustumCorners.BR, this.transform.frustumCorners.BL, this.transform.globeCenterInViewSpace, this.transform.globeRadius, [this.transform.width * e.exported.devicePixelRatio, this.transform.height * e.exported.devicePixelRatio]); i.setFogUniformValues(t, s); } } setTileLoadedFlag(e) { this.tileLoaded = e; } saveCanvasCopy() { const e = this.canvasCopy(); e && (this.frameCopies.push(e), this.tileLoaded = !1); } canvasCopy() { const e = this.context.gl, t = e.createTexture(); return e.bindTexture(e.TEXTURE_2D, t), e.copyTexImage2D(e.TEXTURE_2D, 0, e.RGBA, 0, 0, e.drawingBufferWidth, e.drawingBufferHeight, 0), t } getCanvasCopiesAndTimestamps() { return { canvasCopies: this.frameCopies, timeStamps: this.loadTimeStamps } } averageElevationNeedsEasing() { if (!this.transform._elevation) return !1; const e = this.style && this.style.fog; return !!e && 0 !== e.getOpacity(this.transform.pitch) } getBackgroundTiles() { const t = this._backgroundTiles, i = this._backgroundTiles = {}, o = this.transform.coveringTiles({ tileSize: 512 }); for (const r of o) i[r.key] = t[r.key] || new e.Tile(r, 512, this.transform.tileZoom, this); return i } clearBackgroundTiles() { this._backgroundTiles = {}; } } class Uo { constructor(e = 0, t = 0, i = 0, o = 0) { if (isNaN(e) || e < 0 || isNaN(t) || t < 0 || isNaN(i) || i < 0 || isNaN(o) || o < 0) throw new Error("Invalid value for edge-insets, top, bottom, left and right must all be numbers"); this.top = e, this.bottom = t, this.left = i, this.right = o; } interpolate(t, i, o) { return null != i.top && null != t.top && (this.top = e.number(t.top, i.top, o)), null != i.bottom && null != t.bottom && (this.bottom = e.number(t.bottom, i.bottom, o)), null != i.left && null != t.left && (this.left = e.number(t.left, i.left, o)), null != i.right && null != t.right && (this.right = e.number(t.right, i.right, o)), this } getCenter(t, i) { const o = e.clamp((this.left + t - this.right) / 2, 0, t), r = e.clamp((this.top + i - this.bottom) / 2, 0, i); return new e.pointGeometry(o, r) } equals(e) { return this.top === e.top && this.bottom === e.bottom && this.left === e.left && this.right === e.right } clone() { return new Uo(this.top, this.bottom, this.left, this.right) } toJSON() { return { top: this.top, bottom: this.bottom, left: this.left, right: this.right } } } function No(t, i) { const o = e.getColumn(t, 3); e.fromQuat(t, i), e.setColumn(t, 3, o); } function Go(t, i) { const o = e.identity$1([]); return e.rotateZ$1(o, o, -i), e.rotateX$1(o, o, -t), o } function jo(t, i) { const o = [t[0], t[1], 0], r = [i[0], i[1], 0]; if (e.length(o) >= 1e-15) { const t = e.normalize([], o); e.scale$2(r, t, e.dot(r, t)), i[0] = r[0], i[1] = r[1]; } const n = e.cross([], i, t); if (e.len(n) < 1e-15) return null; const s = Math.atan2(-n[1], n[0]); return Go(Math.atan2(Math.sqrt(t[0] * t[0] + t[1] * t[1]), -t[2]), s) } class Zo { constructor(e, t) { this.position = e, this.orientation = t; } get position() { return this._position } set position(t) { if (t) { const i = t instanceof e.MercatorCoordinate ? t : new e.MercatorCoordinate(t[0], t[1], t[2]); this._renderWorldCopies && (i.x = e.wrap(i.x, 0, 1)), this._position = i; } else this._position = null; } lookAtPoint(t, i) { if (this.orientation = null, !this.position) return; const o = this.position, r = this._elevation ? this._elevation.getAtPointOrZero(e.MercatorCoordinate.fromLngLat(t)) : 0, n = e.MercatorCoordinate.fromLngLat(t, r), s = [n.x - o.x, n.y - o.y, n.z - o.z]; i || (i = [0, 0, 1]), i[2] = Math.abs(i[2]), this.orientation = jo(s, i); } setPitchBearing(t, i) { this.orientation = Go(e.degToRad(t), e.degToRad(-i)); } } class Vo { constructor(t, i) { this._transform = e.identity([]), this.orientation = i, this.position = t; } get mercatorPosition() { const t = this.position; return new e.MercatorCoordinate(t[0], t[1], t[2]) } get position() { const t = e.getColumn(this._transform, 3); return [t[0], t[1], t[2]] } set position(t) { var i; t && e.setColumn(this._transform, 3, [(i = t)[0], i[1], i[2], 1]); } get orientation() { return this._orientation } set orientation(t) { this._orientation = t || e.identity$1([]), t && No(this._transform, this._orientation); } getPitchBearing() { const e = this.forward(), t = this.right(); return { bearing: Math.atan2(-t[1], t[0]), pitch: Math.atan2(Math.sqrt(e[0] * e[0] + e[1] * e[1]), -e[2]) } } setPitchBearing(e, t) { this._orientation = Go(e, t), No(this._transform, this._orientation); } forward() { const t = e.getColumn(this._transform, 2); return [-t[0], -t[1], -t[2]] } up() { const t = e.getColumn(this._transform, 1); return [-t[0], -t[1], -t[2]] } right() { const t = e.getColumn(this._transform, 0); return [t[0], t[1], t[2]] } getCameraToWorld(t, i) { const o = new Float64Array(16); return e.invert(o, this.getWorldToCamera(t, i)), o } getWorldToCameraPosition(t, i, o) { const r = this.position; e.scale$2(r, r, -t); const n = new Float64Array(16); return e.fromScaling(n, [o, o, o]), e.translate(n, n, r), n[10] *= i, n } getWorldToCamera(t, i) { const o = new Float64Array(16), r = new Float64Array(4), n = this.position; return e.conjugate(r, this._orientation), e.scale$2(n, n, -t), e.fromQuat(o, r), e.translate(o, o, n), o[1] *= -1, o[5] *= -1, o[9] *= -1, o[13] *= -1, o[8] *= i, o[9] *= i, o[10] *= i, o[11] *= i, o } getCameraToClipPerspective(t, i, o, r) { const n = new Float64Array(16); return e.perspective(n, t, i, o, r), n } getDistanceToElevation(t, i = !1) { const o = 0 === t ? 0 : e.mercatorZfromAltitude(t, i ? e.latFromMercatorY(this.position[1]) : this.position[1]), r = this.forward(); return (o - this.position[2]) / r[2] } clone() { return new Vo([...this.position], [...this.orientation]) } } function Wo(t, i) { const o = qo(t.projection, t.zoom, t.width, t.height), r = function(t, i, o, r, n) { const s = new e.LngLat(o.lng - 180 * $o, o.lat), a = new e.LngLat(o.lng + 180 * $o, o.lat), l = t.project(s.lng, s.lat), c = t.project(a.lng, a.lat), h = -Math.atan2(c.y - l.y, c.x - l.x), u = e.MercatorCoordinate.fromLngLat(o); u.y = e.clamp(u.y, -.999975, .999975); const _ = u.toLngLat(), d = t.project(_.lng, _.lat), p = e.MercatorCoordinate.fromLngLat(_); p.x += $o; const m = p.toLngLat(), f = t.project(m.lng, m.lat), g = Yo(f.x - d.x, f.y - d.y, h), v = e.MercatorCoordinate.fromLngLat(_); v.y += $o; const x = v.toLngLat(), y = t.project(x.lng, x.lat), b = Yo(y.x - d.x, y.y - d.y, h), w = Math.abs(g.x) / Math.abs(b.y), T = e.identity([]); e.rotateZ(T, T, -h * (1 - (n ? 0 : r))); const E = e.identity([]); return e.scale(E, E, [1, 1 - (1 - w) * r, 1]), E[4] = -b.x / b.y * r, e.rotateZ(E, E, h), e.multiply(E, T, E), E }(t.projection, 0, t.center, o, i), n = Xo(t); return e.scale(r, r, [n, n, 1]), r } function Xo(t) { const i = t.projection, o = qo(t.projection, t.zoom, t.width, t.height), r = Ho(i, t.center), n = Ho(i, e.LngLat.convert(i.center)); return Math.pow(2, r * o + (1 - o) * n) } function qo(t, i, o, r, n = 1 / 0) { const s = t.range; if (!s) return 0; const a = Math.min(n, Math.max(o, r)), l = Math.log(a / 1024) / Math.LN2; return e.smoothstep(s[0] + l, s[1] + l, i) } const $o = 1 / 4e4; function Ho(t, i) { const o = e.clamp(i.lat, -e.MAX_MERCATOR_LATITUDE, e.MAX_MERCATOR_LATITUDE), r = new e.LngLat(i.lng - 180 * $o, o), n = new e.LngLat(i.lng + 180 * $o, o), s = t.project(r.lng, o), a = t.project(n.lng, o), l = e.MercatorCoordinate.fromLngLat(r), c = e.MercatorCoordinate.fromLngLat(n), h = a.x - s.x, u = a.y - s.y, _ = c.x - l.x, d = c.y - l.y, p = Math.sqrt((_ * _ + d * d) / (h * h + u * u)); return Math.log(p) / Math.LN2 } function Yo(e, t, i) { const o = Math.cos(i), r = Math.sin(i); return { x: e * o - t * r, y: e * r + t * o } } class Ko { constructor(t, i, o, r, n, s, a) { this.tileSize = 512, this._renderWorldCopies = void 0 === n || n, this._minZoom = t || 0, this._maxZoom = i || 22, this._minPitch = null == o ? 0 : o, this._maxPitch = null == r ? 60 : r, this.setProjection(s), this.setMaxBounds(a), this.width = 0, this.height = 0, this._center = new e.LngLat(0, 0), this.zoom = 0, this.angle = 0, this._fov = .6435011087932844, this._pitch = 0, this._nearZ = 0, this._farZ = 0, this._unmodified = !0, this._edgeInsets = new Uo, this._projMatrixCache = {}, this._alignedProjMatrixCache = {}, this._fogTileMatrixCache = {}, this._distanceTileDataCache = {}, this._camera = new Vo, this._centerAltitude = 0, this._averageElevation = 0, this.cameraElevationReference = "ground", this._pixelsPerMercatorPixel = 1, this.globeRadius = 0, this.globeCenterInViewSpace = [0, 0, 0], this._horizonShift = .1; } clone() { const e = new Ko(this._minZoom, this._maxZoom, this._minPitch, this.maxPitch, this._renderWorldCopies, this.getProjection()); return e._elevation = this._elevation, e._centerAltitude = this._centerAltitude, e._centerAltitudeValidForExaggeration = this._centerAltitudeValidForExaggeration, e.tileSize = this.tileSize, e.mercatorFromTransition = this.mercatorFromTransition, e.width = this.width, e.height = this.height, e.cameraElevationReference = this.cameraElevationReference, e._center = this._center, e._setZoom(this.zoom), e._seaLevelZoom = this._seaLevelZoom, e.angle = this.angle, e._fov = this._fov, e._pitch = this._pitch, e._nearZ = this._nearZ, e._farZ = this._farZ, e._averageElevation = this._averageElevation, e._unmodified = this._unmodified, e._edgeInsets = this._edgeInsets.clone(), e._camera = this._camera.clone(), e._calcMatrices(), e.freezeTileCoverage = this.freezeTileCoverage, e.frustumCorners = this.frustumCorners, e } get elevation() { return this._elevation } set elevation(e) { this._elevation !== e && (this._elevation = e, this._updateCameraOnTerrain(), this._calcMatrices()); } updateElevation(e, t = !1) { const i = this._elevation && this._elevation.exaggeration() !== this._centerAltitudeValidForExaggeration; (null == this._seaLevelZoom || i) && this._updateCameraOnTerrain(), (e || i) && this._constrainCamera(t), this._calcMatrices(); } getProjection() { return e.pick(this.projection, ["name", "center", "parallels"]) } setProjection(i) { this.projectionOptions = i || { name: "mercator" }; const o = this.projection ? this.getProjection() : void 0; this.projection = e.getProjection(this.projectionOptions); const r = !t(o, this.getProjection()); return r && this._calcMatrices(), this.mercatorFromTransition = !1, r } setMercatorFromTransition() { const t = this.projection.name; this.mercatorFromTransition = !0, this.projectionOptions = { name: "mercator" }, this.projection = e.getProjection({ name: "mercator" }); const i = t !== this.projection.name; return i && this._calcMatrices(), i } get minZoom() { return this._minZoom } set minZoom(e) { this._minZoom !== e && (this._minZoom = e, this.zoom = Math.max(this.zoom, e)); } get maxZoom() { return this._maxZoom } set maxZoom(e) { this._maxZoom !== e && (this._maxZoom = e, this.zoom = Math.min(this.zoom, e)); } get minPitch() { return this._minPitch } set minPitch(e) { this._minPitch !== e && (this._minPitch = e, this.pitch = Math.max(this.pitch, e)); } get maxPitch() { return this._maxPitch } set maxPitch(e) { this._maxPitch !== e && (this._maxPitch = e, this.pitch = Math.min(this.pitch, e)); } get renderWorldCopies() { return this._renderWorldCopies && !0 === this.projection.supportsWorldCopies } set renderWorldCopies(e) { void 0 === e ? e = !0 : null === e && (e = !1), this._renderWorldCopies = e; } get worldSize() { return this.tileSize * this.scale } get cameraWorldSizeForFog() { const e = Math.max(this._camera.getDistanceToElevation(this._averageElevation), Number.EPSILON); return this._worldSizeFromZoom(this._zoomFromMercatorZ(e)) } get cameraWorldSize() { const e = Math.max(this._camera.getDistanceToElevation(this._averageElevation, !0), Number.EPSILON); return this._worldSizeFromZoom(this._zoomFromMercatorZ(e)) } get pixelsPerMeter() { return this.projection.pixelsPerMeter(this.center.lat, this.worldSize) } get cameraPixelsPerMeter() { return e.mercatorZfromAltitude(this.center.lat, this.cameraWorldSizeForFog) } get centerOffset() { return this.centerPoint._sub(this.size._div(2)) } get size() { return new e.pointGeometry(this.width, this.height) } get bearing() { return e.wrap(this.rotation, -180, 180) } set bearing(e) { this.rotation = e; } get rotation() { return -this.angle / Math.PI * 180 } set rotation(t) { const i = -t * Math.PI / 180; var o; this.angle !== i && (this._unmodified = !1, this.angle = i, this._calcMatrices(), this.rotationMatrix = (o = new e.ARRAY_TYPE(4), e.ARRAY_TYPE != Float32Array && (o[1] = 0, o[2] = 0), o[0] = 1, o[3] = 1, o), function(e, t, i) { var o = t[0], r = t[1], n = t[2], s = t[3], a = Math.sin(i), l = Math.cos(i); e[0] = o * l + n * a, e[1] = r * l + s * a, e[2] = o * -a + n * l, e[3] = r * -a + s * l; }(this.rotationMatrix, this.rotationMatrix, this.angle)); } get pitch() { return this._pitch / Math.PI * 180 } set pitch(t) { const i = e.clamp(t, this.minPitch, this.maxPitch) / 180 * Math.PI; this._pitch !== i && (this._unmodified = !1, this._pitch = i, this._calcMatrices()); } get aspect() { return this.width / this.height } get fov() { return this._fov / Math.PI * 180 } get fovX() { return this._fov } get fovY() { const e = 1 / Math.tan(.5 * this.fovX); return 2 * Math.atan(1 / this.aspect / e) } set fov(t) { t = Math.max(.01, Math.min(60, t)), this._fov !== t && (this._unmodified = !1, this._fov = e.degToRad(t), this._calcMatrices()); } get averageElevation() { return this._averageElevation } set averageElevation(e) { this._averageElevation = e, this._calcFogMatrices(), this._distanceTileDataCache = {}; } get zoom() { return this._zoom } set zoom(e) { const t = Math.min(Math.max(e, this.minZoom), this.maxZoom); this._zoom !== t && (this._unmodified = !1, this._setZoom(t), this._updateSeaLevelZoom(), this._constrain(), this._calcMatrices()); } _setZoom(e) { this._zoom = e, this.scale = this.zoomScale(e), this.tileZoom = Math.floor(e), this.zoomFraction = e - this.tileZoom; } _updateCameraOnTerrain() { if (!this._elevation || !this._elevation.isDataAvailableAtPoint(this.locationCoordinate(this.center))) return this._centerAltitude = 0, this._seaLevelZoom = null, void(this._centerAltitudeValidForExaggeration = void 0); const e = this._elevation; this._centerAltitude = e.getAtPointOrZero(this.locationCoordinate(this.center)), this._centerAltitudeValidForExaggeration = e.exaggeration(), this._updateSeaLevelZoom(); } _updateSeaLevelZoom() { void 0 !== this._centerAltitudeValidForExaggeration && (this._seaLevelZoom = this._zoomFromMercatorZ((this.pixelsPerMeter * this._centerAltitude + this.cameraToCenterDistance) / this.worldSize)); } sampleAverageElevation() { if (!this._elevation) return 0; const t = this._elevation, i = [ [.5, .2], [.3, .5], [.5, .5], [.7, .5], [.5, .8] ], o = this.horizonLineFromTop(); let r = 0, n = 0; for (let s = 0; s < i.length; s++) { const a = new e.pointGeometry(i[s][0] * this.width, o + i[s][1] * (this.height - o)), l = t.pointCoordinate(a); if (!l) continue; const c = 1 / Math.hypot(l[0] - this._camera.position[0], l[1] - this._camera.position[1]); r += l[3] * c, n += c; } return 0 === n ? NaN : r / n } get center() { return this._center } set center(e) { e.lat === this._center.lat && e.lng === this._center.lng || (this._unmodified = !1, this._center = e, this._terrainEnabled() && ("ground" === this.cameraElevationReference ? this._updateCameraOnTerrain() : this._updateZoomFromElevation()), this._constrain(), this._calcMatrices()); } _updateZoomFromElevation() { if (null == this._seaLevelZoom || !this._elevation) return; const e = this._seaLevelZoom, t = this._elevation.getAtPointOrZero(this.locationCoordinate(this.center)), i = this.pixelsPerMeter / this.worldSize * t, o = this._mercatorZfromZoom(e), r = this._mercatorZfromZoom(this._maxZoom), n = Math.max(o - i, r); this._setZoom(this._zoomFromMercatorZ(n)); } get padding() { return this._edgeInsets.toJSON() } set padding(e) { this._edgeInsets.equals(e) || (this._unmodified = !1, this._edgeInsets.interpolate(this._edgeInsets, e, 1), this._calcMatrices()); } computeZoomRelativeTo(t) { const i = this.rayIntersectionCoordinate(this.pointRayIntersection(this.centerPoint, t.toAltitude())); let o; o = t.z < this._camera.position[2] ? [i.x, i.y, i.z] : [t.x, t.y, t.z]; const r = e.length(e.sub([], this._camera.position, o)); return e.clamp(this._zoomFromMercatorZ(r), this._minZoom, this._maxZoom) } setFreeCameraOptions(t) { if (!this.height) return; if (!t.position && !t.orientation) return; this._updateCameraState(); let i = !1; if (t.orientation && !e.exactEquals(t.orientation, this._camera.orientation) && (i = this._setCameraOrientation(t.orientation)), t.position) { const o = [t.position.x, t.position.y, t.position.z]; e.exactEquals$1(o, this._camera.position) || (this._setCameraPosition(o), i = !0); } i && (this._updateStateFromCamera(), this.recenterOnTerrain()); } getFreeCameraOptions() { this._updateCameraState(); const t = this._camera.position, i = new Zo; return i.position = new e.MercatorCoordinate(t[0], t[1], t[2]), i.orientation = this._camera.orientation, i._elevation = this.elevation, i._renderWorldCopies = this.renderWorldCopies, i } _setCameraOrientation(t) { if (!e.length$1(t)) return !1; e.normalize$1(t, t); const i = e.transformQuat([], [0, 0, -1], t), o = e.transformQuat([], [0, -1, 0], t); if (o[2] < 0) return !1; const r = jo(i, o); return !!r && (this._camera.orientation = r, !0) } _setCameraPosition(t) { const i = this.zoomScale(this.minZoom) * this.tileSize, o = this.zoomScale(this.maxZoom) * this.tileSize, r = this.cameraToCenterDistance; t[2] = e.clamp(t[2], r / o, r / i), this._camera.position = t; } get centerPoint() { return this._edgeInsets.getCenter(this.width, this.height) } get fovAboveCenter() { return this._fov * (.5 + this.centerOffset.y / this.height) } isPaddingEqual(e) { return this._edgeInsets.equals(e) } interpolatePadding(e, t, i) { this._unmodified = !1, this._edgeInsets.interpolate(e, t, i), this._constrain(), this._calcMatrices(); } coveringZoomLevel(e) { const t = (e.roundZoom ? Math.round : Math.floor)(this.zoom + this.scaleZoom(this.tileSize / e.tileSize)); return Math.max(0, t) } getVisibleUnwrappedCoordinates(t) { const i = [new e.UnwrappedTileID(0, t)]; if (this.renderWorldCopies) { const o = this.pointCoordinate(new e.pointGeometry(0, 0)), r = this.pointCoordinate(new e.pointGeometry(this.width, 0)), n = this.pointCoordinate(new e.pointGeometry(this.width, this.height)), s = this.pointCoordinate(new e.pointGeometry(0, this.height)), a = Math.floor(Math.min(o.x, r.x, n.x, s.x)), l = Math.floor(Math.max(o.x, r.x, n.x, s.x)), c = 1; for (let o = a - c; o <= l + c; o++) 0 !== o && i.push(new e.UnwrappedTileID(o, t)); } return i } coveringTiles(t) { let i = this.coveringZoomLevel(t); const o = i, r = this.elevation && !t.isTerrainDEM, n = "mercator" === this.projection.name; if (void 0 !== t.minzoom && i < t.minzoom) return []; void 0 !== t.maxzoom && i > t.maxzoom && (i = t.maxzoom); const s = this.locationCoordinate(this.center), a = this.center.lat, l = 1 << i, c = [l * s.x, l * s.y, 0], h = "globe" === this.projection.name, u = !h, _ = e.Frustum.fromInvProjectionMatrix(this.invProjMatrix, this.worldSize, i, u), d = h ? this._camera.mercatorPosition : this.pointCoordinate(this.getCameraPoint()), p = l * e.mercatorZfromAltitude(1, this.center.lat), m = this._camera.position[2] / e.mercatorZfromAltitude(1, this.center.lat), f = [l * d.x, l * d.y, m * (u ? 1 : p)], g = this.cameraToCenterDistance / t.tileSize * (t.roundZoom ? 1 : .502), v = this.pitch <= 60 && this._edgeInsets.top <= this._edgeInsets.bottom && !this._elevation && !this.projection.isReprojectedInTileSpace ? i : 0, x = t.isTerrainDEM && this._elevation ? 1e4 * this._elevation.exaggeration() : this._centerAltitude, y = t.isTerrainDEM ? -x : this._elevation ? this._elevation.getMinElevationBelowMSL() : 0, b = this.projection.isReprojectedInTileSpace ? Xo(this) : 1, w = t => { const i = 1 / 4e4, o = new e.MercatorCoordinate(t.x + i, t.y, t.z), r = new e.MercatorCoordinate(t.x, t.y + i, t.z), n = t.toLngLat(), s = o.toLngLat(), a = r.toLngLat(), l = this.locationCoordinate(n), c = this.locationCoordinate(s), h = this.locationCoordinate(a), u = Math.hypot(c.x - l.x, c.y - l.y), _ = Math.hypot(h.x - l.x, h.y - l.y); return Math.sqrt(u * _) * b / i }, T = t => { const i = x, o = y; return { aabb: e.tileAABB(this, l, 0, 0, 0, t, o, i, this.projection), zoom: 0, x: 0, y: 0, minZ: o, maxZ: i, wrap: t, fullyVisible: !1 } }, E = []; let C = []; const M = i, I = t.reparseOverscaled ? o : i, S = e => e * e, D = S((m - this._centerAltitude) * p), L = e => { if (!this._elevation || !e.tileID || !n) return; const t = this._elevation.getMinMaxForTile(e.tileID), i = e.aabb; t ? (i.min[2] = t.min, i.max[2] = t.max, i.center[2] = (i.min[2] + i.max[2]) / 2) : (e.shouldSplit = A(e), e.shouldSplit || (i.min[2] = i.max[2] = i.center[2] = this._centerAltitude)); }, A = t => { if (t.zoom < v) return !0; if (t.zoom === M) return !1; if (null != t.shouldSplit) return t.shouldSplit; const i = t.aabb.distanceX(f), n = t.aabb.distanceY(f); let s = D, l = 1; if (h) { s = S(t.aabb.distanceZ(f)); const i = Math.pow(2, t.zoom), o = e.latFromMercatorY((t.y + 1) / i), r = e.latFromMercatorY(t.y / i), n = Math.min(Math.max(a, o), r), c = e.circumferenceAtLatitude(n) / e.circumferenceAtLatitude(a); if (l = n === a ? 1 / Math.max(1, this._mercatorScaleRatio - .3) : Math.min(1, c / this._mercatorScaleRatio), this.zoom <= e.GLOBE_ZOOM_THRESHOLD_MIN && t.zoom === M - 1 && c >= .9) return !0 } else if (r && (s = S(t.aabb.distanceZ(f) * p)), this.projection.isReprojectedInTileSpace && o <= 5) { const i = Math.pow(2, t.zoom), o = w(new e.MercatorCoordinate((t.x + .5) / i, (t.y + .5) / i)); l = o > .85 ? 1 : o; } const c = i * i + n * n + s, u = S((1 << M - t.zoom) * g * l * ((e, t) => { if (t * S(.707) < e) return 1; const i = Math.sqrt(t / e); return i / (1.4144271570014144 + (Math.pow(1.1, i - 1.4144271570014144 + 1) - 1) / (1.1 - 1) - 1) })(Math.max(s, D), c)); return c < u }; if (this.renderWorldCopies) for (let e = 1; e <= 3; e++) E.push(T(-e)), E.push(T(e)); for (E.push(T(0)); E.length > 0;) { const o = E.pop(), s = o.x, a = o.y; let u = o.fullyVisible; if (!u) { const e = o.aabb.intersects(_); if (0 === e) continue; u = 2 === e; } if (o.zoom !== M && A(o)) for (let t = 0; t < 4; t++) { const i = (s << 1) + t % 2, c = (a << 1) + (t >> 1), _ = { aabb: n ? o.aabb.quadrant(t) : e.tileAABB(this, l, o.zoom + 1, i, c, o.wrap, o.minZ, o.maxZ, this.projection), zoom: o.zoom + 1, x: i, y: c, wrap: o.wrap, fullyVisible: u, tileID: void 0, shouldSplit: void 0, minZ: o.minZ, maxZ: o.maxZ }; r && !h && (_.tileID = new e.OverscaledTileID(o.zoom + 1 === M ? I : o.zoom + 1, o.wrap, o.zoom + 1, i, c), L(_)), E.push(_); } else { const r = o.zoom === M ? I : o.zoom; if (t.minzoom && t.minzoom > r) continue; const n = c[0] - (.5 + s + (o.wrap << o.zoom)) * (1 << i - o.zoom), l = c[1] - .5 - a, h = o.tileID ? o.tileID : new e.OverscaledTileID(r, o.wrap, o.zoom, s, a); C.push({ tileID: h, distanceSq: n * n + l * l }); } } if (this.fogCullDistSq) { const i = this.fogCullDistSq, o = this.horizonLineFromTop(); C = C.filter((r => { const n = [0, 0, 0, 1], s = [e.EXTENT, e.EXTENT, 0, 1], a = this.calculateFogTileMatrix(r.tileID.toUnwrapped()); e.transformMat4$1(n, n, a), e.transformMat4$1(s, s, a); const l = e.getAABBPointSquareDist(n, s); if (0 === l) return !0; let c = !1; const h = this._elevation; if (h && l > i && 0 !== o) { const i = this.calculateProjMatrix(r.tileID.toUnwrapped()); let n; t.isTerrainDEM || (n = h.getMinMaxForTile(r.tileID)), n || (n = { min: y, max: x }); const s = e.furthestTileCorner(this.rotation), a = [s[0] * e.EXTENT, s[1] * e.EXTENT, n.max]; e.transformMat4(a, a, i), c = (1 - a[1]) * this.height * .5 < o; } return l < i || c })); } return C.sort(((e, t) => e.distanceSq - t.distanceSq)).map((e => e.tileID)) } resize(e, t) { this.width = e, this.height = t, this.pixelsToGLUnits = [2 / e, -2 / t], this._constrain(), this._calcMatrices(); } get unmodified() { return this._unmodified } zoomScale(e) { return Math.pow(2, e) } scaleZoom(e) { return Math.log(e) / Math.LN2 } project(t) { const i = e.clamp(t.lat, -e.MAX_MERCATOR_LATITUDE, e.MAX_MERCATOR_LATITUDE), o = this.projection.project(t.lng, i); return new e.pointGeometry(o.x * this.worldSize, o.y * this.worldSize) } unproject(e) { return this.projection.unproject(e.x / this.worldSize, e.y / this.worldSize) } get point() { return this.project(this.center) } get pointMerc() { return this.point._div(this.worldSize) } get pixelsPerMeterRatio() { return this.pixelsPerMeter / e.mercatorZfromAltitude(1, this.center.lat) / this.worldSize } setLocationAtPoint(t, i) { let o, r; const n = this.centerPoint; if ("globe" === this.projection.name) { const e = this.worldSize; o = (i.x - n.x) / e, r = (i.y - n.y) / e; } else { const e = this.pointCoordinate(i), t = this.pointCoordinate(n); o = e.x - t.x, r = e.y - t.y; } const s = this.locationCoordinate(t); this.setLocation(new e.MercatorCoordinate(s.x - o, s.y - r)); } setLocation(e) { this.center = this.coordinateLocation(e), this.projection.wrap && (this.center = this.center.wrap()); } locationPoint(e) { return this.projection.locationPoint(this, e) } locationPoint3D(e) { return this.projection.locationPoint(this, e, !0) } pointLocation(e) { return this.coordinateLocation(this.pointCoordinate(e)) } pointLocation3D(e) { return this.coordinateLocation(this.pointCoordinate3D(e)) } locationCoordinate(t, i) { const o = i ? e.mercatorZfromAltitude(i, t.lat) : void 0, r = this.projection.project(t.lng, t.lat); return new e.MercatorCoordinate(r.x, r.y, o) } coordinateLocation(e) { return this.projection.unproject(e.x, e.y) } pointRayIntersection(t, i) { const o = null != i ? i : this._centerAltitude, r = [t.x, t.y, 0, 1], n = [t.x, t.y, 1, 1]; e.transformMat4$1(r, r, this.pixelMatrixInverse), e.transformMat4$1(n, n, this.pixelMatrixInverse); const s = n[3]; e.scale$1(r, r, 1 / r[3]), e.scale$1(n, n, 1 / s); const a = r[2], l = n[2]; return { p0: r, p1: n, t: a === l ? 0 : (o - a) / (l - a) } } screenPointToMercatorRay(t) { const i = [t.x, t.y, 0, 1], o = [t.x, t.y, 1, 1]; return e.transformMat4$1(i, i, this.pixelMatrixInverse), e.transformMat4$1(o, o, this.pixelMatrixInverse), e.scale$1(i, i, 1 / i[3]), e.scale$1(o, o, 1 / o[3]), i[2] = e.mercatorZfromAltitude(i[2], this._center.lat) * this.worldSize, o[2] = e.mercatorZfromAltitude(o[2], this._center.lat) * this.worldSize, e.scale$1(i, i, 1 / this.worldSize), e.scale$1(o, o, 1 / this.worldSize), new e.Ray([i[0], i[1], i[2]], e.normalize([], e.sub([], o, i))) } rayIntersectionCoordinate(t) { const { p0: i, p1: o, t: r } = t, n = e.mercatorZfromAltitude(i[2], this._center.lat), s = e.mercatorZfromAltitude(o[2], this._center.lat); return new e.MercatorCoordinate(e.number(i[0], o[0], r) / this.worldSize, e.number(i[1], o[1], r) / this.worldSize, e.number(n, s, r)) } pointCoordinate(e, t = this._centerAltitude) { return this.projection.pointCoordinate(this, e.x, e.y, t) } pointCoordinate3D(t) { if (!this.elevation) return this.pointCoordinate(t); let i = this.projection.pointCoordinate3D(this, t.x, t.y); if (i) return new e.MercatorCoordinate(i[0], i[1], i[2]); let o = 0, r = this.horizonLineFromTop(); if (t.y > r) return this.pointCoordinate(t); const n = .02 * r, s = t.clone(); for (let t = 0; t < 10 && r - o > n; t++) { s.y = e.number(o, r, .66); const t = this.projection.pointCoordinate3D(this, s.x, s.y); t ? (r = s.y, i = t) : o = s.y; } return i ? new e.MercatorCoordinate(i[0], i[1], i[2]) : this.pointCoordinate(t) } isPointAboveHorizon(e) { return this.projection.isPointAboveHorizon(this, e) } _coordinatePoint(t, i) { const o = i && this.elevation ? this.elevation.getAtPointOrZero(t, this._centerAltitude) : this._centerAltitude, r = [t.x * this.worldSize, t.y * this.worldSize, o + t.toAltitude(), 1]; return e.transformMat4$1(r, r, this.pixelMatrix), r[3] > 0 ? new e.pointGeometry(r[0] / r[3], r[1] / r[3]) : new e.pointGeometry(Number.MAX_VALUE, Number.MAX_VALUE) } _getBoundsNonRectangular() { const { top: t, left: i } = this._edgeInsets, o = this.height - this._edgeInsets.bottom, r = this.width - this._edgeInsets.right, n = this.pointLocation3D(new e.pointGeometry(i, t)), s = this.pointLocation3D(new e.pointGeometry(r, t)), a = this.pointLocation3D(new e.pointGeometry(r, o)), l = this.pointLocation3D(new e.pointGeometry(i, o)); let c = Math.min(n.lng, s.lng, a.lng, l.lng), h = Math.max(n.lng, s.lng, a.lng, l.lng), u = Math.min(n.lat, s.lat, a.lat, l.lat), _ = Math.max(n.lat, s.lat, a.lat, l.lat); const d = Math.pow(2, -this.zoom) / 16 * 270, p = "globe" === this.projection.name ? 1 : 4, m = (t, i, o, r, n) => { const s = (t + o) / 2, a = (i + r) / 2, l = new e.pointGeometry(s, a), { lng: f, lat: g } = this.pointLocation3D(l), v = Math.max(0, c - f, u - g, f - h, g - _); c = Math.min(c, f), h = Math.max(h, f), u = Math.min(u, g), _ = Math.max(_, g), (n < p || v > d) && (m(t, i, s, a, n + 1), m(s, a, o, r, n + 1)); }; if (m(i, t, r, t, 1), m(r, t, r, o, 1), m(r, o, i, o, 1), m(i, o, i, t, 1), "globe" === this.projection.name) { const [t, i] = e.polesInViewport(this); t ? (_ = 90, h = 180, c = -180) : i && (u = -90, h = 180, c = -180); } return new e.LngLatBounds(new e.LngLat(c, u), new e.LngLat(h, _)) } _getBoundsRectangular(t, i) { const { top: o, left: r } = this._edgeInsets, n = this.height - this._edgeInsets.bottom, s = this.width - this._edgeInsets.right, a = new e.pointGeometry(r, o), l = new e.pointGeometry(s, o), c = new e.pointGeometry(s, n), h = new e.pointGeometry(r, n); let u = this.pointCoordinate(a, t), _ = this.pointCoordinate(l, t); const d = this.pointCoordinate(c, i), p = this.pointCoordinate(h, i), m = (e, t) => (t.y - e.y) / (t.x - e.x); return u.y > 1 && _.y >= 0 ? u = new e.MercatorCoordinate((1 - p.y) / m(p, u) + p.x, 1) : u.y < 0 && _.y <= 1 && (u = new e.MercatorCoordinate(-p.y / m(p, u) + p.x, 0)), _.y > 1 && u.y >= 0 ? _ = new e.MercatorCoordinate((1 - d.y) / m(d, _) + d.x, 1) : _.y < 0 && u.y <= 1 && (_ = new e.MercatorCoordinate(-d.y / m(d, _) + d.x, 0)), (new e.LngLatBounds).extend(this.coordinateLocation(u)).extend(this.coordinateLocation(_)).extend(this.coordinateLocation(p)).extend(this.coordinateLocation(d)) } _getBoundsRectangularTerrain() { const e = this.elevation; if (!e.visibleDemTiles.length || e.isUsingMockSource()) return this._getBoundsRectangular(0, 0); const t = e.visibleDemTiles.reduce(((e, t) => { if (t.dem) { const i = t.dem.tree; e.min = Math.min(e.min, i.minimums[0]), e.max = Math.max(e.max, i.maximums[0]); } return e }), { min: Number.MAX_VALUE, max: 0 }); return this._getBoundsRectangular(t.min * e.exaggeration(), t.max * e.exaggeration()) } getBounds() { return "mercator" === this.projection.name || "equirectangular" === this.projection.name ? this._terrainEnabled() ? this._getBoundsRectangularTerrain() : this._getBoundsRectangular(0, 0) : this._getBoundsNonRectangular() } horizonLineFromTop(e = !0) { const t = this.height / 2 / Math.tan(this._fov / 2) / Math.tan(Math.max(this._pitch, .1)) + this.centerOffset.y, i = this.height / 2 - t * (1 - this._horizonShift); return e ? Math.max(0, i) : i } getMaxBounds() { return this.maxBounds } setMaxBounds(t) { this.maxBounds = t, this.minLat = -e.MAX_MERCATOR_LATITUDE, this.maxLat = e.MAX_MERCATOR_LATITUDE, this.minLng = -180, this.maxLng = 180, t && (this.minLat = t.getSouth(), this.maxLat = t.getNorth(), this.minLng = t.getWest(), this.maxLng = t.getEast(), this.maxLng < this.minLng && (this.maxLng += 360)), this.worldMinX = e.mercatorXfromLng(this.minLng) * this.tileSize, this.worldMaxX = e.mercatorXfromLng(this.maxLng) * this.tileSize, this.worldMinY = e.mercatorYfromLat(this.maxLat) * this.tileSize, this.worldMaxY = e.mercatorYfromLat(this.minLat) * this.tileSize, this._constrain(); } calculatePosMatrix(e, t) { return this.projection.createTileMatrix(this, t, e) } calculateDistanceTileData(t) { const i = t.key, o = this._distanceTileDataCache; if (o[i]) return o[i]; const r = t.canonical, n = 1 / this.height, s = this.cameraWorldSize, a = s / this.zoomScale(r.z), l = (r.x + Math.pow(2, r.z) * t.wrap) * a, c = r.y * a, h = this.point; h.x *= s / this.worldSize, h.y *= s / this.worldSize; const u = this.angle, _ = Math.sin(-u), d = -Math.cos(-u); return o[i] = { bearing: [_, d], center: [(h.x - l) * n, (h.y - c) * n], scale: a / e.EXTENT * n }, o[i] } calculateFogTileMatrix(t) { const i = t.key, o = this._fogTileMatrixCache; if (o[i]) return o[i]; const r = this.projection.createTileMatrix(this, this.cameraWorldSizeForFog, t); return e.multiply(r, this.worldToFogMatrix, r), o[i] = new Float32Array(r), o[i] } calculateProjMatrix(t, i = !1) { const o = t.key, r = i ? this._alignedProjMatrixCache : this._projMatrixCache; if (r[o]) return r[o]; const n = this.calculatePosMatrix(t, this.worldSize); return e.multiply(n, this.projection.isReprojectedInTileSpace ? this.mercatorMatrix : i ? this.alignedProjMatrix : this.projMatrix, n), r[o] = new Float32Array(n), r[o] } calculatePixelsToTileUnitsMatrix(t) { const i = t.tileID.key, o = this._pixelsToTileUnitsCache; if (o[i]) return o[i]; const r = function(t, i) { const { scale: o } = t.tileTransform, r = o * e.EXTENT / (t.tileSize * Math.pow(2, i.zoom - t.tileID.overscaledZ + t.tileID.canonical.z)); return n = new Float32Array(4), l = (s = i.inverseAdjustmentMatrix)[1], c = s[2], h = s[3], _ = (a = [r, r])[1], n[0] = s[0] * (u = a[0]), n[1] = l * u, n[2] = c * _, n[3] = h * _, n; var n, s, a, l, c, h, u, _; }(t, this); return o[i] = r, o[i] } customLayerMatrix() { return this.mercatorMatrix.slice() } globeToMercatorMatrix() { if ("globe" === this.projection.name) { const t = 1 / this.worldSize, i = e.fromScaling([], [t, t, t]); return e.multiply(i, i, this.globeMatrix), i } } recenterOnTerrain() { if (!this._elevation || "globe" === this.projection.name) return; const t = this._elevation; this._updateCameraState(); const i = e.mercatorZfromAltitude(1, this._center.lat) * this.worldSize, o = this._computeCameraPosition(i), r = this._camera.forward(), n = e.mercatorZfromAltitude(1, this._center.lat); o[2] /= n, r[2] /= n, e.normalize(r, r); const s = t.raycast(o, r, t.exaggeration()); if (s) { const t = e.scaleAndAdd([], o, r, s), i = new e.MercatorCoordinate(t[0], t[1], e.mercatorZfromAltitude(t[2], e.latFromMercatorY(t[1]))), a = (i.z + e.length([i.x - o[0], i.y - o[1], i.z - o[2] * n])) * this._pixelsPerMercatorPixel; this._seaLevelZoom = this._zoomFromMercatorZ(a), this._centerAltitude = i.toAltitude(), this._center = this.coordinateLocation(i), this._updateZoomFromElevation(), this._constrain(), this._calcMatrices(); } } _constrainCamera(t = !1) { if (!this._elevation) return; const i = this._elevation, o = e.mercatorZfromAltitude(1, this._center.lat) * this.worldSize, r = this._computeCameraPosition(o), n = i.getAtPointOrZero(new e.MercatorCoordinate(...r)), s = this.pixelsPerMeter / this.worldSize * n, a = this._minimumHeightOverTerrain(), l = r[2] - s; if (l <= a) if (l < 0 || t) { const t = this.locationCoordinate(this._center, this._centerAltitude), i = [r[0], r[1], t.z - r[2]], o = e.length(i); i[2] -= (a - l) / this._pixelsPerMercatorPixel; const n = e.length(i); if (0 === n) return; e.scale$2(i, i, o / n * this._pixelsPerMercatorPixel), this._camera.position = [r[0], r[1], t.z * this._pixelsPerMercatorPixel - i[2]], this._updateStateFromCamera(); } else this._isCameraConstrained = !0; } _constrain() { if (!this.center || !this.width || !this.height || this._constraining) return; this._constraining = !0; const t = "globe" === this.projection.name || this.mercatorFromTransition; if (this.projection.isReprojectedInTileSpace || t) { const i = this.center; return i.lat = e.clamp(i.lat, this.minLat, this.maxLat), (this.maxBounds || !this.renderWorldCopies && !t) && (i.lng = e.clamp(i.lng, this.minLng, this.maxLng)), this.center = i, void(this._constraining = !1) } const i = this._unmodified, { x: o, y: r } = this.point; let n = 0, s = o, a = r; const l = this.width / 2, c = this.height / 2, h = this.worldMinY * this.scale, u = this.worldMaxY * this.scale; if (r - c < h && (a = h + c), r + c > u && (a = u - c), u - h < this.height && (n = Math.max(n, this.height / (u - h)), a = (u + h) / 2), this.maxBounds || !this._renderWorldCopies || !this.projection.wrap) { const e = this.worldMinX * this.scale, t = this.worldMaxX * this.scale, i = this.worldSize / 2 - (e + t) / 2; s = (o + i + this.worldSize) % this.worldSize - i, s - l < e && (s = e + l), s + l > t && (s = t - l), t - e < this.width && (n = Math.max(n, this.width / (t - e)), s = (t + e) / 2); } s === o && a === r || (this.center = this.unproject(new e.pointGeometry(s, a))), n && (this.zoom += this.scaleZoom(n)), this._constrainCamera(), this._unmodified = i, this._constraining = !1; } _minZoomForBounds() { let e = Math.max(0, this.scaleZoom(this.height / (this.worldMaxY - this.worldMinY))); return this.maxBounds && (e = Math.max(e, this.scaleZoom(this.width / (this.worldMaxX - this.worldMinX)))), e } _maxCameraBoundsDistance() { return this._mercatorZfromZoom(this._minZoomForBounds()) } _calcMatrices() { if (!this.height) return; const t = this.centerOffset, i = this.pixelsPerMeter; "globe" === this.projection.name && (this._mercatorScaleRatio = e.mercatorZfromAltitude(1, this.center.lat) / e.mercatorZfromAltitude(1, e.GLOBE_SCALE_MATCH_LATITUDE)); const o = qo(this.projection, this.zoom, this.width, this.height, 1024); this._pixelsPerMercatorPixel = this.projection.pixelSpaceConversion(this.center.lat, this.worldSize, o), this.cameraToCenterDistance = .5 / Math.tan(.5 * this._fov) * this.height * this._pixelsPerMercatorPixel, this._updateCameraState(), this._farZ = this.projection.farthestPixelDistance(this), this._nearZ = this.height / 50; const r = "meters" === this.projection.zAxisUnit ? i : 1, n = this._camera.getWorldToCamera(this.worldSize, r), s = this._camera.getCameraToClipPerspective(this._fov, this.width / this.height, this._nearZ, this._farZ); s[8] = 2 * -t.x / this.width, s[9] = 2 * t.y / this.height; let a = e.mul([], s, n); if (this.projection.isReprojectedInTileSpace) { const t = this.locationCoordinate(this.center), i = e.identity([]); e.translate(i, i, [t.x * this.worldSize, t.y * this.worldSize, 0]), e.multiply(i, i, Wo(this)), e.translate(i, i, [-t.x * this.worldSize, -t.y * this.worldSize, 0]), e.multiply(a, a, i), this.inverseAdjustmentMatrix = function(e) { const t = Wo(e, !0); return v([], [t[0], t[1], t[4], t[5]]) }(this); } else this.inverseAdjustmentMatrix = [1, 0, 0, 1]; this.mercatorMatrix = e.scale([], a, [this.worldSize, this.worldSize, this.worldSize / r, 1]), this.projMatrix = a, this.invProjMatrix = e.invert(new Float64Array(16), this.projMatrix); const l = e.invert([], s); this.frustumCorners = e.FrustumCorners.fromInvProjectionMatrix(l, this.horizonLineFromTop(), this.height); const c = new Float32Array(16); e.identity(c), e.scale(c, c, [1, -1, 1]), e.rotateX(c, c, this._pitch), e.rotateZ(c, c, this.angle); const h = e.perspective(new Float32Array(16), this._fov, this.width / this.height, this._nearZ, this._farZ), u = (Math.PI / 2 - this._pitch) * (this.height / this._fov) * this._horizonShift; h[8] = 2 * -t.x / this.width, h[9] = 2 * (t.y + u) / this.height, this.skyboxMatrix = e.multiply(c, h, c); const _ = this.point, d = _.x, p = _.y, m = this.width % 2 / 2, f = this.height % 2 / 2, g = Math.cos(this.angle), x = Math.sin(this.angle), y = d - Math.round(d) + g * m + x * f, b = p - Math.round(p) + g * f + x * m, w = new Float64Array(a); if (e.translate(w, w, [y > .5 ? y - 1 : y, b > .5 ? b - 1 : b, 0]), this.alignedProjMatrix = w, a = e.create(), e.scale(a, a, [this.width / 2, -this.height / 2, 1]), e.translate(a, a, [1, -1, 0]), this.labelPlaneMatrix = a, a = e.create(), e.scale(a, a, [1, -1, 1]), e.translate(a, a, [-1, -1, 0]), e.scale(a, a, [2 / this.width, 2 / this.height, 1]), this.glCoordMatrix = a, this.pixelMatrix = e.multiply(new Float64Array(16), this.labelPlaneMatrix, this.projMatrix), this._calcFogMatrices(), this._distanceTileDataCache = {}, a = e.invert(new Float64Array(16), this.pixelMatrix), !a) throw new Error("failed to invert matrix"); if (this.pixelMatrixInverse = a, "globe" === this.projection.name || this.mercatorFromTransition) { this.globeMatrix = e.calculateGlobeMatrix(this); const t = [this.globeMatrix[12], this.globeMatrix[13], this.globeMatrix[14]]; this.globeCenterInViewSpace = e.transformMat4(t, t, n), this.globeRadius = this.worldSize / 2 / Math.PI - 1; } else this.globeMatrix = a; this._projMatrixCache = {}, this._alignedProjMatrixCache = {}, this._pixelsToTileUnitsCache = {}; } _calcFogMatrices() { this._fogTileMatrixCache = {}; const t = this.cameraWorldSizeForFog, i = this.cameraPixelsPerMeter, o = this._camera.position, r = 1 / this.height / this._pixelsPerMercatorPixel, n = [t, t, i]; e.scale$2(n, n, r), e.scale$2(o, o, -1), e.multiply$2(o, o, n); const s = e.create(); e.translate(s, s, o), e.scale(s, s, n), this.mercatorFogMatrix = s, this.worldToFogMatrix = this._camera.getWorldToCameraPosition(t, i, r); } _computeCameraPosition(e) { const t = (e = e || this.pixelsPerMeter) / this.pixelsPerMeter, i = this._camera.forward(), o = this.point, r = this._mercatorZfromZoom(this._seaLevelZoom ? this._seaLevelZoom : this._zoom) * t - e / this.worldSize * this._centerAltitude; return [o.x / this.worldSize - i[0] * r, o.y / this.worldSize - i[1] * r, e / this.worldSize * this._centerAltitude - i[2] * r] } _updateCameraState() { this.height && (this._camera.setPitchBearing(this._pitch, this.angle), this._camera.position = this._computeCameraPosition()); } _translateCameraConstrained(t) { const i = this._maxCameraBoundsDistance() * Math.cos(this._pitch), o = this._camera.position[2], r = t[2]; let n = 1; this.projection.wrap && (this.center = this.center.wrap()), r > 0 && (n = Math.min((i - o) / r, 1)), this._camera.position = e.scaleAndAdd([], this._camera.position, t, n), this._updateStateFromCamera(); } _updateStateFromCamera() { const t = this._camera.position, i = this._camera.forward(), { pitch: o, bearing: r } = this._camera.getPitchBearing(), n = e.mercatorZfromAltitude(this._centerAltitude, this.center.lat) * this._pixelsPerMercatorPixel, s = this._mercatorZfromZoom(this._maxZoom) * Math.cos(e.degToRad(this._maxPitch)), a = Math.max((t[2] - n) / Math.cos(o), s), l = this._zoomFromMercatorZ(a); e.scaleAndAdd(t, t, i, a), this._pitch = e.clamp(o, e.degToRad(this.minPitch), e.degToRad(this.maxPitch)), this.angle = e.wrap(r, -Math.PI, Math.PI), this._setZoom(e.clamp(l, this._minZoom, this._maxZoom)), this._updateSeaLevelZoom(), this._center = this.coordinateLocation(new e.MercatorCoordinate(t[0], t[1], t[2])), this._unmodified = !1, this._constrain(), this._calcMatrices(); } _worldSizeFromZoom(e) { return Math.pow(2, e) * this.tileSize } _mercatorZfromZoom(e) { return this.cameraToCenterDistance / this._worldSizeFromZoom(e) } _minimumHeightOverTerrain() { const e = Math.min((null != this._seaLevelZoom ? this._seaLevelZoom : this._zoom) + 4, this._maxZoom); return this._mercatorZfromZoom(e) } _zoomFromMercatorZ(e) { return this.scaleZoom(this.cameraToCenterDistance / (e * this.tileSize)) } zoomFromMercatorZAdjusted(t) { let i = 0, o = e.GLOBE_ZOOM_THRESHOLD_MAX, r = 0, n = 1 / 0; for (; o - i > 1e-6 && o > i;) { const e = i + .5 * (o - i), s = this.tileSize * Math.pow(2, e), a = this.getCameraToCenterDistance(this.projection, e, s), l = this.scaleZoom(a / (t * this.tileSize)), c = Math.abs(e - l); c < n && (n = c, r = e), e < l ? i = e : o = e; } return r } _terrainEnabled() { return !(!this._elevation || !this.projection.supportsTerrain && (e.warnOnce("Terrain is not yet supported with alternate projections. Use mercator or globe to enable terrain."), 1)) } anyCornerOffEdge(t, i) { const o = Math.min(t.x, i.x), r = Math.max(t.x, i.x), n = Math.min(t.y, i.y), s = Math.max(t.y, i.y); if (n < this.horizonLineFromTop(!1)) return !0; if ("mercator" !== this.projection.name) return !1; const a = [new e.pointGeometry(o, n), new e.pointGeometry(r, s), new e.pointGeometry(o, s), new e.pointGeometry(r, n)], l = this.renderWorldCopies ? -3 : 0, c = this.renderWorldCopies ? 4 : 1; for (const e of a) { const t = this.pointRayIntersection(e); if (t.t < 0) return !0; const i = this.rayIntersectionCoordinate(t); if (i.x < l || i.y < 0 || i.x > c || i.y > 1) return !0 } return !1 } isHorizonVisible() { return this.pitch + e.radToDeg(this.fovAboveCenter) > 88 || this.anyCornerOffEdge(new e.pointGeometry(0, 0), new e.pointGeometry(this.width, this.height)) } zoomDeltaToMovement(t, i) { const o = e.length(e.sub([], this._camera.position, t)), r = this._zoomFromMercatorZ(o) + i; return o - this._mercatorZfromZoom(r) } getCameraPoint() { if ("globe" === this.projection.name) { const t = function([t, i, o], r) { const n = [t, i, o, 1]; e.transformMat4$1(n, n, r); const s = n[3] = Math.max(n[3], 1e-6); return n[0] /= s, n[1] /= s, n[2] /= s, n }([this.globeMatrix[12], this.globeMatrix[13], this.globeMatrix[14]], this.pixelMatrix); return new e.pointGeometry(t[0], t[1]) } { const t = Math.tan(this._pitch) * (this.cameraToCenterDistance || 1); return this.centerPoint.add(new e.pointGeometry(0, t)) } } getCameraToCenterDistance(e, t = this.zoom, i = this.worldSize) { const o = qo(e, t, this.width, this.height, 1024), r = e.pixelSpaceConversion(this.center.lat, i, o); return .5 / Math.tan(.5 * this._fov) * this.height * r } getWorldToCameraMatrix() { const t = this._camera.getWorldToCamera(this.worldSize, "meters" === this.projection.zAxisUnit ? this.pixelsPerMeter : 1); return "globe" === this.projection.name && e.multiply(t, t, this.globeMatrix), t } } function Jo(e, t) { let i = !1, o = null; const r = () => { o = null, i && (e(), o = setTimeout(r, t), i = !1); }; return () => (i = !0, o || r(), o) } class Qo { constructor(t) { this._hashName = t && encodeURIComponent(t), e.bindAll(["_getCurrentHash", "_onHashChange", "_updateHash"], this), this._updateHash = Jo(this._updateHashUnthrottled.bind(this), 300); } addTo(t) { return this._map = t, e.window.addEventListener("hashchange", this._onHashChange, !1), t.on("moveend", this._updateHash), this } remove() { return this._map ? (this._map.off("moveend", this._updateHash), e.window.removeEventListener("hashchange", this._onHashChange, !1), clearTimeout(this._updateHash()), this._map = void 0, this) : this } getHashString() { const t = this._map; if (!t) return ""; const i = er(t); if (this._hashName) { const t = this._hashName; let o = !1; const r = e.window.location.hash.slice(1).split("&").map((e => { const r = e.split("=")[0]; return r === t ? (o = !0, `${r}=${i}`) : e })).filter((e => e)); return o || r.push(`${t}=${i}`), `#${r.join("&")}` } return `#${i}` } _getCurrentHash() { const t = e.window.location.hash.replace("#", ""); if (this._hashName) { let e; return t.split("&").map((e => e.split("="))).forEach((t => { t[0] === this._hashName && (e = t); })), (e && e[1] || "").split("/") } return t.split("/") } _onHashChange() { const e = this._map; if (!e) return !1; const t = this._getCurrentHash(); if (t.length >= 3 && !t.some((e => isNaN(e)))) { const i = e.dragRotate.isEnabled() && e.touchZoomRotate.isEnabled() ? +(t[3] || 0) : e.getBearing(); return e.jumpTo({ center: [+t[2], +t[1]], zoom: +t[0], bearing: i, pitch: +(t[4] || 0) }), !0 } return !1 } _updateHashUnthrottled() { const t = e.window.location.href.replace(/(#.+)?$/, this.getHashString()); e.window.history.replaceState(e.window.history.state, null, t); } } function er(e, t) { const i = e.getCenter(), o = Math.round(100 * e.getZoom()) / 100, r = Math.ceil((o * Math.LN2 + Math.log(512 / 360 / .5)) / Math.LN10), n = Math.pow(10, r), s = Math.round(i.lng * n) / n, a = Math.round(i.lat * n) / n, l = e.getBearing(), c = e.getPitch(); let h = t ? `/${s}/${a}/${o}` : `${o}/${a}/${s}`; return (l || c) && (h += "/" + Math.round(10 * l) / 10), c && (h += `/${Math.round(c)}`), h } const tr = { linearity: .3, easing: e.bezier(0, 0, .3, 1) }, ir = e.extend({ deceleration: 2500, maxSpeed: 1400 }, tr), or = e.extend({ deceleration: 20, maxSpeed: 1400 }, tr), rr = e.extend({ deceleration: 1e3, maxSpeed: 360 }, tr), nr = e.extend({ deceleration: 1e3, maxSpeed: 90 }, tr); class sr { constructor(e) { this._map = e, this.clear(); } clear() { this._inertiaBuffer = []; } record(t) { this._drainInertiaBuffer(), this._inertiaBuffer.push({ time: e.exported.now(), settings: t }); } _drainInertiaBuffer() { const t = this._inertiaBuffer, i = e.exported.now(); for (; t.length > 0 && i - t[0].time > 160;) t.shift(); } _onMoveEnd(t) { if (e.exported.prefersReducedMotion) return; if (this._drainInertiaBuffer(), this._inertiaBuffer.length < 2) return; const i = { zoom: 0, bearing: 0, pitch: 0, pan: new e.pointGeometry(0, 0), pinchAround: void 0, around: void 0 }; for (const { settings: e } of this._inertiaBuffer) i.zoom += e.zoomDelta || 0, i.bearing += e.bearingDelta || 0, i.pitch += e.pitchDelta || 0, e.panDelta && i.pan._add(e.panDelta), e.around && (i.around = e.around), e.pinchAround && (i.pinchAround = e.pinchAround); const o = this._inertiaBuffer[this._inertiaBuffer.length - 1].time - this._inertiaBuffer[0].time, r = {}; if (i.pan.mag()) { const n = lr(i.pan.mag(), o, e.extend({}, ir, t || {})); r.offset = i.pan.mult(n.amount / i.pan.mag()), r.center = this._map.transform.center, ar(r, n); } if (i.zoom) { const e = lr(i.zoom, o, or); r.zoom = this._map.transform.zoom + e.amount, ar(r, e); } if (i.bearing) { const t = lr(i.bearing, o, rr); r.bearing = this._map.transform.bearing + e.clamp(t.amount, -179, 179), ar(r, t); } if (i.pitch) { const e = lr(i.pitch, o, nr); r.pitch = this._map.transform.pitch + e.amount, ar(r, e); } if (r.zoom || r.bearing) { const e = void 0 === i.pinchAround ? i.around : i.pinchAround; r.around = e ? this._map.unproject(e) : this._map.getCenter(); } return this.clear(), r.noMoveStart = !0, r } } function ar(e, t) { (!e.duration || e.duration < t.duration) && (e.duration = t.duration, e.easing = t.easing); } function lr(t, i, o) { const { maxSpeed: r, linearity: n, deceleration: s } = o, a = e.clamp(t * n / (i / 1e3), -r, r), l = Math.abs(a) / (s * n); return { easing: o.easing, duration: 1e3 * l, amount: a * (l / 2) } } class cr extends e.Event { preventDefault() { this._defaultPrevented = !0; } get defaultPrevented() { return this._defaultPrevented } constructor(t, i, o, r = {}) { const n = p(i.getCanvasContainer(), o), s = i.unproject(n); super(t, e.extend({ point: n, lngLat: s, originalEvent: o }, r)), this._defaultPrevented = !1, this.target = i; } } class hr extends e.Event { preventDefault() { this._defaultPrevented = !0; } get defaultPrevented() { return this._defaultPrevented } constructor(t, i, o) { const r = "touchend" === t ? o.changedTouches : o.touches, n = m(i.getCanvasContainer(), r), s = n.map((e => i.unproject(e))), a = n.reduce(((e, t, i, o) => e.add(t.div(o.length))), new e.pointGeometry(0, 0)); super(t, { points: n, point: a, lngLats: s, lngLat: i.unproject(a), originalEvent: o }), this._defaultPrevented = !1; } } class ur extends e.Event { preventDefault() { this._defaultPrevented = !0; } get defaultPrevented() { return this._defaultPrevented } constructor(e, t, i) { super(e, { originalEvent: i }), this._defaultPrevented = !1; } } class _r { constructor(e, t) { this._map = e, this._clickTolerance = t.clickTolerance; } reset() { this._mousedownPos = void 0; } wheel(e) { return this._firePreventable(new ur(e.type, this._map, e)) } mousedown(e, t) { return this._mousedownPos = t, this._firePreventable(new cr(e.type, this._map, e)) } mouseup(e) { this._map.fire(new cr(e.type, this._map, e)); } preclick(t) { const i = e.extend({}, t); i.type = "preclick", this._map.fire(new cr(i.type, this._map, i)); } click(e, t) { this._mousedownPos && this._mousedownPos.dist(t) >= this._clickTolerance || (this.preclick(e), this._map.fire(new cr(e.type, this._map, e))); } dblclick(e) { return this._firePreventable(new cr(e.type, this._map, e)) } mouseover(e) { this._map.fire(new cr(e.type, this._map, e)); } mouseout(e) { this._map.fire(new cr(e.type, this._map, e)); } touchstart(e) { return this._firePreventable(new hr(e.type, this._map, e)) } touchmove(e) { this._map.fire(new hr(e.type, this._map, e)); } touchend(e) { this._map.fire(new hr(e.type, this._map, e)); } touchcancel(e) { this._map.fire(new hr(e.type, this._map, e)); } _firePreventable(e) { if (this._map.fire(e), e.defaultPrevented) return {} } isEnabled() { return !0 } isActive() { return !1 } enable() {} disable() {} } class dr { constructor(e) { this._map = e; } reset() { this._delayContextMenu = !1, this._contextMenuEvent = void 0; } mousemove(e) { this._map.fire(new cr(e.type, this._map, e)); } mousedown() { this._delayContextMenu = !0; } mouseup() { this._delayContextMenu = !1, this._contextMenuEvent && (this._map.fire(new cr("contextmenu", this._map, this._contextMenuEvent)), delete this._contextMenuEvent); } contextmenu(e) { this._delayContextMenu ? this._contextMenuEvent = e : this._map.fire(new cr(e.type, this._map, e)), this._map.listens("contextmenu") && e.preventDefault(); } isEnabled() { return !0 } isActive() { return !1 } enable() {} disable() {} } class pr { constructor(e, t) { this._map = e, this._el = e.getCanvasContainer(), this._container = e.getContainer(), this._clickTolerance = t.clickTolerance || 1; } isEnabled() { return !!this._enabled } isActive() { return !!this._active } enable() { this.isEnabled() || (this._enabled = !0); } disable() { this.isEnabled() && (this._enabled = !1); } mousedown(e, t) { this.isEnabled() && e.shiftKey && 0 === e.button && (h(), this._startPos = this._lastPos = t, this._active = !0); } mousemoveWindow(e, t) { if (!this._active) return; const i = t, o = this._startPos, r = this._lastPos; if (!o || !r || r.equals(i) || !this._box && i.dist(o) < this._clickTolerance) return; this._lastPos = i, this._box || (this._box = n("div", "mapboxgl-boxzoom", this._container), this._container.classList.add("mapboxgl-crosshair"), this._fireEvent("boxzoomstart", e)); const s = Math.min(o.x, i.x), a = Math.max(o.x, i.x), l = Math.min(o.y, i.y), c = Math.max(o.y, i.y); this._map._requestDomTask((() => { this._box && (this._box.style.transform = `translate(${s}px,${l}px)`, this._box.style.width = a - s + "px", this._box.style.height = c - l + "px"); })); } mouseupWindow(t, i) { if (!this._active) return; const o = this._startPos, r = i; if (o && 0 === t.button) { if (this.reset(), d(), o.x !== r.x || o.y !== r.y) return this._map.fire(new e.Event("boxzoomend", { originalEvent: t })), { cameraAnimation: e => e.fitScreenCoordinates(o, r, this._map.getBearing(), { linear: !1 }) }; this._fireEvent("boxzoomcancel", t); } } keydown(e) { this._active && 27 === e.keyCode && (this.reset(), this._fireEvent("boxzoomcancel", e)); } blur() { this.reset(); } reset() { this._active = !1, this._container.classList.remove("mapboxgl-crosshair"), this._box && (this._box.remove(), this._box = null), u(), delete this._startPos, delete this._lastPos; } _fireEvent(t, i) { return this._map.fire(new e.Event(t, { originalEvent: i })) } } function mr(e, t) { const i = {}; for (let o = 0; o < e.length; o++) i[e[o].identifier] = t[o]; return i } class fr { constructor(e) { this.reset(), this.numTouches = e.numTouches; } reset() { this.centroid = void 0, this.startTime = 0, this.touches = {}, this.aborted = !1; } touchstart(t, i, o) { (this.centroid || o.length > this.numTouches) && (this.aborted = !0), this.aborted || (0 === this.startTime && (this.startTime = t.timeStamp), o.length === this.numTouches && (this.centroid = function(t) { const i = new e.pointGeometry(0, 0); for (const e of t) i._add(e); return i.div(t.length) }(i), this.touches = mr(o, i))); } touchmove(e, t, i) { if (this.aborted || !this.centroid) return; const o = mr(i, t); for (const e in this.touches) { const t = this.touches[e], i = o[e]; (!i || i.dist(t) > 30) && (this.aborted = !0); } } touchend(e, t, i) { if ((!this.centroid || e.timeStamp - this.startTime > 500) && (this.aborted = !0), 0 === i.length) { const e = !this.aborted && this.centroid; if (this.reset(), e) return e } } } class gr { constructor(e) { this.singleTap = new fr(e), this.numTaps = e.numTaps, this.reset(); } reset() { this.lastTime = 1 / 0, this.lastTap = void 0, this.count = 0, this.singleTap.reset(); } touchstart(e, t, i) { this.singleTap.touchstart(e, t, i); } touchmove(e, t, i) { this.singleTap.touchmove(e, t, i); } touchend(e, t, i) { const o = this.singleTap.touchend(e, t, i); if (o) { const t = e.timeStamp - this.lastTime < 500, i = !this.lastTap || this.lastTap.dist(o) < 30; if (t && i || this.reset(), this.count++, this.lastTime = e.timeStamp, this.lastTap = o, this.count === this.numTaps) return this.reset(), o } } } class vr { constructor() { this._zoomIn = new gr({ numTouches: 1, numTaps: 2 }), this._zoomOut = new gr({ numTouches: 2, numTaps: 1 }), this.reset(); } reset() { this._active = !1, this._zoomIn.reset(), this._zoomOut.reset(); } touchstart(e, t, i) { this._zoomIn.touchstart(e, t, i), this._zoomOut.touchstart(e, t, i); } touchmove(e, t, i) { this._zoomIn.touchmove(e, t, i), this._zoomOut.touchmove(e, t, i); } touchend(e, t, i) { const o = this._zoomIn.touchend(e, t, i), r = this._zoomOut.touchend(e, t, i); return o ? (this._active = !0, e.preventDefault(), setTimeout((() => this.reset()), 0), { cameraAnimation: t => t.easeTo({ duration: 300, zoom: t.getZoom() + 1, around: t.unproject(o) }, { originalEvent: e }) }) : r ? (this._active = !0, e.preventDefault(), setTimeout((() => this.reset()), 0), { cameraAnimation: t => t.easeTo({ duration: 300, zoom: t.getZoom() - 1, around: t.unproject(r) }, { originalEvent: e }) }) : void 0 } touchcancel() { this.reset(); } enable() { this._enabled = !0; } disable() { this._enabled = !1, this.reset(); } isEnabled() { return this._enabled } isActive() { return this._active } } const xr = { 0: 1, 2: 2 }; class yr { constructor(e) { this.reset(), this._clickTolerance = e.clickTolerance || 1; } blur() { this.reset(); } reset() { this._active = !1, this._moved = !1, this._lastPoint = void 0, this._eventButton = void 0; } _correctButton(e, t) { return !1 } _move(e, t) { return {} } mousedown(e, t) { if (this._lastPoint) return; const i = f(e); this._correctButton(e, i) && (this._lastPoint = t, this._eventButton = i); } mousemoveWindow(e, t) { const i = this._lastPoint; if (i) if (e.preventDefault(), null != this._eventButton && function(e, t) { const i = xr[t]; return void 0 === e.buttons || (e.buttons & i) !== i }(e, this._eventButton)) this.reset(); else if (this._moved || !(t.dist(i) < this._clickTolerance)) return this._moved = !0, this._lastPoint = t, this._move(i, t) } mouseupWindow(e) { this._lastPoint && f(e) === this._eventButton && (this._moved && d(), this.reset()); } enable() { this._enabled = !0; } disable() { this._enabled = !1, this.reset(); } isEnabled() { return this._enabled } isActive() { return this._active } } class br extends yr { mousedown(e, t) { super.mousedown(e, t), this._lastPoint && (this._active = !0); } _correctButton(e, t) { return 0 === t && !e.ctrlKey } _move(e, t) { return { around: t, panDelta: t.sub(e) } } } class wr extends yr { _correctButton(e, t) { return 0 === t && e.ctrlKey || 2 === t } _move(e, t) { const i = .8 * (t.x - e.x); if (i) return this._active = !0, { bearingDelta: i } } contextmenu(e) { e.preventDefault(); } } class Tr extends yr { _correctButton(e, t) { return 0 === t && e.ctrlKey || 2 === t } _move(e, t) { const i = -.5 * (t.y - e.y); if (i) return this._active = !0, { pitchDelta: i } } contextmenu(e) { e.preventDefault(); } } class Er { constructor(t, i) { this._map = t, this._el = t.getCanvasContainer(), this._minTouches = 1, this._clickTolerance = i.clickTolerance || 1, this.reset(), e.bindAll(["_addTouchPanBlocker", "_showTouchPanBlockerAlert"], this); } reset() { this._active = !1, this._touches = {}, this._sum = new e.pointGeometry(0, 0); } touchstart(e, t, i) { return this._calculateTransform(e, t, i) } touchmove(t, i, o) { if (this._active && !(o.length < this._minTouches)) { if (this._map._cooperativeGestures && !this._map.isMoving()) { if (1 === o.length && !e.isFullscreen()) return void this._showTouchPanBlockerAlert(); "hidden" !== this._alertContainer.style.visibility && (this._alertContainer.style.visibility = "hidden", clearTimeout(this._alertTimer)); } return t.cancelable && t.preventDefault(), this._calculateTransform(t, i, o) } } touchend(e, t, i) { this._calculateTransform(e, t, i), this._active && i.length < this._minTouches && this.reset(); } touchcancel() { this.reset(); } _calculateTransform(t, i, o) { o.length > 0 && (this._active = !0); const r = mr(o, i), n = new e.pointGeometry(0, 0), s = new e.pointGeometry(0, 0); let a = 0; for (const e in r) { const t = r[e], i = this._touches[e]; i && (n._add(t), s._add(t.sub(i)), a++, r[e] = t); } if (this._touches = r, a < this._minTouches || !s.mag()) return; const l = s.div(a); return this._sum._add(l), this._sum.mag() < this._clickTolerance ? void 0 : { around: n.div(a), panDelta: l } } enable() { this._enabled = !0, this._map._cooperativeGestures && (this._addTouchPanBlocker(), this._el.classList.add("mapboxgl-touch-pan-blocker-override", "mapboxgl-scrollable-page")); } disable() { this._enabled = !1, this._map._cooperativeGestures && (clearTimeout(this._alertTimer), this._alertContainer.remove(), this._el.classList.remove("mapboxgl-touch-pan-blocker-override", "mapboxgl-scrollable-page")), this.reset(); } isEnabled() { return !!this._enabled } isActive() { return !!this._active } _addTouchPanBlocker() { this._map && !this._alertContainer && (this._alertContainer = n("div", "mapboxgl-touch-pan-blocker", this._map._container), this._alertContainer.textContent = this._map._getUIString("TouchPanBlocker.Message"), this._alertContainer.style.fontSize = `${Math.max(10,Math.min(24,Math.floor(.05*this._el.clientWidth)))}px`); } _showTouchPanBlockerAlert() { this._alertContainer.style.visibility = "visible", this._alertContainer.classList.add("mapboxgl-touch-pan-blocker-show"), this._alertContainer.setAttribute("role", "alert"), clearTimeout(this._alertTimer), this._alertTimer = setTimeout((() => { this._alertContainer.classList.remove("mapboxgl-touch-pan-blocker-show"), this._alertContainer.setAttribute("role", "null"); }), 500); } } class Cr { constructor() { this.reset(); } reset() { this._active = !1, this._firstTwoTouches = void 0; } _start(e) {} _move(e, t, i) { return {} } touchstart(e, t, i) { this._firstTwoTouches || i.length < 2 || (this._firstTwoTouches = [i[0].identifier, i[1].identifier], this._start([t[0], t[1]])); } touchmove(e, t, i) { const o = this._firstTwoTouches; if (!o) return; e.preventDefault(); const [r, n] = o, s = Mr(i, t, r), a = Mr(i, t, n); if (!s || !a) return; const l = this._aroundCenter ? null : s.add(a).div(2); return this._move([s, a], l, e) } touchend(e, t, i) { if (!this._firstTwoTouches) return; const [o, r] = this._firstTwoTouches, n = Mr(i, t, o), s = Mr(i, t, r); n && s || (this._active && d(), this.reset()); } touchcancel() { this.reset(); } enable(e) { this._enabled = !0, this._aroundCenter = !!e && "center" === e.around; } disable() { this._enabled = !1, this.reset(); } isEnabled() { return this._enabled } isActive() { return this._active } } function Mr(e, t, i) { for (let o = 0; o < e.length; o++) if (e[o].identifier === i) return t[o] } function Ir(e, t) { return Math.log(e / t) / Math.LN2 } class Sr extends Cr { reset() { super.reset(), this._distance = 0, this._startDistance = 0; } _start(e) { this._startDistance = this._distance = e[0].dist(e[1]); } _move(e, t) { const i = this._distance; if (this._distance = e[0].dist(e[1]), this._active || !(Math.abs(Ir(this._distance, this._startDistance)) < .1)) return this._active = !0, { zoomDelta: Ir(this._distance, i), pinchAround: t } } } function Dr(e, t) { return 180 * e.angleWith(t) / Math.PI } class Lr extends Cr { reset() { super.reset(), this._minDiameter = 0, this._startVector = void 0, this._vector = void 0; } _start(e) { this._startVector = this._vector = e[0].sub(e[1]), this._minDiameter = e[0].dist(e[1]); } _move(e, t) { const i = this._vector; if (this._vector = e[0].sub(e[1]), i && (this._active || !this._isBelowThreshold(this._vector))) return this._active = !0, { bearingDelta: Dr(this._vector, i), pinchAround: t } } _isBelowThreshold(e) { this._minDiameter = Math.min(this._minDiameter, e.mag()); const t = 25 / (Math.PI * this._minDiameter) * 360, i = this._startVector; if (!i) return !1; const o = Dr(e, i); return Math.abs(o) < t } } function Ar(e) { return Math.abs(e.y) > Math.abs(e.x) } class zr extends Cr { constructor(e) { super(), this._map = e; } reset() { super.reset(), this._valid = void 0, this._firstMove = void 0, this._lastPoints = void 0; } _start(e) { this._lastPoints = e, Ar(e[0].sub(e[1])) && (this._valid = !1); } _move(t, i, o) { const r = this._lastPoints; if (!r) return; const n = t[0].sub(r[0]), s = t[1].sub(r[1]); return this._map._cooperativeGestures && !e.isFullscreen() && o.touches.length < 3 || (this._valid = this.gestureBeginsVertically(n, s, o.timeStamp), !this._valid) ? void 0 : (this._lastPoints = t, this._active = !0, { pitchDelta: (n.y + s.y) / 2 * -.5 }) } gestureBeginsVertically(e, t, i) { if (void 0 !== this._valid) return this._valid; const o = e.mag() >= 2, r = t.mag() >= 2; if (!o && !r) return; if (!o || !r) return null == this._firstMove && (this._firstMove = i), i - this._firstMove < 100 && void 0; const n = e.y > 0 == t.y > 0; return Ar(e) && Ar(t) && n } } const Pr = { panStep: 100, bearingStep: 15, pitchStep: 10 }; class Rr { constructor() { const e = Pr; this._panStep = e.panStep, this._bearingStep = e.bearingStep, this._pitchStep = e.pitchStep, this._rotationDisabled = !1; } blur() { this.reset(); } reset() { this._active = !1; } keydown(e) { if (e.altKey || e.ctrlKey || e.metaKey) return; let t = 0, i = 0, o = 0, r = 0, n = 0; switch (e.keyCode) { case 61: case 107: case 171: case 187: t = 1; break; case 189: case 109: case 173: t = -1; break; case 37: e.shiftKey ? i = -1 : (e.preventDefault(), r = -1); break; case 39: e.shiftKey ? i = 1 : (e.preventDefault(), r = 1); break; case 38: e.shiftKey ? o = 1 : (e.preventDefault(), n = -1); break; case 40: e.shiftKey ? o = -1 : (e.preventDefault(), n = 1); break; default: return } return this._rotationDisabled && (i = 0, o = 0), { cameraAnimation: s => { const a = s.getZoom(); s.easeTo({ duration: 300, easeId: "keyboardHandler", easing: Or, zoom: t ? Math.round(a) + t * (e.shiftKey ? 2 : 1) : a, bearing: s.getBearing() + i * this._bearingStep, pitch: s.getPitch() + o * this._pitchStep, offset: [-r * this._panStep, -n * this._panStep], center: s.getCenter() }, { originalEvent: e }); } } } enable() { this._enabled = !0; } disable() { this._enabled = !1, this.reset(); } isEnabled() { return this._enabled } isActive() { return this._active } disableRotation() { this._rotationDisabled = !0; } enableRotation() { this._rotationDisabled = !1; } } function Or(e) { return e * (2 - e) } const Br = 4.000244140625; class kr { constructor(t, i) { this._map = t, this._el = t.getCanvasContainer(), this._handler = i, this._delta = 0, this._defaultZoomRate = .01, this._wheelZoomRate = .0022222222222222222, e.bindAll(["_onTimeout", "_addScrollZoomBlocker", "_showBlockerAlert"], this); } setZoomRate(e) { this._defaultZoomRate = e; } setWheelZoomRate(e) { this._wheelZoomRate = e; } isEnabled() { return !!this._enabled } isActive() { return this._active || void 0 !== this._finishTimeout } isZooming() { return !!this._zooming } enable(e) { this.isEnabled() || (this._enabled = !0, this._aroundCenter = !!e && "center" === e.around, this._map._cooperativeGestures && this._addScrollZoomBlocker()); } disable() { this.isEnabled() && (this._enabled = !1, this._map._cooperativeGestures && (clearTimeout(this._alertTimer), this._alertContainer.remove())); } wheel(t) { if (!this.isEnabled()) return; if (this._map._cooperativeGestures) { if (!(t.ctrlKey || t.metaKey || this.isZooming() || e.isFullscreen())) return void this._showBlockerAlert(); "hidden" !== this._alertContainer.style.visibility && (this._alertContainer.style.visibility = "hidden", clearTimeout(this._alertTimer)); } let i = t.deltaMode === e.window.WheelEvent.DOM_DELTA_LINE ? 40 * t.deltaY : t.deltaY; const o = e.exported.now(), r = o - (this._lastWheelEventTime || 0); this._lastWheelEventTime = o, 0 !== i && i % Br == 0 ? this._type = "wheel" : 0 !== i && Math.abs(i) < 4 ? this._type = "trackpad" : r > 400 ? (this._type = null, this._lastValue = i, this._timeout = setTimeout(this._onTimeout, 40, t)) : this._type || (this._type = Math.abs(r * i) < 200 ? "trackpad" : "wheel", this._timeout && (clearTimeout(this._timeout), this._timeout = null, i += this._lastValue)), t.shiftKey && i && (i /= 4), this._type && (this._lastWheelEvent = t, this._delta -= i, this._active || this._start(t)), t.preventDefault(); } _onTimeout(e) { this._type = "wheel", this._delta -= this._lastValue, this._active || this._start(e); } _start(e) { if (!this._delta) return; this._frameId && (this._frameId = null), this._active = !0, this.isZooming() || (this._zooming = !0), this._finishTimeout && (clearTimeout(this._finishTimeout), delete this._finishTimeout); const t = p(this._el, e); this._aroundPoint = this._aroundCenter ? this._map.transform.centerPoint : t, this._aroundCoord = this._map.transform.pointCoordinate3D(this._aroundPoint), this._targetZoom = void 0, this._frameId || (this._frameId = !0, this._handler._triggerRenderFrame()); } renderFrame() { if (!this._frameId) return; if (this._frameId = null, !this.isActive()) return; const t = this._map.transform; "wheel" === this._type && t.projection.wrap && (t._center.lng >= 180 || t._center.lng <= -180) && (this._prevEase = null, this._easing = null, this._lastWheelEvent = null, this._lastWheelEventTime = 0); const i = () => t._terrainEnabled() && this._aroundCoord ? t.computeZoomRelativeTo(this._aroundCoord) : t.zoom; if (0 !== this._delta) { const e = "wheel" === this._type && Math.abs(this._delta) > Br ? this._wheelZoomRate : this._defaultZoomRate; let o = 2 / (1 + Math.exp(-Math.abs(this._delta * e))); this._delta < 0 && 0 !== o && (o = 1 / o); const r = i(), n = Math.pow(2, r), s = "number" == typeof this._targetZoom ? t.zoomScale(this._targetZoom) : n; this._targetZoom = Math.min(t.maxZoom, Math.max(t.minZoom, t.scaleZoom(s * o))), "wheel" === this._type && (this._startZoom = r, this._easing = this._smoothOutEasing(200)), this._delta = 0; } const o = "number" == typeof this._targetZoom ? this._targetZoom : i(), r = this._startZoom, n = this._easing; let s, a = !1; if ("wheel" === this._type && r && n) { const t = Math.min((e.exported.now() - this._lastWheelEventTime) / 200, 1), i = n(t); s = e.number(r, o, i), t < 1 ? this._frameId || (this._frameId = !0) : a = !0; } else s = o, a = !0; return this._active = !0, a && (this._active = !1, this._finishTimeout = setTimeout((() => { this._zooming = !1, this._handler._triggerRenderFrame(), delete this._targetZoom, delete this._finishTimeout; }), 200)), { noInertia: !0, needsRenderFrame: !a, zoomDelta: s - i(), around: this._aroundPoint, aroundCoord: this._aroundCoord, originalEvent: this._lastWheelEvent } } _smoothOutEasing(t) { let i = e.ease; if (this._prevEase) { const t = this._prevEase, o = (e.exported.now() - t.start) / t.duration, r = t.easing(o + .01) - t.easing(o), n = .27 / Math.sqrt(r * r + 1e-4) * .01, s = Math.sqrt(.0729 - n * n); i = e.bezier(n, s, .25, 1); } return this._prevEase = { start: e.exported.now(), duration: t, easing: i }, i } blur() { this.reset(); } reset() { this._active = !1; } _addScrollZoomBlocker() { this._map && !this._alertContainer && (this._alertContainer = n("div", "mapboxgl-scroll-zoom-blocker", this._map._container), this._alertContainer.textContent = /(Mac|iPad)/i.test(e.window.navigator.userAgent) ? this._map._getUIString("ScrollZoomBlocker.CmdMessage") : this._map._getUIString("ScrollZoomBlocker.CtrlMessage"), this._alertContainer.style.fontSize = `${Math.max(10,Math.min(24,Math.floor(.05*this._el.clientWidth)))}px`); } _showBlockerAlert() { this._alertContainer.style.visibility = "visible", this._alertContainer.classList.add("mapboxgl-scroll-zoom-blocker-show"), this._alertContainer.setAttribute("role", "alert"), clearTimeout(this._alertTimer), this._alertTimer = setTimeout((() => { this._alertContainer.classList.remove("mapboxgl-scroll-zoom-blocker-show"), this._alertContainer.setAttribute("role", "null"); }), 200); } } class Fr { constructor(e, t) { this._clickZoom = e, this._tapZoom = t; } enable() { this._clickZoom.enable(), this._tapZoom.enable(); } disable() { this._clickZoom.disable(), this._tapZoom.disable(); } isEnabled() { return this._clickZoom.isEnabled() && this._tapZoom.isEnabled() } isActive() { return this._clickZoom.isActive() || this._tapZoom.isActive() } } class Ur { constructor() { this.reset(); } reset() { this._active = !1; } blur() { this.reset(); } dblclick(e, t) { return e.preventDefault(), { cameraAnimation: i => { i.easeTo({ duration: 300, zoom: i.getZoom() + (e.shiftKey ? -1 : 1), around: i.unproject(t) }, { originalEvent: e }); } } } enable() { this._enabled = !0; } disable() { this._enabled = !1, this.reset(); } isEnabled() { return this._enabled } isActive() { return this._active } } class Nr { constructor() { this._tap = new gr({ numTouches: 1, numTaps: 1 }), this.reset(); } reset() { this._active = !1, this._swipePoint = void 0, this._swipeTouch = 0, this._tapTime = 0, this._tap.reset(); } touchstart(e, t, i) { this._swipePoint || (this._tapTime && e.timeStamp - this._tapTime > 500 && this.reset(), this._tapTime ? i.length > 0 && (this._swipePoint = t[0], this._swipeTouch = i[0].identifier) : this._tap.touchstart(e, t, i)); } touchmove(e, t, i) { if (this._tapTime) { if (this._swipePoint) { if (i[0].identifier !== this._swipeTouch) return; const o = t[0], r = o.y - this._swipePoint.y; return this._swipePoint = o, e.preventDefault(), this._active = !0, { zoomDelta: r / 128 } } } else this._tap.touchmove(e, t, i); } touchend(e, t, i) { this._tapTime ? this._swipePoint && 0 === i.length && this.reset() : this._tap.touchend(e, t, i) && (this._tapTime = e.timeStamp); } touchcancel() { this.reset(); } enable() { this._enabled = !0; } disable() { this._enabled = !1, this.reset(); } isEnabled() { return this._enabled } isActive() { return this._active } } class Gr { constructor(e, t, i) { this._el = e, this._mousePan = t, this._touchPan = i; } enable(e) { this._inertiaOptions = e || {}, this._mousePan.enable(), this._touchPan.enable(), this._el.classList.add("mapboxgl-touch-drag-pan"); } disable() { this._mousePan.disable(), this._touchPan.disable(), this._el.classList.remove("mapboxgl-touch-drag-pan"); } isEnabled() { return this._mousePan.isEnabled() && this._touchPan.isEnabled() } isActive() { return this._mousePan.isActive() || this._touchPan.isActive() } } class jr { constructor(e, t, i) { this._pitchWithRotate = e.pitchWithRotate, this._mouseRotate = t, this._mousePitch = i; } enable() { this._mouseRotate.enable(), this._pitchWithRotate && this._mousePitch.enable(); } disable() { this._mouseRotate.disable(), this._mousePitch.disable(); } isEnabled() { return this._mouseRotate.isEnabled() && (!this._pitchWithRotate || this._mousePitch.isEnabled()) } isActive() { return this._mouseRotate.isActive() || this._mousePitch.isActive() } } class Zr { constructor(e, t, i, o) { this._el = e, this._touchZoom = t, this._touchRotate = i, this._tapDragZoom = o, this._rotationDisabled = !1, this._enabled = !0; } enable(e) { this._touchZoom.enable(e), this._rotationDisabled || this._touchRotate.enable(e), this._tapDragZoom.enable(), this._el.classList.add("mapboxgl-touch-zoom-rotate"); } disable() { this._touchZoom.disable(), this._touchRotate.disable(), this._tapDragZoom.disable(), this._el.classList.remove("mapboxgl-touch-zoom-rotate"); } isEnabled() { return this._touchZoom.isEnabled() && (this._rotationDisabled || this._touchRotate.isEnabled()) && this._tapDragZoom.isEnabled() } isActive() { return this._touchZoom.isActive() || this._touchRotate.isActive() || this._tapDragZoom.isActive() } disableRotation() { this._rotationDisabled = !0, this._touchRotate.disable(); } enableRotation() { this._rotationDisabled = !1, this._touchZoom.isEnabled() && this._touchRotate.enable(); } } const Vr = e => e.zoom || e.drag || e.pitch || e.rotate; class Wr extends e.Event {} class Xr { constructor() { this.constants = [1, 1, .01], this.radius = 0; } setup(t, i) { const o = e.sub([], i, t); this.radius = e.length(o[2] < 0 ? e.div([], o, this.constants) : [o[0], o[1], 0]); } projectRay(t) { e.div(t, t, this.constants), e.normalize(t, t), e.mul$1(t, t, this.constants); const i = e.scale$2([], t, this.radius); if (i[2] > 0) { const t = e.scale$2([], [0, 0, 1], e.dot(i, [0, 0, 1])), o = e.scale$2([], e.normalize([], [i[0], i[1], 0]), this.radius), r = e.add([], i, e.scale$2([], e.sub([], e.add([], o, t), i), 2)); i[0] = r[0], i[1] = r[1]; } return i } } function qr(e) { return e.panDelta && e.panDelta.mag() || e.zoomDelta || e.bearingDelta || e.pitchDelta } class $r { constructor(t, i) { this._map = t, this._el = this._map.getCanvasContainer(), this._handlers = [], this._handlersById = {}, this._changes = [], this._inertia = new sr(t), this._bearingSnap = i.bearingSnap, this._previousActiveHandlers = {}, this._trackingEllipsoid = new Xr, this._dragOrigin = null, this._eventsInProgress = {}, this._addDefaultHandlers(i), e.bindAll(["handleEvent", "handleWindowEvent"], this); const o = this._el; this._listeners = [ [o, "touchstart", { passive: !0 }], [o, "touchmove", { passive: !1 }], [o, "touchend", void 0], [o, "touchcancel", void 0], [o, "mousedown", void 0], [o, "mousemove", void 0], [o, "mouseup", void 0], [e.window.document, "mousemove", { capture: !0 }], [e.window.document, "mouseup", void 0], [o, "mouseover", void 0], [o, "mouseout", void 0], [o, "dblclick", void 0], [o, "click", void 0], [o, "keydown", { capture: !1 }], [o, "keyup", void 0], [o, "wheel", { passive: !1 }], [o, "contextmenu", void 0], [e.window, "blur", void 0] ]; for (const [t, i, o] of this._listeners) t.addEventListener(i, t === e.window.document ? this.handleWindowEvent : this.handleEvent, o); } destroy() { for (const [t, i, o] of this._listeners) t.removeEventListener(i, t === e.window.document ? this.handleWindowEvent : this.handleEvent, o); } _addDefaultHandlers(e) { const t = this._map, i = t.getCanvasContainer(); this._add("mapEvent", new _r(t, e)); const o = t.boxZoom = new pr(t, e); this._add("boxZoom", o); const r = new vr, n = new Ur; t.doubleClickZoom = new Fr(n, r), this._add("tapZoom", r), this._add("clickZoom", n); const s = new Nr; this._add("tapDragZoom", s); const a = t.touchPitch = new zr(t); this._add("touchPitch", a); const l = new wr(e), c = new Tr(e); t.dragRotate = new jr(e, l, c), this._add("mouseRotate", l, ["mousePitch"]), this._add("mousePitch", c, ["mouseRotate"]); const h = new br(e), u = new Er(t, e); t.dragPan = new Gr(i, h, u), this._add("mousePan", h), this._add("touchPan", u, ["touchZoom", "touchRotate"]); const _ = new Lr, d = new Sr; t.touchZoomRotate = new Zr(i, d, _, s), this._add("touchRotate", _, ["touchPan", "touchZoom"]), this._add("touchZoom", d, ["touchPan", "touchRotate"]), this._add("blockableMapEvent", new dr(t)); const p = t.scrollZoom = new kr(t, this); this._add("scrollZoom", p, ["mousePan"]); const m = t.keyboard = new Rr; this._add("keyboard", m); for (const i of ["boxZoom", "doubleClickZoom", "tapDragZoom", "touchPitch", "dragRotate", "dragPan", "touchZoomRotate", "scrollZoom", "keyboard"]) e.interactive && e[i] && t[i].enable(e[i]); } _add(e, t, i) { this._handlers.push({ handlerName: e, handler: t, allowed: i }), this._handlersById[e] = t; } stop(e) { if (!this._updatingCamera) { for (const { handler: e } of this._handlers) e.reset(); this._inertia.clear(), this._fireEvents({}, {}, e), this._changes = []; } } isActive() { for (const { handler: e } of this._handlers) if (e.isActive()) return !0; return !1 } isZooming() { return !!this._eventsInProgress.zoom || this._map.scrollZoom.isZooming() } isRotating() { return !!this._eventsInProgress.rotate } isMoving() { return !!Vr(this._eventsInProgress) || this.isZooming() } _isDragging() { return !!this._eventsInProgress.drag } _blockedByActive(e, t, i) { for (const o in e) if (o !== i && (!t || t.indexOf(o) < 0)) return !0; return !1 } handleWindowEvent(e) { this.handleEvent(e, `${e.type}Window`); } _getMapTouches(e) { const t = []; for (const i of e) this._el.contains(i.target) && t.push(i); return t } handleEvent(e, t) { this._updatingCamera = !0; const i = "renderFrame" === e.type, o = i ? void 0 : e, r = { needsRenderFrame: !1 }, n = {}, s = {}, a = e.touches ? this._getMapTouches(e.touches) : void 0, l = a ? m(this._el, a) : i ? void 0 : p(this._el, e); for (const { handlerName: i, handler: c, allowed: h } of this._handlers) { if (!c.isEnabled()) continue; let u; this._blockedByActive(s, h, i) ? c.reset() : c[t || e.type] && (u = c[t || e.type](e, l, a), this.mergeHandlerResult(r, n, u, i, o), u && u.needsRenderFrame && this._triggerRenderFrame()), (u || c.isActive()) && (s[i] = c); } const c = {}; for (const e in this._previousActiveHandlers) s[e] || (c[e] = o); this._previousActiveHandlers = s, (Object.keys(c).length || qr(r)) && (this._changes.push([r, n, c]), this._triggerRenderFrame()), (Object.keys(s).length || qr(r)) && this._map._stop(!0), this._updatingCamera = !1; const { cameraAnimation: h } = r; h && (this._inertia.clear(), this._fireEvents({}, {}, !0), this._changes = [], h(this._map)); } mergeHandlerResult(t, i, o, r, n) { if (!o) return; e.extend(t, o); const s = { handlerName: r, originalEvent: o.originalEvent || n }; void 0 !== o.zoomDelta && (i.zoom = s), void 0 !== o.panDelta && (i.drag = s), void 0 !== o.pitchDelta && (i.pitch = s), void 0 !== o.bearingDelta && (i.rotate = s); } _applyChanges() { const t = {}, i = {}, o = {}; for (const [r, n, s] of this._changes) r.panDelta && (t.panDelta = (t.panDelta || new e.pointGeometry(0, 0))._add(r.panDelta)), r.zoomDelta && (t.zoomDelta = (t.zoomDelta || 0) + r.zoomDelta), r.bearingDelta && (t.bearingDelta = (t.bearingDelta || 0) + r.bearingDelta), r.pitchDelta && (t.pitchDelta = (t.pitchDelta || 0) + r.pitchDelta), void 0 !== r.around && (t.around = r.around), void 0 !== r.aroundCoord && (t.aroundCoord = r.aroundCoord), void 0 !== r.pinchAround && (t.pinchAround = r.pinchAround), r.noInertia && (t.noInertia = r.noInertia), e.extend(i, n), e.extend(o, s); this._updateMapTransform(t, i, o), this._changes = []; } _updateMapTransform(t, i, o) { const r = this._map, n = r.transform, s = e => [e.x, e.y, e.z]; if ((e => { const t = this._eventsInProgress.drag; return t && !this._handlersById[t.handlerName].isActive() })() && !qr(t)) { const e = n.zoom; n.cameraElevationReference = "sea", n.recenterOnTerrain(), n.cameraElevationReference = "ground", e !== n.zoom && this._map._update(!0); } if (n._isCameraConstrained && r._stop(!0), !qr(t)) return void this._fireEvents(i, o, !0); let { panDelta: a, zoomDelta: l, bearingDelta: c, pitchDelta: h, around: u, aroundCoord: _, pinchAround: d } = t; n._isCameraConstrained && (l > 0 && (l = 0), n._isCameraConstrained = !1), void 0 !== d && (u = d), (l || (e => i.drag && !this._eventsInProgress.drag)()) && u && (this._dragOrigin = s(n.pointCoordinate3D(u)), this._trackingEllipsoid.setup(n._camera.position, this._dragOrigin)), n.cameraElevationReference = "sea", r._stop(!0), u = u || r.transform.centerPoint, c && (n.bearing += c), h && (n.pitch += h), n._updateCameraState(); const p = [0, 0, 0]; if (a) if ("mercator" === n.projection.name) { const e = this._trackingEllipsoid.projectRay(n.screenPointToMercatorRay(u).dir), t = this._trackingEllipsoid.projectRay(n.screenPointToMercatorRay(u.sub(a)).dir); p[0] = t[0] - e[0], p[1] = t[1] - e[1]; } else { const t = n.pointCoordinate(u); if ("globe" === n.projection.name) { a = a.rotate(-n.angle); const i = n._pixelsPerMercatorPixel / n.worldSize; p[0] = -a.x * e.mercatorScale(e.latFromMercatorY(t.y)) * i, p[1] = -a.y * e.mercatorScale(n.center.lat) * i; } else { const e = n.pointCoordinate(u.sub(a)); t && e && (p[0] = e.x - t.x, p[1] = e.y - t.y); } } const m = n.zoom, f = [0, 0, 0]; if (l) { const t = s(_ || n.pointCoordinate3D(u)), i = { dir: e.normalize([], e.sub([], t, n._camera.position)) }; if (i.dir[2] < 0) { const o = n.zoomDeltaToMovement(t, l); e.scale$2(f, i.dir, o); } } const g = e.add(p, p, f); n._translateCameraConstrained(g), l && Math.abs(n.zoom - m) > 1e-4 && n.recenterOnTerrain(), n.cameraElevationReference = "ground", this._map._update(), t.noInertia || this._inertia.record(t), this._fireEvents(i, o, !0); } _fireEvents(t, i, o) { const r = Vr(this._eventsInProgress), n = Vr(t), s = {}; for (const e in t) { const { originalEvent: i } = t[e]; this._eventsInProgress[e] || (s[`${e}start`] = i), this._eventsInProgress[e] = t[e]; }!r && n && this._fireEvent("movestart", n.originalEvent); for (const e in s) this._fireEvent(e, s[e]); n && this._fireEvent("move", n.originalEvent); for (const e in t) { const { originalEvent: i } = t[e]; this._fireEvent(e, i); } const a = {}; let l; for (const e in this._eventsInProgress) { const { handlerName: t, originalEvent: o } = this._eventsInProgress[e]; this._handlersById[t].isActive() || (delete this._eventsInProgress[e], l = i[t] || o, a[`${e}end`] = l); } for (const e in a) this._fireEvent(e, a[e]); const c = Vr(this._eventsInProgress); if (o && (r || n) && !c) { this._updatingCamera = !0; const t = this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions), i = e => 0 !== e && -this._bearingSnap < e && e < this._bearingSnap; t ? (i(t.bearing || this._map.getBearing()) && (t.bearing = 0), this._map.easeTo(t, { originalEvent: l })) : (this._map.fire(new e.Event("moveend", { originalEvent: l })), i(this._map.getBearing()) && this._map.resetNorth()), this._updatingCamera = !1; } } _fireEvent(t, i) { this._map.fire(new e.Event(t, i ? { originalEvent: i } : {})); } _requestFrame() { return this._map.triggerRepaint(), this._map._renderTaskQueue.add((e => { this._frameId = void 0, this.handleEvent(new Wr("renderFrame", { timeStamp: e })), this._applyChanges(); })) } _triggerRenderFrame() { void 0 === this._frameId && (this._frameId = this._requestFrame()); } } const Hr = "map.setFreeCameraOptions(...) and map.getFreeCameraOptions() are not yet supported for non-mercator projections."; class Yr extends e.Evented { constructor(t, i) { super(), this._moving = !1, this._zooming = !1, this.transform = t, this._bearingSnap = i.bearingSnap, e.bindAll(["_renderFrameCallback"], this); } getCenter() { return new e.LngLat(this.transform.center.lng, this.transform.center.lat) } setCenter(e, t) { return this.jumpTo({ center: e }, t) } panBy(t, i, o) { return t = e.pointGeometry.convert(t).mult(-1), this.panTo(this.transform.center, e.extend({ offset: t }, i), o) } panTo(t, i, o) { return this.easeTo(e.extend({ center: t }, i), o) } getZoom() { return this.transform.zoom } setZoom(e, t) { return this.jumpTo({ zoom: e }, t), this } zoomTo(t, i, o) { return this.easeTo(e.extend({ zoom: t }, i), o) } zoomIn(e, t) { return this.zoomTo(this.getZoom() + 1, e, t), this } zoomOut(e, t) { return this.zoomTo(this.getZoom() - 1, e, t), this } getBearing() { return this.transform.bearing } setBearing(e, t) { return this.jumpTo({ bearing: e }, t), this } getPadding() { return this.transform.padding } setPadding(e, t) { return this.jumpTo({ padding: e }, t), this } rotateTo(t, i, o) { return this.easeTo(e.extend({ bearing: t }, i), o) } resetNorth(t, i) { return this.rotateTo(0, e.extend({ duration: 1e3 }, t), i), this } resetNorthPitch(t, i) { return this.easeTo(e.extend({ bearing: 0, pitch: 0, duration: 1e3 }, t), i), this } snapToNorth(e, t) { return Math.abs(this.getBearing()) < this._bearingSnap ? this.resetNorth(e, t) : this } getPitch() { return this.transform.pitch } setPitch(e, t) { return this.jumpTo({ pitch: e }, t), this } cameraForBounds(t, i) { t = e.LngLatBounds.convert(t); const o = i && i.bearing || 0, r = i && i.pitch || 0, n = t.getNorthWest(), s = t.getSouthEast(); return this._cameraForBounds(this.transform, n, s, o, r, i) } _extendCameraOptions(t) { const i = { top: 0, bottom: 0, right: 0, left: 0 }; if ("number" == typeof(t = e.extend({ padding: i, offset: [0, 0], maxZoom: this.transform.maxZoom }, t)).padding) { const e = t.padding; t.padding = { top: e, bottom: e, right: e, left: e }; } return t.padding = e.extend(i, t.padding), t } _minimumAABBFrustumDistance(e, t) { const i = t.max[0] - t.min[0], o = t.max[1] - t.min[1]; return i / o > e.aspect ? i / (2 * Math.tan(.5 * e.fovX) * e.aspect) : o / (2 * Math.tan(.5 * e.fovY) * e.aspect) } _cameraForBoundsOnGlobe(t, i, o, r, n, s) { const a = t.clone(), l = this._extendCameraOptions(s); a.bearing = r, a.pitch = n; const c = e.LngLat.convert(i), h = e.LngLat.convert(o), u = .5 * (c.lat + h.lat), _ = .5 * (c.lng + h.lng), d = e.latLngToECEF(u, _), p = e.normalize([], d), m = e.normalize([], e.cross([], p, [0, 1, 0])), f = e.cross([], m, p), g = [m[0], m[1], m[2], 0, f[0], f[1], f[2], 0, p[0], p[1], p[2], 0, 0, 0, 0, 1], v = [d, e.latLngToECEF(c.lat, c.lng), e.latLngToECEF(h.lat, c.lng), e.latLngToECEF(h.lat, h.lng), e.latLngToECEF(c.lat, h.lng), e.latLngToECEF(u, c.lng), e.latLngToECEF(u, h.lng), e.latLngToECEF(c.lat, _), e.latLngToECEF(h.lat, _)]; let x = e.Aabb.fromPoints(v.map((t => [e.dot(m, t), e.dot(f, t), e.dot(p, t)]))); const y = e.transformMat4([], x.center, g); 0 === e.squaredLength(y) && e.set(y, 0, 0, 1), e.normalize(y, y), e.scale$2(y, y, e.GLOBE_RADIUS), a.center = e.ecefToLatLng(y); const b = a.getWorldToCameraMatrix(), w = e.invert(new Float64Array(16), b); x = e.Aabb.applyTransform(x, e.multiply([], b, g)), e.transformMat4(y, y, b); const T = .5 * (x.max[2] - x.min[2]), E = this._minimumAABBFrustumDistance(a, x), C = e.scale$2([], [0, 0, 1], T), M = e.add(C, y, C), I = E + (0 === a.pitch ? 0 : e.distance(y, M)), S = a.globeCenterInViewSpace, D = e.sub([], y, [S[0], S[1], S[2]]); e.normalize(D, D), e.scale$2(D, D, I); const L = e.add([], y, D); e.transformMat4(L, L, w); const A = e.earthRadius / e.GLOBE_RADIUS, z = e.length(L), P = e.mercatorZfromAltitude(Math.max(z * A - e.earthRadius, Number.EPSILON), 0), R = Math.min(a.zoomFromMercatorZAdjusted(P), l.maxZoom); return R > .5 * (e.GLOBE_ZOOM_THRESHOLD_MIN + e.GLOBE_ZOOM_THRESHOLD_MAX) ? (a.setProjection({ name: "mercator" }), a.zoom = R, this._cameraForBounds(a, i, o, r, n, s)) : { center: a.center, zoom: R, bearing: r, pitch: n } } queryTerrainElevation(t, i) { const o = this.transform.elevation; return o ? (i = e.extend({}, { exaggerated: !0 }, i), o.getAtPoint(e.MercatorCoordinate.fromLngLat(t), null, i.exaggerated)) : null } _cameraForBounds(t, i, o, r, n, s) { if ("globe" === t.projection.name) return this._cameraForBoundsOnGlobe(t, i, o, r, n, s); const a = t.clone(), l = this._extendCameraOptions(s), c = a.padding; a.bearing = r, a.pitch = n; const h = e.LngLat.convert(i), u = e.LngLat.convert(o), _ = new e.LngLat(h.lng, u.lat), d = new e.LngLat(u.lng, h.lat), p = a.project(h), m = a.project(u), f = this.queryTerrainElevation(h), g = this.queryTerrainElevation(u), v = this.queryTerrainElevation(_), x = this.queryTerrainElevation(d), y = [ [p.x, p.y, Math.min(f || 0, g || 0, v || 0, x || 0)], [m.x, m.y, Math.max(f || 0, g || 0, v || 0, x || 0)] ]; let b = e.Aabb.fromPoints(y); const w = a.getWorldToCameraMatrix(), T = e.invert(new Float64Array(16), w); b = e.Aabb.applyTransform(b, w); const E = e.sub([], b.max, b.min), C = c.left || 0, M = c.right || 0, I = c.bottom || 0, S = c.top || 0, { left: D, right: L, top: A, bottom: z } = l.padding, P = .5 * (C + M), R = .5 * (S + I), O = Math.min(a.scaleZoom(a.scale * Math.min((a.width - (C + M + D + L)) / E[0], (a.height - (I + S + z + A)) / E[1])), l.maxZoom), B = a.scale / a.zoomScale(O); b = new e.Aabb([b.min[0] - (D + P) * B, b.min[1] - (z + R) * B, b.min[2]], [b.max[0] + (L + P) * B, b.max[1] + (A + R) * B, b.max[2]]); const k = .5 * E[2], F = this._minimumAABBFrustumDistance(a, b), U = [0, 0, 1, 0]; e.transformMat4$1(U, U, w), e.normalize$2(U, U); const N = e.scale$2([], U, F + k), G = e.add([], b.center, N), j = ("number" == typeof l.offset.x && "number" == typeof l.offset.y ? new e.pointGeometry(l.offset.x, l.offset.y) : e.pointGeometry.convert(l.offset)).rotate(-e.degToRad(r)); b.center[0] -= j.x * B, b.center[1] += j.y * B, e.transformMat4(b.center, b.center, T), e.transformMat4(G, G, T); const Z = [b.center[0], b.center[1], G[2] * a.pixelsPerMeter]; e.scale$2(Z, Z, 1 / a.worldSize); const V = e.lngFromMercatorX(Z[0]), W = e.latFromMercatorY(Z[1]), X = Math.min(a._zoomFromMercatorZ(Z[2]), l.maxZoom), q = new e.LngLat(V, W); return a.mercatorFromTransition && X < .5 * (e.GLOBE_ZOOM_THRESHOLD_MIN + e.GLOBE_ZOOM_THRESHOLD_MAX) ? (a.setProjection({ name: "globe" }), a.zoom = X, this._cameraForBounds(a, i, o, r, n, s)) : { center: q, zoom: X, bearing: r, pitch: n } } fitBounds(e, t, i) { const o = this.cameraForBounds(e, t); return this._fitInternal(o, t, i) } fitScreenCoordinates(t, i, o, r, n) { const s = e.pointGeometry.convert(t), a = e.pointGeometry.convert(i), l = new e.pointGeometry(Math.min(s.x, a.x), Math.min(s.y, a.y)), c = new e.pointGeometry(Math.max(s.x, a.x), Math.max(s.y, a.y)); if ("mercator" === this.transform.projection.name && this.transform.anyCornerOffEdge(s, a)) return this; const h = this.transform.pointLocation3D(l), u = this.transform.pointLocation3D(c), _ = this.transform.pointLocation3D(new e.pointGeometry(l.x, c.y)), d = this.transform.pointLocation3D(new e.pointGeometry(c.x, l.y)), p = [Math.min(h.lng, u.lng, _.lng, d.lng), Math.min(h.lat, u.lat, _.lat, d.lat)], m = [Math.max(h.lng, u.lng, _.lng, d.lng), Math.max(h.lat, u.lat, _.lat, d.lat)], f = r && r.pitch ? r.pitch : this.getPitch(), g = this._cameraForBounds(this.transform, p, m, o, f, r); return this._fitInternal(g, r, n) } _fitInternal(t, i, o) { return t ? (delete(i = e.extend(t, i)).padding, i.linear ? this.easeTo(i, o) : this.flyTo(i, o)) : this } jumpTo(t, i) { this.stop(); const o = t.preloadOnly ? this.transform.clone() : this.transform; let r = !1, n = !1, s = !1; return "zoom" in t && o.zoom !== +t.zoom && (r = !0, o.zoom = +t.zoom), void 0 !== t.center && (o.center = e.LngLat.convert(t.center)), "bearing" in t && o.bearing !== +t.bearing && (n = !0, o.bearing = +t.bearing), "pitch" in t && o.pitch !== +t.pitch && (s = !0, o.pitch = +t.pitch), null == t.padding || o.isPaddingEqual(t.padding) || (o.padding = t.padding), t.preloadOnly ? (this._preloadTiles(o), this) : (this.fire(new e.Event("movestart", i)).fire(new e.Event("move", i)), r && this.fire(new e.Event("zoomstart", i)).fire(new e.Event("zoom", i)).fire(new e.Event("zoomend", i)), n && this.fire(new e.Event("rotatestart", i)).fire(new e.Event("rotate", i)).fire(new e.Event("rotateend", i)), s && this.fire(new e.Event("pitchstart", i)).fire(new e.Event("pitch", i)).fire(new e.Event("pitchend", i)), this.fire(new e.Event("moveend", i))) } getFreeCameraOptions() { return this.transform.projection.supportsFreeCamera || e.warnOnce(Hr), this.transform.getFreeCameraOptions() } setFreeCameraOptions(t, i) { const o = this.transform; if (!o.projection.supportsFreeCamera) return e.warnOnce(Hr), this; this.stop(); const r = o.zoom, n = o.pitch, s = o.bearing; o.setFreeCameraOptions(t); const a = r !== o.zoom, l = n !== o.pitch, c = s !== o.bearing; return this.fire(new e.Event("movestart", i)).fire(new e.Event("move", i)), a && this.fire(new e.Event("zoomstart", i)).fire(new e.Event("zoom", i)).fire(new e.Event("zoomend", i)), c && this.fire(new e.Event("rotatestart", i)).fire(new e.Event("rotate", i)).fire(new e.Event("rotateend", i)), l && this.fire(new e.Event("pitchstart", i)).fire(new e.Event("pitch", i)).fire(new e.Event("pitchend", i)), this.fire(new e.Event("moveend", i)), this } easeTo(t, i) { this._stop(!1, t.easeId), (!1 === (t = e.extend({ offset: [0, 0], duration: 500, easing: e.ease }, t)).animate || !t.essential && e.exported.prefersReducedMotion) && (t.duration = 0); const o = this.transform, r = this.getZoom(), n = this.getBearing(), s = this.getPitch(), a = this.getPadding(), l = "zoom" in t ? +t.zoom : r, c = "bearing" in t ? this._normalizeBearing(t.bearing, n) : n, h = "pitch" in t ? +t.pitch : s, u = "padding" in t ? t.padding : o.padding, _ = e.pointGeometry.convert(t.offset); let d, p, m; if ("globe" === o.projection.name) { const i = e.MercatorCoordinate.fromLngLat(o.center), r = _.rotate(-o.angle); i.x += r.x / o.worldSize, i.y += r.y / o.worldSize; const n = i.toLngLat(), s = e.LngLat.convert(t.center || n); this._normalizeCenter(s), d = o.centerPoint.add(r), p = new e.pointGeometry(i.x, i.y).mult(o.worldSize), m = new e.pointGeometry(e.mercatorXfromLng(s.lng), e.mercatorYfromLat(s.lat)).mult(o.worldSize).sub(p); } else { d = o.centerPoint.add(_); const i = o.pointLocation(d), r = e.LngLat.convert(t.center || i); this._normalizeCenter(r), p = o.project(i), m = o.project(r).sub(p); } const f = o.zoomScale(l - r); let g, v; t.around && (g = e.LngLat.convert(t.around), v = o.locationPoint(g)); const x = this._zooming || l !== r, y = this._rotating || n !== c, b = this._pitching || h !== s, w = !o.isPaddingEqual(u), T = o => T => { if (x && (o.zoom = e.number(r, l, T)), y && (o.bearing = e.number(n, c, T)), b && (o.pitch = e.number(s, h, T)), w && (o.interpolatePadding(a, u, T), d = o.centerPoint.add(_)), g) o.setLocationAtPoint(g, v); else { const e = o.zoomScale(o.zoom - r), t = l > r ? Math.min(2, f) : Math.max(.5, f), i = Math.pow(t, 1 - T), n = o.unproject(p.add(m.mult(T * i)).mult(e)); o.setLocationAtPoint(o.renderWorldCopies ? n.wrap() : n, d); } return t.preloadOnly || this._fireMoveEvents(i), o }; if (t.preloadOnly) { const e = this._emulate(T, t.duration, o); return this._preloadTiles(e), this } const E = { moving: this._moving, zooming: this._zooming, rotating: this._rotating, pitching: this._pitching }; return this._zooming = x, this._rotating = y, this._pitching = b, this._padding = w, this._easeId = t.easeId, this._prepareEase(i, t.noMoveStart, E), this._ease(T(o), (e => { o.recenterOnTerrain(), this._afterEase(i, e); }), t), this } _prepareEase(t, i, o = {}) { this._moving = !0, this.transform.cameraElevationReference = "sea", i || o.moving || this.fire(new e.Event("movestart", t)), this._zooming && !o.zooming && this.fire(new e.Event("zoomstart", t)), this._rotating && !o.rotating && this.fire(new e.Event("rotatestart", t)), this._pitching && !o.pitching && this.fire(new e.Event("pitchstart", t)); } _fireMoveEvents(t) { this.fire(new e.Event("move", t)), this._zooming && this.fire(new e.Event("zoom", t)), this._rotating && this.fire(new e.Event("rotate", t)), this._pitching && this.fire(new e.Event("pitch", t)); } _afterEase(t, i) { if (this._easeId && i && this._easeId === i) return; this._easeId = void 0, this.transform.cameraElevationReference = "ground"; const o = this._zooming, r = this._rotating, n = this._pitching; this._moving = !1, this._zooming = !1, this._rotating = !1, this._pitching = !1, this._padding = !1, o && this.fire(new e.Event("zoomend", t)), r && this.fire(new e.Event("rotateend", t)), n && this.fire(new e.Event("pitchend", t)), this.fire(new e.Event("moveend", t)); } flyTo(t, i) { if (!t.essential && e.exported.prefersReducedMotion) { const o = e.pick(t, ["center", "zoom", "bearing", "pitch", "around"]); return this.jumpTo(o, i) } this.stop(), t = e.extend({ offset: [0, 0], speed: 1.2, curve: 1.42, easing: e.ease }, t); const o = this.transform, r = this.getZoom(), n = this.getBearing(), s = this.getPitch(), a = this.getPadding(), l = "zoom" in t ? e.clamp(+t.zoom, o.minZoom, o.maxZoom) : r, c = "bearing" in t ? this._normalizeBearing(t.bearing, n) : n, h = "pitch" in t ? +t.pitch : s, u = "padding" in t ? t.padding : o.padding, _ = o.zoomScale(l - r), d = e.pointGeometry.convert(t.offset); let p = o.centerPoint.add(d); const m = o.pointLocation(p), f = e.LngLat.convert(t.center || m); this._normalizeCenter(f); const g = o.project(m), v = o.project(f).sub(g); let x = t.curve; const y = Math.max(o.width, o.height), b = y / _, w = v.mag(); if ("minZoom" in t) { const i = e.clamp(Math.min(t.minZoom, r, l), o.minZoom, o.maxZoom), n = y / o.zoomScale(i - r); x = Math.sqrt(n / w * 2); } const T = x * x; function E(e) { const t = (b * b - y * y + (e ? -1 : 1) * T * T * w * w) / (2 * (e ? b : y) * T * w); return Math.log(Math.sqrt(t * t + 1) - t) } function C(e) { return (Math.exp(e) - Math.exp(-e)) / 2 } function M(e) { return (Math.exp(e) + Math.exp(-e)) / 2 } const I = E(0); let S = function(e) { return M(I) / M(I + x * e) }, D = function(e) { return y * ((M(I) * (C(t = I + x * e) / M(t)) - C(I)) / T) / w; var t; }, L = (E(1) - I) / x; if (Math.abs(w) < 1e-6 || !isFinite(L)) { if (Math.abs(y - b) < 1e-6) return this.easeTo(t, i); const e = b < y ? -1 : 1; L = Math.abs(Math.log(b / y)) / x, D = function() { return 0 }, S = function(t) { return Math.exp(e * x * t) }; } t.duration = "duration" in t ? +t.duration : 1e3 * L / ("screenSpeed" in t ? +t.screenSpeed / x : +t.speed), t.maxDuration && t.duration > t.maxDuration && (t.duration = 0); const A = n !== c, z = h !== s, P = !o.isPaddingEqual(u), R = o => _ => { const m = _ * L, x = 1 / S(m); o.zoom = 1 === _ ? l : r + o.scaleZoom(x), A && (o.bearing = e.number(n, c, _)), z && (o.pitch = e.number(s, h, _)), P && (o.interpolatePadding(a, u, _), p = o.centerPoint.add(d)); const y = 1 === _ ? f : o.unproject(g.add(v.mult(D(m))).mult(x)); return o.setLocationAtPoint(o.renderWorldCopies ? y.wrap() : y, p), o._updateCameraOnTerrain(), t.preloadOnly || this._fireMoveEvents(i), o }; if (t.preloadOnly) { const e = this._emulate(R, t.duration, o); return this._preloadTiles(e), this } return this._zooming = !0, this._rotating = A, this._pitching = z, this._padding = P, this._prepareEase(i, !1), this._ease(R(o), (() => this._afterEase(i)), t), this } isEasing() { return !!this._easeFrameId } stop() { return this._stop() } _stop(e, t) { if (this._easeFrameId && (this._cancelRenderFrame(this._easeFrameId), this._easeFrameId = void 0, this._onEaseFrame = void 0), this._onEaseEnd) { const e = this._onEaseEnd; this._onEaseEnd = void 0, e.call(this, t); } if (!e) { const e = this.handlers; e && e.stop(!1); } return this } _ease(t, i, o) { !1 === o.animate || 0 === o.duration ? (t(1), i()) : (this._easeStart = e.exported.now(), this._easeOptions = o, this._onEaseFrame = t, this._onEaseEnd = i, this._easeFrameId = this._requestRenderFrame(this._renderFrameCallback)); } _renderFrameCallback() { const t = Math.min((e.exported.now() - this._easeStart) / this._easeOptions.duration, 1), i = this._onEaseFrame; i && i(this._easeOptions.easing(t)), t < 1 ? this._easeFrameId = this._requestRenderFrame(this._renderFrameCallback) : this.stop(); } _normalizeBearing(t, i) { t = e.wrap(t, -180, 180); const o = Math.abs(t - i); return Math.abs(t - 360 - i) < o && (t -= 360), Math.abs(t + 360 - i) < o && (t += 360), t } _normalizeCenter(e) { const t = this.transform; if (!t.renderWorldCopies || t.maxBounds) return; const i = e.lng - t.center.lng; e.lng += i > 180 ? -360 : i < -180 ? 360 : 0; } _emulate(e, t, i) { const o = Math.ceil(15 * t / 1e3), r = [], n = e(i.clone()); for (let e = 0; e <= o; e++) { const t = n(e / o); r.push(t.clone()); } return r } } class Kr { constructor(t = {}) { this.options = t, e.bindAll(["_toggleAttribution", "_updateEditLink", "_updateData", "_updateCompact"], this); } getDefaultPosition() { return "bottom-right" } onAdd(e) { const t = this.options && this.options.compact; return this._map = e, this._container = n("div", "mapboxgl-ctrl mapboxgl-ctrl-attrib"), this._compactButton = n("button", "mapboxgl-ctrl-attrib-button", this._container), n("span", "mapboxgl-ctrl-icon", this._compactButton).setAttribute("aria-hidden", "true"), this._compactButton.type = "button", this._compactButton.addEventListener("click", this._toggleAttribution), this._setElementTitle(this._compactButton, "ToggleAttribution"), this._innerContainer = n("div", "mapboxgl-ctrl-attrib-inner", this._container), this._innerContainer.setAttribute("role", "list"), t && this._container.classList.add("mapboxgl-compact"), this._updateAttributions(), this._updateEditLink(), this._map.on("styledata", this._updateData), this._map.on("sourcedata", this._updateData), this._map.on("moveend", this._updateEditLink), void 0 === t && (this._map.on("resize", this._updateCompact), this._updateCompact()), this._container } onRemove() { this._container.remove(), this._map.off("styledata", this._updateData), this._map.off("sourcedata", this._updateData), this._map.off("moveend", this._updateEditLink), this._map.off("resize", this._updateCompact), this._map = void 0, this._attribHTML = void 0; } _setElementTitle(e, t) { const i = this._map._getUIString(`AttributionControl.${t}`); e.setAttribute("aria-label", i), e.removeAttribute("title"), e.firstElementChild && e.firstElementChild.setAttribute("title", i); } _toggleAttribution() { this._container.classList.contains("mapboxgl-compact-show") ? (this._container.classList.remove("mapboxgl-compact-show"), this._compactButton.setAttribute("aria-expanded", "false")) : (this._container.classList.add("mapboxgl-compact-show"), this._compactButton.setAttribute("aria-expanded", "true")); } _updateEditLink() { let t = this._editLink; t || (t = this._editLink = this._container.querySelector(".mapbox-improve-map")); const i = [{ key: "owner", value: this.styleOwner }, { key: "id", value: this.styleId }, { key: "access_token", value: this._map._requestManager._customAccessToken || e.config.ACCESS_TOKEN }]; if (t) { const o = i.reduce(((e, t, o) => (t.value && (e += `${t.key}=${t.value}${o<i.length-1?"&":""}`), e)), "?"); t.href = `${e.config.FEEDBACK_URL}/${o}#${er(this._map,!0)}`, t.rel = "noopener nofollow", this._setElementTitle(t, "MapFeedback"); } } _updateData(e) { !e || "metadata" !== e.sourceDataType && "visibility" !== e.sourceDataType && "style" !== e.dataType || (this._updateAttributions(), this._updateEditLink()); } _updateAttributions() { if (!this._map.style) return; let e = []; if (this._map.style.stylesheet) { const e = this._map.style.stylesheet; this.styleOwner = e.owner, this.styleId = e.id; } const t = this._map.style._sourceCaches; for (const i in t) { const o = t[i]; if (o.used) { const t = o.getSource(); t.attribution && e.indexOf(t.attribution) < 0 && e.push(t.attribution); } } e.sort(((e, t) => e.length - t.length)), e = e.filter(((t, i) => { for (let o = i + 1; o < e.length; o++) if (e[o].indexOf(t) >= 0) return !1; return !0 })), this.options.customAttribution && (Array.isArray(this.options.customAttribution) ? e = [...this.options.customAttribution, ...e] : e.unshift(this.options.customAttribution)); const i = e.join(" | "); i !== this._attribHTML && (this._attribHTML = i, e.length ? (this._innerContainer.innerHTML = i, this._container.classList.remove("mapboxgl-attrib-empty")) : this._container.classList.add("mapboxgl-attrib-empty"), this._editLink = null); } _updateCompact() { this._map.getCanvasContainer().offsetWidth <= 640 ? this._container.classList.add("mapboxgl-compact") : this._container.classList.remove("mapboxgl-compact", "mapboxgl-compact-show"); } } class Jr { constructor() { e.bindAll(["_updateLogo", "_updateCompact"], this); } onAdd(e) { this._map = e, this._container = n("div", "mapboxgl-ctrl"); const t = n("a", "mapboxgl-ctrl-logo"); return t.target = "_blank", t.rel = "noopener nofollow", t.href = "https://www.mapbox.com/", t.setAttribute("aria-label", this._map._getUIString("LogoControl.Title")), t.setAttribute("rel", "noopener nofollow"), this._container.appendChild(t), this._container.style.display = "none", this._map.on("sourcedata", this._updateLogo), this._updateLogo(), this._map.on("resize", this._updateCompact), this._updateCompact(), this._container } onRemove() { this._container.remove(), this._map.off("sourcedata", this._updateLogo), this._map.off("resize", this._updateCompact); } getDefaultPosition() { return "bottom-left" } _updateLogo(e) { e && "metadata" !== e.sourceDataType || (this._container.style.display = this._logoRequired() ? "block" : "none"); } _logoRequired() { if (!this._map.style) return !0; const e = this._map.style._sourceCaches; if (0 === Object.entries(e).length) return !0; for (const t in e) { const i = e[t].getSource(); if (i.hasOwnProperty("mapbox_logo") && !i.mapbox_logo) return !1 } return !0 } _updateCompact() { const e = this._container.children; if (e.length) { const t = e[0]; this._map.getCanvasContainer().offsetWidth < 250 ? t.classList.add("mapboxgl-compact") : t.classList.remove("mapboxgl-compact"); } } } class Qr { constructor() { this._queue = [], this._id = 0, this._cleared = !1, this._currentlyRunning = !1; } add(e) { const t = ++this._id; return this._queue.push({ callback: e, id: t, cancelled: !1 }), t } remove(e) { const t = this._currentlyRunning, i = t ? this._queue.concat(t) : this._queue; for (const t of i) if (t.id === e) return void(t.cancelled = !0) } run(e = 0) { const t = this._currentlyRunning = this._queue; this._queue = []; for (const i of t) if (!i.cancelled && (i.callback(e), this._cleared)) break; this._cleared = !1, this._currentlyRunning = !1; } clear() { this._currentlyRunning && (this._cleared = !0), this._queue = []; } } function en(t, i, o) { if (t = new e.LngLat(t.lng, t.lat), i) { const r = new e.LngLat(t.lng - 360, t.lat), n = new e.LngLat(t.lng + 360, t.lat), s = 360 * Math.ceil(Math.abs(t.lng - o.center.lng) / 360), a = o.locationPoint(t).distSqr(i), l = i.x < 0 || i.y < 0 || i.x > o.width || i.y > o.height; o.locationPoint(r).distSqr(i) < a && (l || Math.abs(r.lng - o.center.lng) < s) ? t = r : o.locationPoint(n).distSqr(i) < a && (l || Math.abs(n.lng - o.center.lng) < s) && (t = n); } for (; Math.abs(t.lng - o.center.lng) > 180;) { const e = o.locationPoint(t); if (e.x >= 0 && e.y >= 0 && e.x <= o.width && e.y <= o.height) break; t.lng > o.center.lng ? t.lng -= 360 : t.lng += 360; } return t } const tn = { center: "translate(-50%,-50%)", top: "translate(-50%,0)", "top-left": "translate(0,0)", "top-right": "translate(-100%,0)", bottom: "translate(-50%,-100%)", "bottom-left": "translate(0,-100%)", "bottom-right": "translate(-100%,-100%)", left: "translate(0,-50%)", right: "translate(-100%,-50%)" }; class on extends e.Evented { constructor(t, i) { if (super(), (t instanceof e.window.HTMLElement || i) && (t = e.extend({ element: t }, i)), e.bindAll(["_update", "_onMove", "_onUp", "_addDragHandler", "_onMapClick", "_onKeyPress", "_clearFadeTimer"], this), this._anchor = t && t.anchor || "center", this._color = t && t.color || "#3FB1CE", this._scale = t && t.scale || 1, this._draggable = t && t.draggable || !1, this._clickTolerance = t && t.clickTolerance || 0, this._isDragging = !1, this._state = "inactive", this._rotation = t && t.rotation || 0, this._rotationAlignment = t && t.rotationAlignment || "auto", this._pitchAlignment = t && t.pitchAlignment && t.pitchAlignment || "auto", this._updateMoving = () => this._update(!0), this._occludedOpacity = t && t.occludedOpacity || .2, t && t.element) this._element = t.element, this._offset = e.pointGeometry.convert(t && t.offset || [0, 0]); else { this._defaultMarker = !0, this._element = n("div"); const i = 41, o = 27, r = s("svg", { display: "block", height: i * this._scale + "px", width: o * this._scale + "px", viewBox: `0 0 ${o} ${i}` }, this._element), a = s("radialGradient", { id: "shadowGradient" }, s("defs", {}, r)); s("stop", { offset: "10%", "stop-opacity": .4 }, a), s("stop", { offset: "100%", "stop-opacity": .05 }, a), s("ellipse", { cx: 13.5, cy: 34.8, rx: 10.5, ry: 5.25, fill: "url(#shadowGradient)" }, r), s("path", { fill: this._color, d: "M27,13.5C27,19.07 20.25,27 14.75,34.5C14.02,35.5 12.98,35.5 12.25,34.5C6.75,27 0,19.22 0,13.5C0,6.04 6.04,0 13.5,0C20.96,0 27,6.04 27,13.5Z" }, r), s("path", { opacity: .25, d: "M13.5,0C6.04,0 0,6.04 0,13.5C0,19.22 6.75,27 12.25,34.5C13,35.52 14.02,35.5 14.75,34.5C20.25,27 27,19.07 27,13.5C27,6.04 20.96,0 13.5,0ZM13.5,1C20.42,1 26,6.58 26,13.5C26,15.9 24.5,19.18 22.22,22.74C19.95,26.3 16.71,30.14 13.94,33.91C13.74,34.18 13.61,34.32 13.5,34.44C13.39,34.32 13.26,34.18 13.06,33.91C10.28,30.13 7.41,26.31 5.02,22.77C2.62,19.23 1,15.95 1,13.5C1,6.58 6.58,1 13.5,1Z" }, r), s("circle", { fill: "white", cx: 13.5, cy: 13.5, r: 5.5 }, r), this._offset = e.pointGeometry.convert(t && t.offset || [0, -14]); } this._element.hasAttribute("aria-label") || this._element.setAttribute("aria-label", "Map marker"), this._element.classList.add("mapboxgl-marker"), this._element.addEventListener("dragstart", (e => { e.preventDefault(); })), this._element.addEventListener("mousedown", (e => { e.preventDefault(); })); const o = this._element.classList; for (const e in tn) o.remove(`mapboxgl-marker-anchor-${e}`); o.add(`mapboxgl-marker-anchor-${this._anchor}`), this._popup = null; } addTo(e) { return e === this._map || (this.remove(), this._map = e, e.getCanvasContainer().appendChild(this._element), e.on("move", this._updateMoving), e.on("moveend", this._update), e.on("remove", this._clearFadeTimer), e._addMarker(this), this.setDraggable(this._draggable), this._update(), e.on("click", this._onMapClick)), this } remove() { const e = this._map; return e && (e.off("click", this._onMapClick), e.off("move", this._updateMoving), e.off("moveend", this._update), e.off("mousedown", this._addDragHandler), e.off("touchstart", this._addDragHandler), e.off("mouseup", this._onUp), e.off("touchend", this._onUp), e.off("mousemove", this._onMove), e.off("touchmove", this._onMove), e.off("remove", this._clearFadeTimer), e._removeMarker(this), this._map = void 0), this._clearFadeTimer(), this._element.remove(), this._popup && this._popup.remove(), this } getLngLat() { return this._lngLat } setLngLat(t) { return this._lngLat = e.LngLat.convert(t), this._pos = null, this._popup && this._popup.setLngLat(this._lngLat), this._update(!0), this } getElement() { return this._element } setPopup(e) { if (this._popup && (this._popup.remove(), this._popup = null, this._element.removeAttribute("role"), this._element.removeEventListener("keypress", this._onKeyPress), this._originalTabIndex || this._element.removeAttribute("tabindex")), e) { if (!("offset" in e.options)) { const t = 38.1, i = 13.5, o = Math.sqrt(Math.pow(i, 2) / 2); e.options.offset = this._defaultMarker ? { top: [0, 0], "top-left": [0, 0], "top-right": [0, 0], bottom: [0, -t], "bottom-left": [o, -1 * (t - i + o)], "bottom-right": [-o, -1 * (t - i + o)], left: [i, -1 * (t - i)], right: [-i, -1 * (t - i)] } : this._offset; } this._popup = e, e._marker = this, this._lngLat && this._popup.setLngLat(this._lngLat), this._element.setAttribute("role", "button"), this._originalTabIndex = this._element.getAttribute("tabindex"), this._originalTabIndex || this._element.setAttribute("tabindex", "0"), this._element.addEventListener("keypress", this._onKeyPress), this._element.setAttribute("aria-expanded", "false"); } return this } _onKeyPress(e) { const t = e.code, i = e.charCode || e.keyCode; "Space" !== t && "Enter" !== t && 32 !== i && 13 !== i || this.togglePopup(); } _onMapClick(e) { const t = e.originalEvent.target, i = this._element; this._popup && (t === i || i.contains(t)) && this.togglePopup(); } getPopup() { return this._popup } togglePopup() { const e = this._popup; return e ? (e.isOpen() ? (e.remove(), this._element.setAttribute("aria-expanded", "false")) : this._map && (e.addTo(this._map), this._element.setAttribute("aria-expanded", "true")), this) : this } _behindTerrain() { const e = this._map, t = this._pos; if (!e || !t) return !1; const i = e.unproject(t), o = e.getFreeCameraOptions(); if (!o.position) return !1; const r = o.position.toLngLat(); return r.distanceTo(i) < .9 * r.distanceTo(this._lngLat) } _evaluateOpacity() { const t = this._map; if (!t) return; const i = this._pos; if (!i || i.x < 0 || i.x > t.transform.width || i.y < 0 || i.y > t.transform.height) return void this._clearFadeTimer(); const o = t.unproject(i); let r; t._showingGlobe() && e.isLngLatBehindGlobe(t.transform, this._lngLat) ? r = 0 : (r = 1 - t._queryFogOpacity(o), t.transform._terrainEnabled() && t.getTerrain() && this._behindTerrain() && (r *= this._occludedOpacity)), this._element.style.opacity = `${r}`, this._element.style.pointerEvents = r > 0 ? "auto" : "none", this._popup && this._popup._setOpacity(r), this._fadeTimer = null; } _clearFadeTimer() { this._fadeTimer && (clearTimeout(this._fadeTimer), this._fadeTimer = null); } _updateDOM() { const e = this._pos; if (!e || !this._map) return; const t = this._offset.mult(this._scale); this._element.style.transform = `\n translate(${e.x}px,${e.y}px)\n ${tn[this._anchor]}\n ${this._calculateXYTransform()} ${this._calculateZTransform()}\n translate(${t.x}px,${t.y}px)\n `; } _calculateXYTransform() { const t = this._pos, i = this._map, o = this.getPitchAlignment(); if (!i || !t || "map" !== o) return ""; if (!i._showingGlobe()) { const e = i.getPitch(); return e ? `rotateX(${e}deg)` : "" } const r = e.radToDeg(e.globeTiltAtLngLat(i.transform, this._lngLat)), n = t.sub(e.globeCenterToScreenPoint(i.transform)), s = Math.abs(n.x) + Math.abs(n.y); if (0 === s) return ""; const a = r / s; return `rotateX(${-n.y*a}deg) rotateY(${n.x*a}deg)` } _calculateZTransform() { const t = this._pos, i = this._map; if (!i || !t) return ""; let o = 0; const r = this.getRotationAlignment(); if ("map" === r) if (i._showingGlobe()) { const t = i.project(new e.LngLat(this._lngLat.lng, this._lngLat.lat + .001)), r = i.project(new e.LngLat(this._lngLat.lng, this._lngLat.lat - .001)).sub(t); o = e.radToDeg(Math.atan2(r.y, r.x)) - 90; } else o = -i.getBearing(); else if ("horizon" === r) { const r = e.smoothstep(4, 6, i.getZoom()), n = e.globeCenterToScreenPoint(i.transform); n.y += r * i.transform.height; const s = t.sub(n), a = e.radToDeg(Math.atan2(s.y, s.x)); o = (a > 90 ? a - 270 : a + 90) * (1 - r); } return o += this._rotation, o ? `rotateZ(${o}deg)` : "" } _update(t) { e.window.cancelAnimationFrame(this._updateFrameId); const i = this._map; i && (i.transform.renderWorldCopies && (this._lngLat = en(this._lngLat, this._pos, i.transform)), this._pos = i.project(this._lngLat), !0 === t ? this._updateFrameId = e.window.requestAnimationFrame((() => { this._element && this._pos && this._anchor && (this._pos = this._pos.round(), this._updateDOM()); })) : this._pos = this._pos.round(), i._requestDomTask((() => { this._map && (this._element && this._pos && this._anchor && this._updateDOM(), (i._showingGlobe() || i.getTerrain() || i.getFog()) && !this._fadeTimer && (this._fadeTimer = setTimeout(this._evaluateOpacity.bind(this), 60))); }))); } getOffset() { return this._offset } setOffset(t) { return this._offset = e.pointGeometry.convert(t), this._update(), this } _onMove(t) { const i = this._map; if (!i) return; const o = this._pointerdownPos, r = this._positionDelta; if (o && r) { if (!this._isDragging) { const e = this._clickTolerance || i._clickTolerance; if (t.point.dist(o) < e) return; this._isDragging = !0; } this._pos = t.point.sub(r), this._lngLat = i.unproject(this._pos), this.setLngLat(this._lngLat), this._element.style.pointerEvents = "none", "pending" === this._state && (this._state = "active", this.fire(new e.Event("dragstart"))), this.fire(new e.Event("drag")); } } _onUp() { this._element.style.pointerEvents = "auto", this._positionDelta = null, this._pointerdownPos = null, this._isDragging = !1; const t = this._map; t && (t.off("mousemove", this._onMove), t.off("touchmove", this._onMove)), "active" === this._state && this.fire(new e.Event("dragend")), this._state = "inactive"; } _addDragHandler(e) { const t = this._map, i = this._pos; t && i && this._element.contains(e.originalEvent.target) && (e.preventDefault(), this._positionDelta = e.point.sub(i), this._pointerdownPos = e.point, this._state = "pending", t.on("mousemove", this._onMove), t.on("touchmove", this._onMove), t.once("mouseup", this._onUp), t.once("touchend", this._onUp)); } setDraggable(e) { this._draggable = !!e; const t = this._map; return t && (e ? (t.on("mousedown", this._addDragHandler), t.on("touchstart", this._addDragHandler)) : (t.off("mousedown", this._addDragHandler), t.off("touchstart", this._addDragHandler))), this } isDraggable() { return this._draggable } setRotation(e) { return this._rotation = e || 0, this._update(), this } getRotation() { return this._rotation } setRotationAlignment(e) { return this._rotationAlignment = e || "auto", this._update(), this } getRotationAlignment() { return "auto" === this._rotationAlignment || "horizon" === this._rotationAlignment && this._map && !this._map._showingGlobe() ? "viewport" : this._rotationAlignment } setPitchAlignment(e) { return this._pitchAlignment = e || "auto", this._update(), this } getPitchAlignment() { return "auto" === this._pitchAlignment ? this.getRotationAlignment() : this._pitchAlignment } setOccludedOpacity(e) { return this._occludedOpacity = e || .2, this._update(), this } getOccludedOpacity() { return this._occludedOpacity } } const rn = { closeButton: !0, closeOnClick: !0, focusAfterOpen: !0, className: "", maxWidth: "240px" }, nn = ["a[href]", "[tabindex]:not([tabindex='-1'])", "[contenteditable]:not([contenteditable='false'])", "button:not([disabled])", "input:not([disabled])", "select:not([disabled])", "textarea:not([disabled])"].join(", "); function sn(t = new e.pointGeometry(0, 0), i = "bottom") { if ("number" == typeof t) { const o = Math.round(Math.sqrt(.5 * Math.pow(t, 2))); switch (i) { case "top": return new e.pointGeometry(0, t); case "top-left": return new e.pointGeometry(o, o); case "top-right": return new e.pointGeometry(-o, o); case "bottom": return new e.pointGeometry(0, -t); case "bottom-left": return new e.pointGeometry(o, -o); case "bottom-right": return new e.pointGeometry(-o, -o); case "left": return new e.pointGeometry(t, 0); case "right": return new e.pointGeometry(-t, 0) } return new e.pointGeometry(0, 0) } return t instanceof e.pointGeometry || Array.isArray(t) ? e.pointGeometry.convert(t) : e.pointGeometry.convert(t[i] || [0, 0]) } class an { constructor(e) { this.jumpTo(e); } getValue(t) { if (t <= this._startTime) return this._start; if (t >= this._endTime) return this._end; const i = e.easeCubicInOut((t - this._startTime) / (this._endTime - this._startTime)); return this._start * (1 - i) + this._end * i } isEasing(e) { return e >= this._startTime && e <= this._endTime } jumpTo(e) { this._startTime = -1 / 0, this._endTime = -1 / 0, this._start = e, this._end = e; } easeTo(e, t, i) { this._start = this.getValue(t), this._end = e, this._startTime = t, this._endTime = t + i; } } const ln = { "AttributionControl.ToggleAttribution": "Toggle attribution", "AttributionControl.MapFeedback": "Map feedback", "FullscreenControl.Enter": "Enter fullscreen", "FullscreenControl.Exit": "Exit fullscreen", "GeolocateControl.FindMyLocation": "Find my location", "GeolocateControl.LocationNotAvailable": "Location not available", "LogoControl.Title": "Mapbox logo", "Map.Title": "Map", "NavigationControl.ResetBearing": "Reset bearing to north", "NavigationControl.ZoomIn": "Zoom in", "NavigationControl.ZoomOut": "Zoom out", "ScrollZoomBlocker.CtrlMessage": "Use ctrl + scroll to zoom the map", "ScrollZoomBlocker.CmdMessage": "Use ⌘ + scroll to zoom the map", "TouchPanBlocker.Message": "Use two fingers to move the map" }, cn = { center: [0, 0], zoom: 0, bearing: 0, pitch: 0, minZoom: -2, maxZoom: 22, minPitch: 0, maxPitch: 85, interactive: !0, scrollZoom: !0, boxZoom: !0, dragRotate: !0, dragPan: !0, keyboard: !0, doubleClickZoom: !0, touchZoomRotate: !0, touchPitch: !0, cooperativeGestures: !1, performanceMetricsCollection: !0, bearingSnap: 7, clickTolerance: 3, pitchWithRotate: !0, hash: !1, attributionControl: !0, failIfMajorPerformanceCaveat: !1, preserveDrawingBuffer: !1, trackResize: !0, optimizeForTerrain: !0, renderWorldCopies: !0, refreshExpiredTiles: !0, minTileCacheSize: null, maxTileCacheSize: null, localIdeographFontFamily: "sans-serif", localFontFamily: null, transformRequest: null, accessToken: null, fadeDuration: 300, crossSourceCollisions: !0 }, hn = { showCompass: !0, showZoom: !0, visualizePitch: !1 }; class un { constructor(t, i, o = !1) { this._clickTolerance = 10, this.element = i, this.mouseRotate = new wr({ clickTolerance: t.dragRotate._mouseRotate._clickTolerance }), this.map = t, o && (this.mousePitch = new Tr({ clickTolerance: t.dragRotate._mousePitch._clickTolerance })), e.bindAll(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend", "reset"], this), i.addEventListener("mousedown", this.mousedown), i.addEventListener("touchstart", this.touchstart, { passive: !1 }), i.addEventListener("touchmove", this.touchmove), i.addEventListener("touchend", this.touchend), i.addEventListener("touchcancel", this.reset); } down(e, t) { this.mouseRotate.mousedown(e, t), this.mousePitch && this.mousePitch.mousedown(e, t), h(); } move(e, t) { const i = this.map, o = this.mouseRotate.mousemoveWindow(e, t), r = o && o.bearingDelta; if (r && i.setBearing(i.getBearing() + r), this.mousePitch) { const o = this.mousePitch.mousemoveWindow(e, t), r = o && o.pitchDelta; r && i.setPitch(i.getPitch() + r); } } off() { const e = this.element; e.removeEventListener("mousedown", this.mousedown), e.removeEventListener("touchstart", this.touchstart, { passive: !1 }), e.removeEventListener("touchmove", this.touchmove), e.removeEventListener("touchend", this.touchend), e.removeEventListener("touchcancel", this.reset), this.offTemp(); } offTemp() { u(), e.window.removeEventListener("mousemove", this.mousemove), e.window.removeEventListener("mouseup", this.mouseup); } mousedown(t) { this.down(e.extend({}, t, { ctrlKey: !0, preventDefault: () => t.preventDefault() }), p(this.element, t)), e.window.addEventListener("mousemove", this.mousemove), e.window.addEventListener("mouseup", this.mouseup); } mousemove(e) { this.move(e, p(this.element, e)); } mouseup(e) { this.mouseRotate.mouseupWindow(e), this.mousePitch && this.mousePitch.mouseupWindow(e), this.offTemp(); } touchstart(e) { 1 !== e.targetTouches.length ? this.reset() : (this._startPos = this._lastPos = m(this.element, e.targetTouches)[0], this.down({ type: "mousedown", button: 0, ctrlKey: !0, preventDefault: () => e.preventDefault() }, this._startPos)); } touchmove(e) { 1 !== e.targetTouches.length ? this.reset() : (this._lastPos = m(this.element, e.targetTouches)[0], this.move({ preventDefault: () => e.preventDefault() }, this._lastPos)); } touchend(e) { 0 === e.targetTouches.length && this._startPos && this._lastPos && this._startPos.dist(this._lastPos) < this._clickTolerance && this.element.click(), this.reset(); } reset() { this.mouseRotate.reset(), this.mousePitch && this.mousePitch.reset(), delete this._startPos, delete this._lastPos, this.offTemp(); } } const _n = { positionOptions: { enableHighAccuracy: !1, maximumAge: 0, timeout: 6e3 }, fitBoundsOptions: { maxZoom: 15 }, trackUserLocation: !1, showAccuracyCircle: !0, showUserLocation: !0, showUserHeading: !1 }, dn = { maxWidth: 100, unit: "metric" }; function pn(e, t, i) { const o = mn(t), r = o / t, n = { kilometer: "km", meter: "m", mile: "mi", foot: "ft", "nautical-mile": "nm" }[i]; this._map._requestDomTask((() => { this._container.style.width = e * r + "px", this._container.innerHTML = `${o} ${n}`; })); } function mn(e) { const t = Math.pow(10, `${Math.floor(e)}`.length - 1); let i = e / t; return i = i >= 10 ? 10 : i >= 5 ? 5 : i >= 3 ? 3 : i >= 2 ? 2 : i >= 1 ? 1 : function(e) { const t = Math.pow(10, Math.ceil(-Math.log(e) / Math.LN10)); return Math.round(e * t) / t }(i), t * i } const fn = { version: e.version, supported: i, setRTLTextPlugin: e.setRTLTextPlugin, getRTLTextPluginStatus: e.getRTLTextPluginStatus, Map: class extends Yr { constructor(t) { if (e.LivePerformanceUtils.mark(e.PerformanceMarkers.create), null != (t = e.extend({}, cn, t)).minZoom && null != t.maxZoom && t.minZoom > t.maxZoom) throw new Error("maxZoom must be greater than or equal to minZoom"); if (null != t.minPitch && null != t.maxPitch && t.minPitch > t.maxPitch) throw new Error("maxPitch must be greater than or equal to minPitch"); if (null != t.minPitch && t.minPitch < 0) throw new Error("minPitch must be greater than or equal to 0"); if (null != t.maxPitch && t.maxPitch > 85) throw new Error("maxPitch must be less than or equal to 85"); if (t.antialias && e.isSafariWithAntialiasingBug(e.window) && (t.antialias = !1, e.warnOnce("Antialiasing is disabled for this WebGL context to avoid browser bug: https://github.com/mapbox/mapbox-gl-js/issues/11609")), super(new Ko(t.minZoom, t.maxZoom, t.minPitch, t.maxPitch, t.renderWorldCopies), t), this._interactive = t.interactive, this._minTileCacheSize = t.minTileCacheSize, this._maxTileCacheSize = t.maxTileCacheSize, this._failIfMajorPerformanceCaveat = t.failIfMajorPerformanceCaveat, this._preserveDrawingBuffer = t.preserveDrawingBuffer, this._antialias = t.antialias, this._useWebGL2 = t.useWebGL2, this._trackResize = t.trackResize, this._bearingSnap = t.bearingSnap, this._refreshExpiredTiles = t.refreshExpiredTiles, this._fadeDuration = t.fadeDuration, this._isInitialLoad = !0, this._crossSourceCollisions = t.crossSourceCollisions, this._collectResourceTiming = t.collectResourceTiming, this._optimizeForTerrain = t.optimizeForTerrain, this._language = this._parseLanguage(t.language), this._worldview = t.worldview, this._renderTaskQueue = new Qr, this._domRenderTaskQueue = new Qr, this._controls = [], this._markers = [], this._popups = [], this._mapId = e.uniqueId(), this._locale = e.extend({}, ln, t.locale), this._clickTolerance = t.clickTolerance, this._cooperativeGestures = t.cooperativeGestures, this._performanceMetricsCollection = t.performanceMetricsCollection, this._containerWidth = 0, this._containerHeight = 0, this._averageElevationLastSampledAt = -1 / 0, this._averageElevationExaggeration = 0, this._averageElevation = new an(0), this._interactionRange = [1 / 0, -1 / 0], this._visibilityHidden = 0, this._useExplicitProjection = !1, this._requestManager = new e.RequestManager(t.transformRequest, t.accessToken, t.testMode), this._silenceAuthErrors = !!t.testMode, "string" == typeof t.container) { if (this._container = e.window.document.getElementById(t.container), !this._container) throw new Error(`Container '${t.container}' not found.`) } else { if (!(t.container instanceof e.window.HTMLElement)) throw new Error("Invalid type: 'container' must be a String or HTMLElement."); this._container = t.container; } if (this._container.childNodes.length > 0 && e.warnOnce("The map container element should be empty, otherwise the map's interactivity will be negatively impacted. If you want to display a message when WebGL is not supported, use the Mapbox GL Supported plugin instead."), t.maxBounds && this.setMaxBounds(t.maxBounds), e.bindAll(["_onWindowOnline", "_onWindowResize", "_onVisibilityChange", "_onMapScroll", "_contextLost", "_contextRestored"], this), this._setupContainer(), this._setupPainter(), void 0 === this.painter) throw new Error("Failed to initialize WebGL."); this.on("move", (() => this._update(!1))), this.on("moveend", (() => this._update(!1))), this.on("zoom", (() => this._update(!0))), void 0 !== e.window && (e.window.addEventListener("online", this._onWindowOnline, !1), e.window.addEventListener("resize", this._onWindowResize, !1), e.window.addEventListener("orientationchange", this._onWindowResize, !1), e.window.addEventListener("webkitfullscreenchange", this._onWindowResize, !1), e.window.addEventListener("visibilitychange", this._onVisibilityChange, !1)), this.handlers = new $r(this, t), this._localFontFamily = t.localFontFamily, this._localIdeographFontFamily = t.localIdeographFontFamily, t.style && this.setStyle(t.style, { localFontFamily: this._localFontFamily, localIdeographFontFamily: this._localIdeographFontFamily }), t.projection && this.setProjection(t.projection), this._hash = t.hash && new Qo("string" == typeof t.hash && t.hash || void 0).addTo(this), this._hash && this._hash._onHashChange() || (this.jumpTo({ center: t.center, zoom: t.zoom, bearing: t.bearing, pitch: t.pitch }), t.bounds && (this.resize(), this.fitBounds(t.bounds, e.extend({}, t.fitBoundsOptions, { duration: 0 })))), this.resize(), t.attributionControl && this.addControl(new Kr({ customAttribution: t.customAttribution })), this._logoControl = new Jr, this.addControl(this._logoControl, t.logoPosition), this.on("style.load", (() => { this.transform.unmodified && this.jumpTo(this.style.stylesheet); })), this.on("data", (t => { this._update("style" === t.dataType), this.fire(new e.Event(`${t.dataType}data`, t)); })), this.on("dataloading", (t => { this.fire(new e.Event(`${t.dataType}dataloading`, t)); })); } _getMapId() { return this._mapId } addControl(t, i) { if (void 0 === i && (i = t.getDefaultPosition ? t.getDefaultPosition() : "top-right"), !t || !t.onAdd) return this.fire(new e.ErrorEvent(new Error("Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods."))); const o = t.onAdd(this); this._controls.push(t); const r = this._controlPositions[i]; return -1 !== i.indexOf("bottom") ? r.insertBefore(o, r.firstChild) : r.appendChild(o), this } removeControl(t) { if (!t || !t.onRemove) return this.fire(new e.ErrorEvent(new Error("Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods."))); const i = this._controls.indexOf(t); return i > -1 && this._controls.splice(i, 1), t.onRemove(this), this } hasControl(e) { return this._controls.indexOf(e) > -1 } getContainer() { return this._container } getCanvasContainer() { return this._canvasContainer } getCanvas() { return this._canvas } resize(t) { if (this._updateContainerDimensions(), this._containerWidth === this.transform.width && this._containerHeight === this.transform.height) return this; this._resizeCanvas(this._containerWidth, this._containerHeight), this.transform.resize(this._containerWidth, this._containerHeight), this.painter.resize(Math.ceil(this._containerWidth), Math.ceil(this._containerHeight)); const i = !this._moving; return i && this.fire(new e.Event("movestart", t)).fire(new e.Event("move", t)), this.fire(new e.Event("resize", t)), i && this.fire(new e.Event("moveend", t)), this } getBounds() { return this.transform.getBounds() } getMaxBounds() { return this.transform.getMaxBounds() || null } setMaxBounds(t) { return this.transform.setMaxBounds(e.LngLatBounds.convert(t)), this._update() } setMinZoom(t) { if ((t = null == t ? -2 : t) >= -2 && t <= this.transform.maxZoom) return this.transform.minZoom = t, this._update(), this.getZoom() < t ? this.setZoom(t) : this.fire(new e.Event("zoomstart")).fire(new e.Event("zoom")).fire(new e.Event("zoomend")), this; throw new Error("minZoom must be between -2 and the current maxZoom, inclusive") } getMinZoom() { return this.transform.minZoom } setMaxZoom(t) { if ((t = null == t ? 22 : t) >= this.transform.minZoom) return this.transform.maxZoom = t, this._update(), this.getZoom() > t ? this.setZoom(t) : this.fire(new e.Event("zoomstart")).fire(new e.Event("zoom")).fire(new e.Event("zoomend")), this; throw new Error("maxZoom must be greater than the current minZoom") } getMaxZoom() { return this.transform.maxZoom } setMinPitch(t) { if ((t = null == t ? 0 : t) < 0) throw new Error("minPitch must be greater than or equal to 0"); if (t >= 0 && t <= this.transform.maxPitch) return this.transform.minPitch = t, this._update(), this.getPitch() < t ? this.setPitch(t) : this.fire(new e.Event("pitchstart")).fire(new e.Event("pitch")).fire(new e.Event("pitchend")), this; throw new Error("minPitch must be between 0 and the current maxPitch, inclusive") } getMinPitch() { return this.transform.minPitch } setMaxPitch(t) { if ((t = null == t ? 85 : t) > 85) throw new Error("maxPitch must be less than or equal to 85"); if (t >= this.transform.minPitch) return this.transform.maxPitch = t, this._update(), this.getPitch() > t ? this.setPitch(t) : this.fire(new e.Event("pitchstart")).fire(new e.Event("pitch")).fire(new e.Event("pitchend")), this; throw new Error("maxPitch must be greater than or equal to minPitch") } getMaxPitch() { return this.transform.maxPitch } getRenderWorldCopies() { return this.transform.renderWorldCopies } setRenderWorldCopies(e) { return this.transform.renderWorldCopies = e, this.transform.renderWorldCopies || this._forceMarkerAndPopupUpdate(!0), this._update() } getLanguage() { return this._language } _parseLanguage(t) { return "auto" === t ? e.window.navigator.language : Array.isArray(t) ? 0 === t.length ? void 0 : t.map((t => "auto" === t ? e.window.navigator.language : t)) : t } setLanguage(e) { const t = this._parseLanguage(e); if (!this.style || t === this._language) return this; this._language = t, this.style._reloadSources(); for (const e of this._controls) e._setLanguage && e._setLanguage(this._language); return this } getWorldview() { return this._worldview } setWorldview(e) { return this.style && e !== this._worldview ? (this._worldview = e, this.style._reloadSources(), this) : this } getProjection() { return this.transform.mercatorFromTransition ? { name: "globe", center: [0, 0] } : this.transform.getProjection() } _showingGlobe() { return "globe" === this.transform.projection.name } setProjection(e) { return this._lazyInitEmptyStyle(), e ? "string" == typeof e && (e = { name: e }) : e = null, this._useExplicitProjection = !!e, this._prioritizeAndUpdateProjection(e, this.style.stylesheet ? this.style.stylesheet.projection : null) } _updateProjectionTransition() { if ("globe" !== this.getProjection().name) return; const t = this.transform, i = t.projection.name; let o; "globe" === i && t.zoom >= e.GLOBE_ZOOM_THRESHOLD_MAX ? (t.setMercatorFromTransition(), o = !0) : "mercator" === i && t.zoom < e.GLOBE_ZOOM_THRESHOLD_MAX && (t.setProjection({ name: "globe" }), o = !0), o && (this.style.applyProjectionUpdate(), this.style._forceSymbolLayerUpdate()); } _prioritizeAndUpdateProjection(e, t) { return this._updateProjection(e || t || { name: "mercator" }) } _updateProjection(t) { let i; if (i = "globe" === t.name && this.transform.zoom >= e.GLOBE_ZOOM_THRESHOLD_MAX ? this.transform.setMercatorFromTransition() : this.transform.setProjection(t), this.style.applyProjectionUpdate(), i) { this.painter.clearBackgroundTiles(); for (const e in this.style._sourceCaches) this.style._sourceCaches[e].clearTiles(); this._update(!0), this._forceMarkerAndPopupUpdate(!0); } return this } project(t) { return this.transform.locationPoint3D(e.LngLat.convert(t)) } unproject(t) { return this.transform.pointLocation3D(e.pointGeometry.convert(t)) } isMoving() { return this._moving || this.handlers && this.handlers.isMoving() || !1 } isZooming() { return this._zooming || this.handlers && this.handlers.isZooming() || !1 } isRotating() { return this._rotating || this.handlers && this.handlers.isRotating() || !1 } _isDragging() { return this.handlers && this.handlers._isDragging() || !1 } _createDelegatedListener(e, t, i) { if ("mouseenter" === e || "mouseover" === e) { let o = !1; const r = r => { const n = t.filter((e => this.getLayer(e))), s = n.length ? this.queryRenderedFeatures(r.point, { layers: n }) : []; s.length ? o || (o = !0, i.call(this, new cr(e, this, r.originalEvent, { features: s }))) : o = !1; }, n = () => { o = !1; }; return { layers: new Set(t), listener: i, delegates: { mousemove: r, mouseout: n } } } if ("mouseleave" === e || "mouseout" === e) { let o = !1; const r = r => { const n = t.filter((e => this.getLayer(e))); (n.length ? this.queryRenderedFeatures(r.point, { layers: n }) : []).length ? o = !0 : o && (o = !1, i.call(this, new cr(e, this, r.originalEvent))); }, n = t => { o && (o = !1, i.call(this, new cr(e, this, t.originalEvent))); }; return { layers: new Set(t), listener: i, delegates: { mousemove: r, mouseout: n } } } { const o = e => { const o = t.filter((e => this.getLayer(e))), r = o.length ? this.queryRenderedFeatures(e.point, { layers: o }) : []; r.length && (e.features = r, i.call(this, e), delete e.features); }; return { layers: new Set(t), listener: i, delegates: { [e]: o } } } } on(e, t, i) { if (void 0 === i) return super.on(e, t); Array.isArray(t) || (t = [t]); const o = this._createDelegatedListener(e, t, i); this._delegatedListeners = this._delegatedListeners || {}, this._delegatedListeners[e] = this._delegatedListeners[e] || [], this._delegatedListeners[e].push(o); for (const e in o.delegates) this.on(e, o.delegates[e]); return this } once(e, t, i) { if (void 0 === i) return super.once(e, t); Array.isArray(t) || (t = [t]); const o = this._createDelegatedListener(e, t, i); for (const e in o.delegates) this.once(e, o.delegates[e]); return this } off(e, t, i) { if (void 0 === i) return super.off(e, t); t = new Set(Array.isArray(t) ? t : [t]); const o = (e, t) => { if (e.size !== t.size) return !1; for (const i of e) if (!t.has(i)) return !1; return !0 }, r = this._delegatedListeners ? this._delegatedListeners[e] : void 0; return r && (e => { for (let r = 0; r < e.length; r++) { const n = e[r]; if (n.listener === i && o(n.layers, t)) { for (const e in n.delegates) this.off(e, n.delegates[e]); return e.splice(r, 1), this } } })(r), this } queryRenderedFeatures(t, i) { return this.style ? (void 0 !== i || void 0 === t || t instanceof e.pointGeometry || Array.isArray(t) || (i = t, t = void 0), this.style.queryRenderedFeatures(t = t || [ [0, 0], [this.transform.width, this.transform.height] ], i = i || {}, this.transform)) : [] } querySourceFeatures(e, t) { return this.style.querySourceFeatures(e, t) } setStyle(t, i) { return !1 !== (i = e.extend({}, { localIdeographFontFamily: this._localIdeographFontFamily, localFontFamily: this._localFontFamily }, i)).diff && i.localIdeographFontFamily === this._localIdeographFontFamily && i.localFontFamily === this._localFontFamily && this.style && t ? (this._diffStyle(t, i), this) : (this._localIdeographFontFamily = i.localIdeographFontFamily, this._localFontFamily = i.localFontFamily, this._updateStyle(t, i)) } _getUIString(e) { const t = this._locale[e]; if (null == t) throw new Error(`Missing UI string '${e}'`); return t } _updateStyle(e, t) { return this.style && (this.style.setEventedParent(null), this.style._remove(), this.style = void 0), e && (this.style = new Qt(this, t || {}), this.style.setEventedParent(this, { style: this.style }), "string" == typeof e ? this.style.loadURL(e) : this.style.loadJSON(e)), this._updateTerrain(), this } _lazyInitEmptyStyle() { this.style || (this.style = new Qt(this, {}), this.style.setEventedParent(this, { style: this.style }), this.style.loadEmpty()); } _diffStyle(t, i) { if ("string" == typeof t) { const o = this._requestManager.normalizeStyleURL(t), r = this._requestManager.transformRequest(o, e.ResourceType.Style); e.getJSON(r, ((t, o) => { t ? this.fire(new e.ErrorEvent(t)) : o && this._updateDiff(o, i); })); } else "object" == typeof t && this._updateDiff(t, i); } _updateDiff(t, i) { try { this.style.setState(t) && this._update(!0); } catch (o) { e.warnOnce(`Unable to perform style diff: ${o.message||o.error||o}. Rebuilding the style from scratch.`), this._updateStyle(t, i); } } getStyle() { if (this.style) return this.style.serialize() } isStyleLoaded() { return this.style ? this.style.loaded() : (e.warnOnce("There is no style added to the map."), !1) } addSource(e, t) { return this._lazyInitEmptyStyle(), this.style.addSource(e, t), this._update(!0) } isSourceLoaded(e) { return !!this.style && this.style._isSourceCacheLoaded(e) } areTilesLoaded() { const e = this.style && this.style._sourceCaches; for (const t in e) { const i = e[t]._tiles; for (const e in i) { const t = i[e]; if ("loaded" !== t.state && "errored" !== t.state) return !1 } } return !0 } addSourceType(e, t, i) { this._lazyInitEmptyStyle(), this.style.addSourceType(e, t, i); } removeSource(e) { return this.style.removeSource(e), this._updateTerrain(), this._update(!0) } getSource(e) { return this.style.getSource(e) } addImage(t, i, { pixelRatio: o = 1, sdf: r = !1, stretchX: n, stretchY: s, content: a } = {}) { if (this._lazyInitEmptyStyle(), i instanceof e.window.HTMLImageElement || e.window.ImageBitmap && i instanceof e.window.ImageBitmap) { const { width: l, height: c, data: h } = e.exported.getImageData(i); this.style.addImage(t, { data: new e.RGBAImage({ width: l, height: c }, h), pixelRatio: o, stretchX: n, stretchY: s, content: a, sdf: r, version: 0 }); } else if (void 0 === i.width || void 0 === i.height) this.fire(new e.ErrorEvent(new Error("Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`"))); else { const { width: l, height: c } = i, h = i; this.style.addImage(t, { data: new e.RGBAImage({ width: l, height: c }, new Uint8Array(h.data)), pixelRatio: o, stretchX: n, stretchY: s, content: a, sdf: r, version: 0, userImage: h }), h.onAdd && h.onAdd(this, t); } } updateImage(t, i) { const o = this.style.getImage(t); if (!o) return void this.fire(new e.ErrorEvent(new Error("The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead."))); const r = i instanceof e.window.HTMLImageElement || e.window.ImageBitmap && i instanceof e.window.ImageBitmap ? e.exported.getImageData(i) : i, { width: n, height: s } = r; void 0 !== n && void 0 !== s ? n === o.data.width && s === o.data.height ? (o.data.replace(r.data, !(i instanceof e.window.HTMLImageElement || e.window.ImageBitmap && i instanceof e.window.ImageBitmap)), this.style.updateImage(t, o)) : this.fire(new e.ErrorEvent(new Error(`The width and height of the updated image (${n}, ${s})\n must be that same as the previous version of the image\n (${o.data.width}, ${o.data.height})`))) : this.fire(new e.ErrorEvent(new Error("Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`"))); } hasImage(t) { return t ? !!this.style.getImage(t) : (this.fire(new e.ErrorEvent(new Error("Missing required image id"))), !1) } removeImage(e) { this.style.removeImage(e); } loadImage(t, i) { e.getImage(this._requestManager.transformRequest(t, e.ResourceType.Image), ((t, o) => { i(t, o instanceof e.window.HTMLImageElement ? e.exported.getImageData(o) : o); })); } listImages() { return this.style.listImages() } addLayer(e, t) { return this._lazyInitEmptyStyle(), this.style.addLayer(e, t), this._update(!0) } moveLayer(e, t) { return this.style.moveLayer(e, t), this._update(!0) } removeLayer(e) { return this.style.removeLayer(e), this._update(!0) } getLayer(e) { return this.style.getLayer(e) } setLayerZoomRange(e, t, i) { return this.style.setLayerZoomRange(e, t, i), this._update(!0) } setFilter(e, t, i = {}) { return this.style.setFilter(e, t, i), this._update(!0) } getFilter(e) { return this.style.getFilter(e) } setPaintProperty(e, t, i, o = {}) { return this.style.setPaintProperty(e, t, i, o), this._update(!0) } getPaintProperty(e, t) { return this.style.getPaintProperty(e, t) } setLayoutProperty(e, t, i, o = {}) { return this.style.setLayoutProperty(e, t, i, o), this._update(!0) } getLayoutProperty(e, t) { return this.style.getLayoutProperty(e, t) } setLight(e, t = {}) { return this._lazyInitEmptyStyle(), this.style.setLight(e, t), this._update(!0) } getLight() { return this.style.getLight() } setTerrain(e) { return this._lazyInitEmptyStyle(), !e && this.transform.projection.requiresDraping ? this.style.setTerrainForDraping() : this.style.setTerrain(e), this._averageElevationLastSampledAt = -1 / 0, this._update(!0) } getTerrain() { return this.style ? this.style.getTerrain() : null } setFog(e) { return this._lazyInitEmptyStyle(), this.style.setFog(e), this._update(!0) } getFog() { return this.style ? this.style.getFog() : null } _queryFogOpacity(t) { return this.style && this.style.fog ? this.style.fog.getOpacityAtLatLng(e.LngLat.convert(t), this.transform) : 0 } setFeatureState(e, t) { return this.style.setFeatureState(e, t), this._update() } removeFeatureState(e, t) { return this.style.removeFeatureState(e, t), this._update() } getFeatureState(e) { return this.style.getFeatureState(e) } _updateContainerDimensions() { if (!this._container) return; const t = this._container.getBoundingClientRect().width || 400, i = this._container.getBoundingClientRect().height || 300; let o, r, n, s = this._container; for (; s && (!r || !n);) { const t = e.window.getComputedStyle(s).transform; t && "none" !== t && (o = t.match(/matrix.*\((.+)\)/)[1].split(", "), o[0] && "0" !== o[0] && "1" !== o[0] && (r = o[0]), o[3] && "0" !== o[3] && "1" !== o[3] && (n = o[3])), s = s.parentElement; } this._containerWidth = r ? Math.abs(t / r) : t, this._containerHeight = n ? Math.abs(i / n) : i; } _detectMissingCSS() { "rgb(250, 128, 114)" !== e.window.getComputedStyle(this._missingCSSCanary).getPropertyValue("background-color") && e.warnOnce("This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/."); } _setupContainer() { const e = this._container; e.classList.add("mapboxgl-map"), (this._missingCSSCanary = n("div", "mapboxgl-canary", e)).style.visibility = "hidden", this._detectMissingCSS(); const t = this._canvasContainer = n("div", "mapboxgl-canvas-container", e); this._interactive && t.classList.add("mapboxgl-interactive"), this._canvas = n("canvas", "mapboxgl-canvas", t), this._canvas.addEventListener("webglcontextlost", this._contextLost, !1), this._canvas.addEventListener("webglcontextrestored", this._contextRestored, !1), this._canvas.setAttribute("tabindex", "0"), this._canvas.setAttribute("aria-label", this._getUIString("Map.Title")), this._canvas.setAttribute("role", "region"), this._updateContainerDimensions(), this._resizeCanvas(this._containerWidth, this._containerHeight); const i = this._controlContainer = n("div", "mapboxgl-control-container", e), o = this._controlPositions = {}; ["top-left", "top-right", "bottom-left", "bottom-right"].forEach((e => { o[e] = n("div", `mapboxgl-ctrl-${e}`, i); })), this._container.addEventListener("scroll", this._onMapScroll, !1); } _resizeCanvas(t, i) { const o = e.exported.devicePixelRatio || 1; this._canvas.width = o * Math.ceil(t), this._canvas.height = o * Math.ceil(i), this._canvas.style.width = `${t}px`, this._canvas.style.height = `${i}px`; } _addMarker(e) { this._markers.push(e); } _removeMarker(e) { const t = this._markers.indexOf(e); - 1 !== t && this._markers.splice(t, 1); } _addPopup(e) { this._popups.push(e); } _removePopup(e) { const t = this._popups.indexOf(e); - 1 !== t && this._popups.splice(t, 1); } _setupPainter() { const t = e.extend({}, i.webGLContextAttributes, { failIfMajorPerformanceCaveat: this._failIfMajorPerformanceCaveat, preserveDrawingBuffer: this._preserveDrawingBuffer, antialias: this._antialias || !1 }), o = this._useWebGL2 && this._canvas.getContext("webgl2", t), r = o || this._canvas.getContext("webgl", t) || this._canvas.getContext("experimental-webgl", t); r ? (this._useWebGL2 && !o && e.warnOnce("Failed to create WebGL 2 context. Using WebGL 1."), e.storeAuthState(r, !0), this.painter = new Fo(r, this.transform, !!o), this.on("data", (e => { "source" === e.dataType && this.painter.setTileLoadedFlag(!0); })), e.exported$1.testSupport(r)) : this.fire(new e.ErrorEvent(new Error("Failed to initialize WebGL"))); } _contextLost(t) { t.preventDefault(), this._frame && (this._frame.cancel(), this._frame = null), this.fire(new e.Event("webglcontextlost", { originalEvent: t })); } _contextRestored(t) { this._setupPainter(), this.resize(), this._update(), this.fire(new e.Event("webglcontextrestored", { originalEvent: t })); } _onMapScroll(e) { if (e.target === this._container) return this._container.scrollTop = 0, this._container.scrollLeft = 0, !1 } loaded() { return !this._styleDirty && !this._sourcesDirty && !!this.style && this.style.loaded() } _update(e) { return this.style ? (this._styleDirty = this._styleDirty || e, this._sourcesDirty = !0, this.triggerRepaint(), this) : this } _requestRenderFrame(e) { return this._update(), this._renderTaskQueue.add(e) } _cancelRenderFrame(e) { this._renderTaskQueue.remove(e); } _requestDomTask(e) { !this.loaded() || this.loaded() && !this.isMoving() ? e() : this._domRenderTaskQueue.add(e); } _render(t) { let i; const o = this.painter.context.extTimerQuery, r = e.exported.now(); if (this.listens("gpu-timing-frame") && (i = o.createQueryEXT(), o.beginQueryEXT(o.TIME_ELAPSED_EXT, i)), this.painter.context.setDirty(), this.painter.setBaseState(), (this.isMoving() || this.isRotating() || this.isZooming()) && (this._interactionRange[0] = Math.min(this._interactionRange[0], e.window.performance.now()), this._interactionRange[1] = Math.max(this._interactionRange[1], e.window.performance.now())), this._renderTaskQueue.run(t), this._domRenderTaskQueue.run(t), this._removed) return; this._updateProjectionTransition(); const n = this._isInitialLoad ? 0 : this._fadeDuration; if (this.style && this._styleDirty) { this._styleDirty = !1; const t = this.transform.zoom, i = this.transform.pitch, o = e.exported.now(), r = new e.EvaluationParameters(t, { now: o, fadeDuration: n, pitch: i, transition: this.style.getTransition() }); this.style.update(r); } this.style && this.style.fog && this.style.fog.hasTransition() && (this.style._markersNeedUpdate = !0, this._sourcesDirty = !0); let s = !1; if (this.style && this._sourcesDirty ? (this._sourcesDirty = !1, this.painter._updateFog(this.style), this._updateTerrain(), s = this._updateAverageElevation(r), this.style._updateSources(this.transform), this._forceMarkerAndPopupUpdate()) : s = this._updateAverageElevation(r), this._placementDirty = this.style && this.style._updatePlacement(this.painter.transform, this.showCollisionBoxes, n, this._crossSourceCollisions), this.style && this.painter.render(this.style, { showTileBoundaries: this.showTileBoundaries, showTerrainWireframe: this.showTerrainWireframe, showOverdrawInspector: this._showOverdrawInspector, showQueryGeometry: !!this._showQueryGeometry, showTileAABBs: this.showTileAABBs, rotating: this.isRotating(), zooming: this.isZooming(), moving: this.isMoving(), fadeDuration: n, isInitialLoad: this._isInitialLoad, showPadding: this.showPadding, gpuTiming: !!this.listens("gpu-timing-layer"), gpuTimingDeferredRender: !!this.listens("gpu-timing-deferred-render"), speedIndexTiming: this.speedIndexTiming }), this.fire(new e.Event("render")), this.loaded() && !this._loaded && (this._loaded = !0, this.fire(new e.Event("load"))), this.style && this.style.hasTransitions() && (this._styleDirty = !0), this.style && !this._placementDirty && this.style._releaseSymbolFadeTiles(), i) { const t = e.exported.now() - r; o.endQueryEXT(o.TIME_ELAPSED_EXT, i), setTimeout((() => { const n = o.getQueryObjectEXT(i, o.QUERY_RESULT_EXT) / 1e6; o.deleteQueryEXT(i), this.fire(new e.Event("gpu-timing-frame", { cpuTime: t, gpuTime: n })), e.window.performance.mark("frame-gpu", { startTime: r, detail: { gpuTime: n } }); }), 50); } if (this.listens("gpu-timing-layer")) { const t = this.painter.collectGpuTimers(); setTimeout((() => { const i = this.painter.queryGpuTimers(t); this.fire(new e.Event("gpu-timing-layer", { layerTimes: i })); }), 50); } if (this.listens("gpu-timing-deferred-render")) { const t = this.painter.collectDeferredRenderGpuQueries(); setTimeout((() => { const i = this.painter.queryGpuTimeDeferredRender(t); this.fire(new e.Event("gpu-timing-deferred-render", { gpuTime: i })); }), 50); } const a = this._sourcesDirty || this._styleDirty || this._placementDirty || s; if (a || this._repaint) this.triggerRepaint(); else { const t = !this.isMoving() && this.loaded(); if (t && (s = this._updateAverageElevation(r, !0)), s) this.triggerRepaint(); else if (this._triggerFrame(!1), t && (this.fire(new e.Event("idle")), this._isInitialLoad = !1, this.speedIndexTiming)) { const t = this._calculateSpeedIndex(); this.fire(new e.Event("speedindexcompleted", { speedIndex: t })), this.speedIndexTiming = !1; } }!this._loaded || this._fullyLoaded || a || (this._fullyLoaded = !0, e.LivePerformanceUtils.mark(e.PerformanceMarkers.fullLoad), this._performanceMetricsCollection && e.postPerformanceEvent(this._requestManager._customAccessToken, { width: this.painter.width, height: this.painter.height, interactionRange: this._interactionRange, visibilityHidden: this._visibilityHidden, terrainEnabled: !!this.painter.style.getTerrain(), fogEnabled: !!this.painter.style.getFog(), projection: this.getProjection().name, zoom: this.transform.zoom, renderer: this.painter.context.renderer, vendor: this.painter.context.vendor }), this._authenticate()); } _forceMarkerAndPopupUpdate(e) { for (const t of this._markers) e && !this.getRenderWorldCopies() && (t._lngLat = t._lngLat.wrap()), t._update(); for (const t of this._popups) !e || this.getRenderWorldCopies() || t._trackPointer || (t._lngLat = t._lngLat.wrap()), t._update(); } _updateAverageElevation(e, t = !1) { const i = e => (this.transform.averageElevation = e, this._update(!1), !0); if (!this.painter.averageElevationNeedsEasing()) return 0 !== this.transform.averageElevation && i(0); if ((t || e - this._averageElevationLastSampledAt > 500) && !this._averageElevation.isEasing(e)) { const t = this.transform.averageElevation; let o = this.transform.sampleAverageElevation(), r = !1; this.transform.elevation && (r = this.transform.elevation.exaggeration() !== this._averageElevationExaggeration, this._averageElevationExaggeration = this.transform.elevation.exaggeration()), isNaN(o) ? o = 0 : this._averageElevationLastSampledAt = e; const n = Math.abs(t - o); if (n > 1) { if (this._isInitialLoad || r) return this._averageElevation.jumpTo(o), i(o); this._averageElevation.easeTo(o, e, 300); } else if (n > 1e-4) return this._averageElevation.jumpTo(o), i(o) } return !!this._averageElevation.isEasing(e) && i(this._averageElevation.getValue(e)) } _authenticate() { e.getMapSessionAPI(this._getMapId(), this._requestManager._skuToken, this._requestManager._customAccessToken, (t => { if (t && (t.message === e.AUTH_ERR_MSG || 401 === t.status)) { const t = this.painter.context.gl; e.storeAuthState(t, !1), this._logoControl instanceof Jr && this._logoControl._updateLogo(), t && t.clear(t.DEPTH_BUFFER_BIT | t.COLOR_BUFFER_BIT | t.STENCIL_BUFFER_BIT), this._silenceAuthErrors || this.fire(new e.ErrorEvent(new Error("A valid Mapbox access token is required to use Mapbox GL JS. To create an account or a new access token, visit https://account.mapbox.com/"))); } })), e.postMapLoadEvent(this._getMapId(), this._requestManager._skuToken, this._requestManager._customAccessToken, (() => {})); } _updateTerrain() { const e = this._isDragging(); this.painter.updateTerrain(this.style, e); } _calculateSpeedIndex() { const e = this.painter.canvasCopy(), t = this.painter.getCanvasCopiesAndTimestamps(); t.timeStamps.push(performance.now()); const i = this.painter.context.gl, o = i.createFramebuffer(); function r(e) { i.framebufferTexture2D(i.FRAMEBUFFER, i.COLOR_ATTACHMENT0, i.TEXTURE_2D, e, 0); const t = new Uint8Array(i.drawingBufferWidth * i.drawingBufferHeight * 4); return i.readPixels(0, 0, i.drawingBufferWidth, i.drawingBufferHeight, i.RGBA, i.UNSIGNED_BYTE, t), t } return i.bindFramebuffer(i.FRAMEBUFFER, o), this._canvasPixelComparison(r(e), t.canvasCopies.map(r), t.timeStamps) } _canvasPixelComparison(e, t, i) { let o = i[1] - i[0]; const r = e.length / 4; for (let n = 0; n < t.length; n++) { const s = t[n]; let a = 0; for (let t = 0; t < s.length; t += 4) s[t] === e[t] && s[t + 1] === e[t + 1] && s[t + 2] === e[t + 2] && s[t + 3] === e[t + 3] && (a += 1); o += (i[n + 2] - i[n + 1]) * (1 - a / r); } return o } remove() { this._hash && this._hash.remove(); for (const e of this._controls) e.onRemove(this); this._controls = [], this._frame && (this._frame.cancel(), this._frame = null), this._renderTaskQueue.clear(), this._domRenderTaskQueue.clear(), this.style && this.style.destroy(), this.painter.destroy(), this.handlers && this.handlers.destroy(), this.handlers = void 0, this.setStyle(null), void 0 !== e.window && (e.window.removeEventListener("resize", this._onWindowResize, !1), e.window.removeEventListener("orientationchange", this._onWindowResize, !1), e.window.removeEventListener("webkitfullscreenchange", this._onWindowResize, !1), e.window.removeEventListener("online", this._onWindowOnline, !1), e.window.removeEventListener("visibilitychange", this._onVisibilityChange, !1)); const t = this.painter.context.gl.getExtension("WEBGL_lose_context"); t && t.loseContext(), this._canvas.removeEventListener("webglcontextlost", this._contextLost, !1), this._canvas.removeEventListener("webglcontextrestored", this._contextRestored, !1), this._canvasContainer.remove(), this._controlContainer.remove(), this._missingCSSCanary.remove(), this._canvas = void 0, this._canvasContainer = void 0, this._controlContainer = void 0, this._missingCSSCanary = void 0, this._container.classList.remove("mapboxgl-map"), this._container.removeEventListener("scroll", this._onMapScroll, !1), e.removeAuthState(this.painter.context.gl), this._removed = !0, this.fire(new e.Event("remove")); } triggerRepaint() { this._triggerFrame(!0); } _triggerFrame(t) { this._renderNextFrame = this._renderNextFrame || t, this.style && !this._frame && (this._frame = e.exported.frame((e => { const t = !!this._renderNextFrame; this._frame = null, this._renderNextFrame = null, t && this._render(e); }))); } _preloadTiles(t) { const i = this.style ? Object.values(this.style._sourceCaches) : []; return e.asyncAll(i, ((e, i) => e._preloadTiles(t, i)), (() => { this.triggerRepaint(); })), this } _onWindowOnline() { this._update(); } _onWindowResize(e) { this._trackResize && this.resize({ originalEvent: e })._update(); } _onVisibilityChange() { "hidden" === e.window.document.visibilityState && this._visibilityHidden++; } get showTileBoundaries() { return !!this._showTileBoundaries } set showTileBoundaries(e) { this._showTileBoundaries !== e && (this._showTileBoundaries = e, this._update()); } get showTerrainWireframe() { return !!this._showTerrainWireframe } set showTerrainWireframe(e) { this._showTerrainWireframe !== e && (this._showTerrainWireframe = e, this._update()); } get speedIndexTiming() { return !!this._speedIndexTiming } set speedIndexTiming(e) { this._speedIndexTiming !== e && (this._speedIndexTiming = e, this._update()); } get showPadding() { return !!this._showPadding } set showPadding(e) { this._showPadding !== e && (this._showPadding = e, this._update()); } get showCollisionBoxes() { return !!this._showCollisionBoxes } set showCollisionBoxes(e) { this._showCollisionBoxes !== e && (this._showCollisionBoxes = e, e ? this.style._generateCollisionBoxes() : this._update()); } get showOverdrawInspector() { return !!this._showOverdrawInspector } set showOverdrawInspector(e) { this._showOverdrawInspector !== e && (this._showOverdrawInspector = e, this._update()); } get repaint() { return !!this._repaint } set repaint(e) { this._repaint !== e && (this._repaint = e, this.triggerRepaint()); } get vertices() { return !!this._vertices } set vertices(e) { this._vertices = e, this._update(); } get showTileAABBs() { return !!this._showTileAABBs } set showTileAABBs(e) { this._showTileAABBs !== e && (this._showTileAABBs = e, e && this._update()); } _setCacheLimits(t, i) { e.setCacheLimits(t, i); } get version() { return e.version } }, NavigationControl: class { constructor(t) { this.options = e.extend({}, hn, t), this._container = n("div", "mapboxgl-ctrl mapboxgl-ctrl-group"), this._container.addEventListener("contextmenu", (e => e.preventDefault())), this.options.showZoom && (e.bindAll(["_setButtonTitle", "_updateZoomButtons"], this), this._zoomInButton = this._createButton("mapboxgl-ctrl-zoom-in", (e => { this._map && this._map.zoomIn({}, { originalEvent: e }); })), n("span", "mapboxgl-ctrl-icon", this._zoomInButton).setAttribute("aria-hidden", "true"), this._zoomOutButton = this._createButton("mapboxgl-ctrl-zoom-out", (e => { this._map && this._map.zoomOut({}, { originalEvent: e }); })), n("span", "mapboxgl-ctrl-icon", this._zoomOutButton).setAttribute("aria-hidden", "true")), this.options.showCompass && (e.bindAll(["_rotateCompassArrow"], this), this._compass = this._createButton("mapboxgl-ctrl-compass", (e => { const t = this._map; t && (this.options.visualizePitch ? t.resetNorthPitch({}, { originalEvent: e }) : t.resetNorth({}, { originalEvent: e })); })), this._compassIcon = n("span", "mapboxgl-ctrl-icon", this._compass), this._compassIcon.setAttribute("aria-hidden", "true")); } _updateZoomButtons() { const e = this._map; if (!e) return; const t = e.getZoom(), i = t === e.getMaxZoom(), o = t === e.getMinZoom(); this._zoomInButton.disabled = i, this._zoomOutButton.disabled = o, this._zoomInButton.setAttribute("aria-disabled", i.toString()), this._zoomOutButton.setAttribute("aria-disabled", o.toString()); } _rotateCompassArrow() { const e = this._map; if (!e) return; const t = this.options.visualizePitch ? `scale(${1/Math.pow(Math.cos(e.transform.pitch*(Math.PI/180)),.5)}) rotateX(${e.transform.pitch}deg) rotateZ(${e.transform.angle*(180/Math.PI)}deg)` : `rotate(${e.transform.angle*(180/Math.PI)}deg)`; e._requestDomTask((() => { this._compassIcon && (this._compassIcon.style.transform = t); })); } onAdd(e) { return this._map = e, this.options.showZoom && (this._setButtonTitle(this._zoomInButton, "ZoomIn"), this._setButtonTitle(this._zoomOutButton, "ZoomOut"), e.on("zoom", this._updateZoomButtons), this._updateZoomButtons()), this.options.showCompass && (this._setButtonTitle(this._compass, "ResetBearing"), this.options.visualizePitch && e.on("pitch", this._rotateCompassArrow), e.on("rotate", this._rotateCompassArrow), this._rotateCompassArrow(), this._handler = new un(e, this._compass, this.options.visualizePitch)), this._container } onRemove() { const e = this._map; e && (this._container.remove(), this.options.showZoom && e.off("zoom", this._updateZoomButtons), this.options.showCompass && (this.options.visualizePitch && e.off("pitch", this._rotateCompassArrow), e.off("rotate", this._rotateCompassArrow), this._handler && this._handler.off(), this._handler = void 0), this._map = void 0); } _createButton(e, t) { const i = n("button", e, this._container); return i.type = "button", i.addEventListener("click", t), i } _setButtonTitle(e, t) { if (!this._map) return; const i = this._map._getUIString(`NavigationControl.${t}`); e.setAttribute("aria-label", i), e.firstElementChild && e.firstElementChild.setAttribute("title", i); } }, GeolocateControl: class extends e.Evented { constructor(t) { super(), this.options = e.extend({ geolocation: e.window.navigator.geolocation }, _n, t), e.bindAll(["_onSuccess", "_onError", "_onZoom", "_finish", "_setupUI", "_updateCamera", "_updateMarker", "_updateMarkerRotation", "_onDeviceOrientation"], this), this._updateMarkerRotationThrottled = Jo(this._updateMarkerRotation, 20), this._numberOfWatches = 0; } onAdd(e) { return this._map = e, this._container = n("div", "mapboxgl-ctrl mapboxgl-ctrl-group"), this._checkGeolocationSupport(this._setupUI), this._container } onRemove() { void 0 !== this._geolocationWatchID && (this.options.geolocation.clearWatch(this._geolocationWatchID), this._geolocationWatchID = void 0), this.options.showUserLocation && this._userLocationDotMarker && this._userLocationDotMarker.remove(), this.options.showAccuracyCircle && this._accuracyCircleMarker && this._accuracyCircleMarker.remove(), this._container.remove(), this._map.off("zoom", this._onZoom), this._map = void 0, this._numberOfWatches = 0, this._noTimeout = !1; } _checkGeolocationSupport(t) { const i = (e = !!this.options.geolocation) => { this._supportsGeolocation = e, t(e); }; void 0 !== this._supportsGeolocation ? t(this._supportsGeolocation) : void 0 !== e.window.navigator.permissions ? e.window.navigator.permissions.query({ name: "geolocation" }).then((e => i("denied" !== e.state))).catch((() => i())) : i(); } _isOutOfMapMaxBounds(e) { const t = this._map.getMaxBounds(), i = e.coords; return !!t && (i.longitude < t.getWest() || i.longitude > t.getEast() || i.latitude < t.getSouth() || i.latitude > t.getNorth()) } _setErrorState() { switch (this._watchState) { case "WAITING_ACTIVE": this._watchState = "ACTIVE_ERROR", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"); break; case "ACTIVE_LOCK": this._watchState = "ACTIVE_ERROR", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"); break; case "BACKGROUND": this._watchState = "BACKGROUND_ERROR", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"); } } _onSuccess(t) { if (this._map) { if (this._isOutOfMapMaxBounds(t)) return this._setErrorState(), this.fire(new e.Event("outofmaxbounds", t)), this._updateMarker(), void this._finish(); if (this.options.trackUserLocation) switch (this._lastKnownPosition = t, this._watchState) { case "WAITING_ACTIVE": case "ACTIVE_LOCK": case "ACTIVE_ERROR": this._watchState = "ACTIVE_LOCK", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active"); break; case "BACKGROUND": case "BACKGROUND_ERROR": this._watchState = "BACKGROUND", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"); } this.options.showUserLocation && "OFF" !== this._watchState && this._updateMarker(t), this.options.trackUserLocation && "ACTIVE_LOCK" !== this._watchState || this._updateCamera(t), this.options.showUserLocation && this._dotElement.classList.remove("mapboxgl-user-location-dot-stale"), this.fire(new e.Event("geolocate", t)), this._finish(); } } _updateCamera(t) { const i = new e.LngLat(t.coords.longitude, t.coords.latitude), o = t.coords.accuracy, r = this._map.getBearing(), n = e.extend({ bearing: r }, this.options.fitBoundsOptions); this._map.fitBounds(i.toBounds(o), n, { geolocateSource: !0 }); } _updateMarker(t) { if (t) { const i = new e.LngLat(t.coords.longitude, t.coords.latitude); this._accuracyCircleMarker.setLngLat(i).addTo(this._map), this._userLocationDotMarker.setLngLat(i).addTo(this._map), this._accuracy = t.coords.accuracy, this.options.showUserLocation && this.options.showAccuracyCircle && this._updateCircleRadius(); } else this._userLocationDotMarker.remove(), this._accuracyCircleMarker.remove(); } _updateCircleRadius() { const t = this._map.transform, i = e.mercatorZfromAltitude(1, t._center.lat) * t.worldSize, o = Math.ceil(2 * this._accuracy * i); this._circleElement.style.width = `${o}px`, this._circleElement.style.height = `${o}px`; } _onZoom() { this.options.showUserLocation && this.options.showAccuracyCircle && this._updateCircleRadius(); } _updateMarkerRotation() { this._userLocationDotMarker && "number" == typeof this._heading ? (this._userLocationDotMarker.setRotation(this._heading), this._dotElement.classList.add("mapboxgl-user-location-show-heading")) : (this._dotElement.classList.remove("mapboxgl-user-location-show-heading"), this._userLocationDotMarker.setRotation(0)); } _onError(t) { if (this._map) { if (this.options.trackUserLocation) if (1 === t.code) { this._watchState = "OFF", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"), this._geolocateButton.disabled = !0; const e = this._map._getUIString("GeolocateControl.LocationNotAvailable"); this._geolocateButton.setAttribute("aria-label", e), this._geolocateButton.firstElementChild && this._geolocateButton.firstElementChild.setAttribute("title", e), void 0 !== this._geolocationWatchID && this._clearWatch(); } else { if (3 === t.code && this._noTimeout) return; this._setErrorState(); } "OFF" !== this._watchState && this.options.showUserLocation && this._dotElement.classList.add("mapboxgl-user-location-dot-stale"), this.fire(new e.Event("error", t)), this._finish(); } } _finish() { this._timeoutId && clearTimeout(this._timeoutId), this._timeoutId = void 0; } _setupUI(t) { if (void 0 !== this._map) { if (this._container.addEventListener("contextmenu", (e => e.preventDefault())), this._geolocateButton = n("button", "mapboxgl-ctrl-geolocate", this._container), n("span", "mapboxgl-ctrl-icon", this._geolocateButton).setAttribute("aria-hidden", "true"), this._geolocateButton.type = "button", !1 === t) { e.warnOnce("Geolocation support is not available so the GeolocateControl will be disabled."); const t = this._map._getUIString("GeolocateControl.LocationNotAvailable"); this._geolocateButton.disabled = !0, this._geolocateButton.setAttribute("aria-label", t), this._geolocateButton.firstElementChild && this._geolocateButton.firstElementChild.setAttribute("title", t); } else { const e = this._map._getUIString("GeolocateControl.FindMyLocation"); this._geolocateButton.setAttribute("aria-label", e), this._geolocateButton.firstElementChild && this._geolocateButton.firstElementChild.setAttribute("title", e); } this.options.trackUserLocation && (this._geolocateButton.setAttribute("aria-pressed", "false"), this._watchState = "OFF"), this.options.showUserLocation && (this._dotElement = n("div", "mapboxgl-user-location"), this._dotElement.appendChild(n("div", "mapboxgl-user-location-dot")), this._dotElement.appendChild(n("div", "mapboxgl-user-location-heading")), this._userLocationDotMarker = new on({ element: this._dotElement, rotationAlignment: "map", pitchAlignment: "map" }), this._circleElement = n("div", "mapboxgl-user-location-accuracy-circle"), this._accuracyCircleMarker = new on({ element: this._circleElement, pitchAlignment: "map" }), this.options.trackUserLocation && (this._watchState = "OFF"), this._map.on("zoom", this._onZoom)), this._geolocateButton.addEventListener("click", this.trigger.bind(this)), this._setup = !0, this.options.trackUserLocation && this._map.on("movestart", (t => { t.geolocateSource || "ACTIVE_LOCK" !== this._watchState || t.originalEvent && "resize" === t.originalEvent.type || (this._watchState = "BACKGROUND", this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this.fire(new e.Event("trackuserlocationend"))); })); } } _onDeviceOrientation(e) { this._userLocationDotMarker && (e.webkitCompassHeading ? this._heading = e.webkitCompassHeading : !0 === e.absolute && (this._heading = -1 * e.alpha), this._updateMarkerRotationThrottled()); } trigger() { if (!this._setup) return e.warnOnce("Geolocate control triggered before added to a map"), !1; if (this.options.trackUserLocation) { switch (this._watchState) { case "OFF": this._watchState = "WAITING_ACTIVE", this.fire(new e.Event("trackuserlocationstart")); break; case "WAITING_ACTIVE": case "ACTIVE_LOCK": case "ACTIVE_ERROR": case "BACKGROUND_ERROR": this._numberOfWatches--, this._noTimeout = !1, this._watchState = "OFF", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"), this.fire(new e.Event("trackuserlocationend")); break; case "BACKGROUND": this._watchState = "ACTIVE_LOCK", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"), this._lastKnownPosition && this._updateCamera(this._lastKnownPosition), this.fire(new e.Event("trackuserlocationstart")); } switch (this._watchState) { case "WAITING_ACTIVE": this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active"); break; case "ACTIVE_LOCK": this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active"); break; case "ACTIVE_ERROR": this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"); break; case "BACKGROUND": this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"); break; case "BACKGROUND_ERROR": this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error"); } if ("OFF" === this._watchState && void 0 !== this._geolocationWatchID) this._clearWatch(); else if (void 0 === this._geolocationWatchID) { let e; this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.setAttribute("aria-pressed", "true"), this._numberOfWatches++, this._numberOfWatches > 1 ? (e = { maximumAge: 6e5, timeout: 0 }, this._noTimeout = !0) : (e = this.options.positionOptions, this._noTimeout = !1), this._geolocationWatchID = this.options.geolocation.watchPosition(this._onSuccess, this._onError, e), this.options.showUserHeading && this._addDeviceOrientationListener(); } } else this.options.geolocation.getCurrentPosition(this._onSuccess, this._onError, this.options.positionOptions), this._timeoutId = setTimeout(this._finish, 1e4); return !0 } _addDeviceOrientationListener() { const t = () => { e.window.addEventListener("ondeviceorientationabsolute" in e.window ? "deviceorientationabsolute" : "deviceorientation", this._onDeviceOrientation); }; void 0 !== e.window.DeviceMotionEvent && "function" == typeof e.window.DeviceMotionEvent.requestPermission ? DeviceOrientationEvent.requestPermission().then((e => { "granted" === e && t(); })).catch(console.error) : t(); } _clearWatch() { this.options.geolocation.clearWatch(this._geolocationWatchID), e.window.removeEventListener("deviceorientation", this._onDeviceOrientation), e.window.removeEventListener("deviceorientationabsolute", this._onDeviceOrientation), this._geolocationWatchID = void 0, this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.setAttribute("aria-pressed", "false"), this.options.showUserLocation && this._updateMarker(null); } }, AttributionControl: Kr, ScaleControl: class { constructor(t) { this.options = e.extend({}, dn, t), function() { try { return new Intl.NumberFormat("en", { style: "unit", unitDisplay: "narrow", unit: "meter" }), !0 } catch (e) { return !1 } }() || (this._setScale = pn.bind(this)), e.bindAll(["_update", "_setScale", "setUnit"], this); } getDefaultPosition() { return "bottom-left" } _update() { const e = this.options.maxWidth || 100, t = this._map, i = t._containerHeight / 2, o = t._containerWidth / 2 - e / 2, r = t.unproject([o, i]), n = t.unproject([o + e, i]), s = r.distanceTo(n); if ("imperial" === this.options.unit) { const t = 3.2808 * s; t > 5280 ? this._setScale(e, t / 5280, "mile") : this._setScale(e, t, "foot"); } else "nautical" === this.options.unit ? this._setScale(e, s / 1852, "nautical-mile") : s >= 1e3 ? this._setScale(e, s / 1e3, "kilometer") : this._setScale(e, s, "meter"); } _setScale(e, t, i) { const o = mn(t), r = o / t; this._map._requestDomTask((() => { this._container.style.width = e * r + "px", this._container.innerHTML = "nautical-mile" !== i ? new Intl.NumberFormat(this._language, { style: "unit", unitDisplay: "narrow", unit: i }).format(o) : `${o} nm`; })); } onAdd(e) { return this._map = e, this._language = e.getLanguage(), this._container = n("div", "mapboxgl-ctrl mapboxgl-ctrl-scale", e.getContainer()), this._container.dir = "auto", this._map.on("move", this._update), this._update(), this._container } onRemove() { this._container.remove(), this._map.off("move", this._update), this._map = void 0; } _setLanguage(e) { this._language = e, this._update(); } setUnit(e) { this.options.unit = e, this._update(); } }, FullscreenControl: class { constructor(t) { this._fullscreen = !1, t && t.container && (t.container instanceof e.window.HTMLElement ? this._container = t.container : e.warnOnce("Full screen control 'container' must be a DOM element.")), e.bindAll(["_onClickFullscreen", "_changeIcon"], this), "onfullscreenchange" in e.window.document ? this._fullscreenchange = "fullscreenchange" : "onwebkitfullscreenchange" in e.window.document && (this._fullscreenchange = "webkitfullscreenchange"); } onAdd(t) { return this._map = t, this._container || (this._container = this._map.getContainer()), this._controlContainer = n("div", "mapboxgl-ctrl mapboxgl-ctrl-group"), this._checkFullscreenSupport() ? this._setupUI() : (this._controlContainer.style.display = "none", e.warnOnce("This device does not support fullscreen mode.")), this._controlContainer } onRemove() { this._controlContainer.remove(), this._map = null, e.window.document.removeEventListener(this._fullscreenchange, this._changeIcon); } _checkFullscreenSupport() { return !(!e.window.document.fullscreenEnabled && !e.window.document.webkitFullscreenEnabled) } _setupUI() { const t = this._fullscreenButton = n("button", "mapboxgl-ctrl-fullscreen", this._controlContainer); n("span", "mapboxgl-ctrl-icon", t).setAttribute("aria-hidden", "true"), t.type = "button", this._updateTitle(), this._fullscreenButton.addEventListener("click", this._onClickFullscreen), e.window.document.addEventListener(this._fullscreenchange, this._changeIcon); } _updateTitle() { const e = this._getTitle(); this._fullscreenButton.setAttribute("aria-label", e), this._fullscreenButton.firstElementChild && this._fullscreenButton.firstElementChild.setAttribute("title", e); } _getTitle() { return this._map._getUIString(this._isFullscreen() ? "FullscreenControl.Exit" : "FullscreenControl.Enter") } _isFullscreen() { return this._fullscreen } _changeIcon() { (e.window.document.fullscreenElement || e.window.document.webkitFullscreenElement) === this._container !== this._fullscreen && (this._fullscreen = !this._fullscreen, this._fullscreenButton.classList.toggle("mapboxgl-ctrl-shrink"), this._fullscreenButton.classList.toggle("mapboxgl-ctrl-fullscreen"), this._updateTitle()); } _onClickFullscreen() { this._isFullscreen() ? e.window.document.exitFullscreen ? e.window.document.exitFullscreen() : e.window.document.webkitCancelFullScreen && e.window.document.webkitCancelFullScreen() : this._container.requestFullscreen ? this._container.requestFullscreen() : this._container.webkitRequestFullscreen && this._container.webkitRequestFullscreen(); } }, Popup: class extends e.Evented { constructor(t) { super(), this.options = e.extend(Object.create(rn), t), e.bindAll(["_update", "_onClose", "remove", "_onMouseEvent"], this), this._classList = new Set(t && t.className ? t.className.trim().split(/\s+/) : []); } addTo(t) { return this._map && this.remove(), this._map = t, this.options.closeOnClick && t.on("preclick", this._onClose), this.options.closeOnMove && t.on("move", this._onClose), t.on("remove", this.remove), this._update(), t._addPopup(this), this._focusFirstElement(), this._trackPointer ? (t.on("mousemove", this._onMouseEvent), t.on("mouseup", this._onMouseEvent), t._canvasContainer.classList.add("mapboxgl-track-pointer")) : t.on("move", this._update), this.fire(new e.Event("open")), this } isOpen() { return !!this._map } remove() { this._content && this._content.remove(), this._container && (this._container.remove(), this._container = void 0); const t = this._map; return t && (t.off("move", this._update), t.off("move", this._onClose), t.off("preclick", this._onClose), t.off("click", this._onClose), t.off("remove", this.remove), t.off("mousemove", this._onMouseEvent), t.off("mouseup", this._onMouseEvent), t.off("drag", this._onMouseEvent), t._canvasContainer && t._canvasContainer.classList.remove("mapboxgl-track-pointer"), t._removePopup(this), this._map = void 0), this.fire(new e.Event("close")), this } getLngLat() { return this._lngLat } setLngLat(t) { this._lngLat = e.LngLat.convert(t), this._pos = null, this._trackPointer = !1, this._update(); const i = this._map; return i && (i.on("move", this._update), i.off("mousemove", this._onMouseEvent), i._canvasContainer.classList.remove("mapboxgl-track-pointer")), this } trackPointer() { this._trackPointer = !0, this._pos = null, this._update(); const e = this._map; return e && (e.off("move", this._update), e.on("mousemove", this._onMouseEvent), e.on("drag", this._onMouseEvent), e._canvasContainer.classList.add("mapboxgl-track-pointer")), this } getElement() { return this._container } setText(t) { return this.setDOMContent(e.window.document.createTextNode(t)) } setHTML(t) { const i = e.window.document.createDocumentFragment(), o = e.window.document.createElement("body"); let r; for (o.innerHTML = t; r = o.firstChild, r;) i.appendChild(r); return this.setDOMContent(i) } getMaxWidth() { return this._container && this._container.style.maxWidth } setMaxWidth(e) { return this.options.maxWidth = e, this._update(), this } setDOMContent(e) { let t = this._content; if (t) for (; t.hasChildNodes();) t.firstChild && t.removeChild(t.firstChild); else t = this._content = n("div", "mapboxgl-popup-content", this._container || void 0); if (t.appendChild(e), this.options.closeButton) { const e = this._closeButton = n("button", "mapboxgl-popup-close-button", t); e.type = "button", e.setAttribute("aria-label", "Close popup"), e.setAttribute("aria-hidden", "true"), e.innerHTML = "×", e.addEventListener("click", this._onClose); } return this._update(), this._focusFirstElement(), this } addClassName(e) { return this._classList.add(e), this._updateClassList(), this } removeClassName(e) { return this._classList.delete(e), this._updateClassList(), this } setOffset(e) { return this.options.offset = e, this._update(), this } toggleClassName(e) { let t; return this._classList.delete(e) ? t = !1 : (this._classList.add(e), t = !0), this._updateClassList(), t } _onMouseEvent(e) { this._update(e.point); } _getAnchor(e) { if (this.options.anchor) return this.options.anchor; const t = this._map, i = this._container, o = this._pos; if (!t || !i || !o) return "bottom"; const r = i.offsetWidth, n = i.offsetHeight, s = o.x < r / 2, a = o.x > t.transform.width - r / 2; if (o.y + e < n) return s ? "top-left" : a ? "top-right" : "top"; if (o.y > t.transform.height - n) { if (s) return "bottom-left"; if (a) return "bottom-right" } return s ? "left" : a ? "right" : "bottom" } _updateClassList() { const e = this._container; if (!e) return; const t = [...this._classList]; t.push("mapboxgl-popup"), this._anchor && t.push(`mapboxgl-popup-anchor-${this._anchor}`), this._trackPointer && t.push("mapboxgl-popup-track-pointer"), e.className = t.join(" "); } _update(t) { const i = this._map, o = this._content; if (!i || !this._lngLat && !this._trackPointer || !o) return; let r = this._container; if (r || (r = this._container = n("div", "mapboxgl-popup", i.getContainer()), this._tip = n("div", "mapboxgl-popup-tip", r), r.appendChild(o)), this.options.maxWidth && r.style.maxWidth !== this.options.maxWidth && (r.style.maxWidth = this.options.maxWidth), i.transform.renderWorldCopies && !this._trackPointer && (this._lngLat = en(this._lngLat, this._pos, i.transform)), !this._trackPointer || t) { const e = this._pos = this._trackPointer && t ? t : i.project(this._lngLat), o = sn(this.options.offset), r = this._anchor = this._getAnchor(o.y), n = sn(this.options.offset, r), s = e.add(n).round(); i._requestDomTask((() => { this._container && r && (this._container.style.transform = `${tn[r]} translate(${s.x}px,${s.y}px)`); })); } if (!this._marker && i._showingGlobe()) { const t = e.isLngLatBehindGlobe(i.transform, this._lngLat) ? 0 : 1; this._setOpacity(t); } this._updateClassList(); } _focusFirstElement() { if (!this.options.focusAfterOpen || !this._container) return; const e = this._container.querySelector(nn); e && e.focus(); } _onClose() { this.remove(); } _setOpacity(e) { this._container && (this._container.style.opacity = `${e}`), this._content && (this._content.style.pointerEvents = e ? "auto" : "none"); } }, Marker: on, Style: Qt, LngLat: e.LngLat, LngLatBounds: e.LngLatBounds, Point: e.pointGeometry, MercatorCoordinate: e.MercatorCoordinate, FreeCameraOptions: Zo, Evented: e.Evented, config: e.config, prewarm: function() { je().acquire(Ue); }, clearPrewarmedResources: function() { const e = Ge; e && (e.isPreloaded() && 1 === e.numActive() ? (e.release(Ue), Ge = null) : console.warn("Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()")); }, get accessToken() { return e.config.ACCESS_TOKEN }, set accessToken(t) { e.config.ACCESS_TOKEN = t; }, get baseApiUrl() { return e.config.API_URL }, set baseApiUrl(t) { e.config.API_URL = t; }, get workerCount() { return Ne.workerCount }, set workerCount(e) { Ne.workerCount = e; }, get maxParallelImageRequests() { return e.config.MAX_PARALLEL_IMAGE_REQUESTS }, set maxParallelImageRequests(t) { e.config.MAX_PARALLEL_IMAGE_REQUESTS = t; }, clearStorage(t) { e.clearTileCache(t); }, workerUrl: "", workerClass: null, setNow: e.exported.setNow, restoreNow: e.exported.restoreNow }; return fn })); // var mapboxgl$1 = mapboxgl; return mapboxgl$1; })); //# sourceMappingURL=mapbox-gl.js.map