UNPKG

@maptiler/sdk

Version:

The Javascript & TypeScript map SDK tailored for MapTiler Cloud

2,617 lines 314 kB
var Da = Object.defineProperty; var Ur = (r) => { throw TypeError(r); }; var qa = (r, e, t) => e in r ? Da(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t; var L = (r, e, t) => qa(r, typeof e != "symbol" ? e + "" : e, t), qt = (r, e, t) => e.has(r) || Ur("Cannot " + t); var M = (r, e, t) => (qt(r, e, "read from private field"), t ? t.call(r) : e.get(r)), he = (r, e, t) => e.has(r) ? Ur("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(r) : e.set(r, t), Ce = (r, e, t, n) => (qt(r, e, "write to private field"), n ? n.call(r, t) : e.set(r, t), t), V = (r, e, t) => (qt(r, e, "access private method"), t); import S from "maplibre-gl"; import { Language as Ba, getLanguageInfoFromCode as Gr, config as Bt, MapStyle as Ge, mapStylePresetList as Ut, expandMapStyle as Ua, MapStyleVariant as Ga, ReferenceMapStyle as Va, toLanguageInfo as Vr, getLanguageInfoFromFlag as Ha, geolocation as Hr } from "@maptiler/client"; import { MapStyle as nc, MapStyleVariant as ac, ReferenceMapStyle as oc, ServiceError as ic, areSameLanguages as sc, bufferToPixelDataBrowser as lc, circumferenceAtLatitude as uc, coordinates as cc, data as pc, elevation as fc, expandMapStyle as dc, geocoding as yc, geolocation as mc, getAutoLanguage as hc, getBufferToPixelDataParser as gc, getLanguageInfoFromCode as vc, getLanguageInfoFromFlag as bc, getLanguageInfoFromKey as wc, getTileCache as Sc, isLanguageInfo as xc, mapStylePresetList as kc, math as Lc, misc as Cc, staticMaps as Ac, styleToStyle as Tc, toLanguageInfo as Ic } from "@maptiler/client"; import Ka from "events"; import { v4 as Wa } from "uuid"; import { Base64 as Za } from "js-base64"; const _ = { /** * Language mode to display labels in both the local language and the language of the visitor's device, concatenated. * Note that if those two languages are the same, labels won't be duplicated. */ VISITOR: { code: null, flag: "visitor", name: "Visitor", latin: !0, isMode: !0, geocoding: !1 }, /** * Language mode to display labels in both the local language and English, concatenated. * Note that if those two languages are the same, labels won't be duplicated. */ VISITOR_ENGLISH: { code: null, flag: "visitor_en", name: "Visitor English", latin: !0, isMode: !0, geocoding: !1 }, /** * Language mode to display labels in a language enforced in the style. */ STYLE: { code: null, flag: "style", name: "Style", latin: !1, isMode: !0, geocoding: !1 }, /** * Language mode to display labels in a language enforced in the style. The language cannot be further modified. */ STYLE_LOCK: { code: null, flag: "style_lock", name: "Style Lock", latin: !1, isMode: !0, geocoding: !1 }, ...Ba }; function Kr() { if (typeof navigator > "u") { const e = Intl.DateTimeFormat().resolvedOptions().locale.split("-")[0], t = Gr(e); return t || _.ENGLISH; } return Array.from(new Set(navigator.languages.map((e) => e.split("-")[0]))).map((e) => Gr(e)).filter((e) => e)[0] ?? _.LOCAL; } const G = { maptilerLogoURL: "https://api.maptiler.com/resources/logo.svg", maptilerURL: "https://www.maptiler.com/", maptilerApiHost: "api.maptiler.com", telemetryURL: "https://api.maptiler.com/metrics", rtlPluginURL: "https://cdn.maptiler.com/mapbox-gl-rtl-text/v0.2.3/mapbox-gl-rtl-text.min.js", primaryLanguage: _.STYLE, secondaryLanguage: _.LOCAL, terrainSourceURL: "https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json", terrainSourceId: "maptiler-terrain" }; Object.freeze(G); const gr = Wa(); class Ja extends Ka { constructor() { super(...arguments); /** * The primary language. By default, the language of the web browser is used. */ L(this, "primaryLanguage", G.primaryLanguage); /** * The secondary language, to overwrite the default language defined in the map style. * This settings is highly dependant on the style compatibility and may not work in most cases. */ L(this, "secondaryLanguage"); /** * Setting on whether of not the SDK runs with a session logic. * A "session" is started at the initialization of the SDK and finished when the browser * page is being refreshed. * When `session` is enabled (default: true), the extra URL param `mtsid` is added to queries * on the MapTiler Cloud API. This allows MapTiler to enable "session based billing". */ L(this, "session", !0); /** * Enables client-side caching of requests for tiles and fonts. * The cached requests persist multiple browser sessions and will be reused when possible. * Works only for requests to the MapTiler Cloud API when sessions are enabled. */ L(this, "caching", !0); /** * Telemetry is enabled by default but can be opted-out by setting this value to `false`. * The telemetry is very valuable to the team at MapTiler because it shares information * about where to add the extra effort. It also helps spotting some incompatibility issues * that may arise between the SDK and a specific version of a module. * * It consists in sending metrics about usage of the following features: * - SDK version [string] * - API key [string] * - MapTiler sesion ID (if opted-in) [string] * - if tile caching is enabled [boolean] * - if language specified at initialization [boolean] * - if terrain is activated at initialization [boolean] * - if globe projection is activated at initialization [boolean] * * In addition, each official module will be added to a list, alongside its version number. */ L(this, "telemetry", !0); /** * Unit to be used */ L(this, "_unit", "metric"); /** * MapTiler Cloud API key */ L(this, "_apiKey", ""); } /** * Set the unit system */ set unit(t) { this._unit = t, this.emit("unit", t); } /** * Get the unit system */ get unit() { return this._unit; } /** * Set the MapTiler Cloud API key */ set apiKey(t) { this._apiKey = t, Bt.apiKey = t, this.emit("apiKey", t); } /** * Get the MapTiler Cloud API key */ get apiKey() { return this._apiKey; } /** * Set a the custom fetch function to replace the default one */ set fetch(t) { Bt.fetch = t; } /** * Get the fetch fucntion */ get fetch() { return Bt.fetch; } } const F = new Ja(), er = "localcache_source", tr = "localcache", Ya = "maptiler_sdk", Xa = 1e3, Qa = 100, rr = typeof caches < "u", { addProtocol: Wr } = S; function eo(r, e) { if (rr && F.caching && F.session && r.host === G.maptilerApiHost) { if (e === "Source" && r.href.includes("tiles.json")) return r.href.replace("https://", `${er}://`); if (e === "Tile" || e === "Glyphs") return r.href.replace("https://", `${tr}://`); } return r.href; } let Gt; async function En() { return Gt || (Gt = await caches.open(Ya)), Gt; } let Zr = 0; async function to() { const r = await En(), e = await r.keys(), t = e.slice(0, Math.max(e.length - Xa, 0)); for (const n of t) r.delete(n); } function ro() { Wr( er, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${er}://`, "https://"); const t = r; t.signal = e.signal; const n = await fetch(r.url, t), a = await n.json(); return a.tiles && a.tiles.length > 0 && (a.tiles[0] += `&last-modified=${n.headers.get("Last-Modified")}`), { data: a, cacheControl: n.headers.get("Cache-Control"), expires: n.headers.get("Expires") }; } ), Wr(tr, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${tr}://`, "https://"); const t = new URL(r.url), n = new URL(t); n.searchParams.delete("mtsid"), n.searchParams.delete("key"); const a = n.toString(), o = new URL(t); o.searchParams.delete("last-modified"); const i = o.toString(), s = async (y) => ({ data: await y.arrayBuffer(), cacheControl: y.headers.get("Cache-Control"), expires: y.headers.get("Expires") }), l = await En(), u = await l.match(a); if (u) return s(u); const c = r; c.signal = e.signal; const p = await fetch(i, c); return p.status >= 200 && p.status < 300 && (l.put(a, p.clone()).catch(() => { }), ++Zr > Qa && (to(), Zr = 0)), s(p); }); } function no() { if (typeof window > "u") return; const r = S.getRTLTextPluginStatus(); if (r === "unavailable" || r === "requested") try { S.setRTLTextPlugin(G.rtlPluginURL, !0); } catch { } } function ao(r, e) { for (const t of r) typeof e[t] == "function" && (e[t] = e[t].bind(e)); } function Jr(r, e) { let t = null; try { t = new URL(r); } catch { return { url: r }; } return t.host === G.maptilerApiHost && (t.searchParams.has("key") || t.searchParams.append("key", F.apiKey), F.session && t.searchParams.append("mtsid", gr)), { url: eo(t, e) }; } function Yr(r) { return (e, t) => { if (r != null) { const n = r(e, t), a = Jr((n == null ? void 0 : n.url) ?? "", t); return { ...n, ...a }; } return Jr(e, t); }; } function Mn() { return Math.random().toString(36).substring(2); } function kt(r) { return /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/gi.test(r); } function oo(r) { try { return JSON.parse(r); } catch { } return null; } function io() { return document.createElement("canvas").getContext("webgl2") ? null : typeof WebGL2RenderingContext < "u" ? "Graphic rendering with WebGL2 has been disabled or is not supported by your graphic card. The map cannot be displayed." : "Your browser does not support graphic rendering with WebGL2. The map cannot be displayed."; } function so(r) { const e = io(); if (!e) return; let t = null; if (typeof r == "string" ? t = document.getElementById(r) : r instanceof HTMLElement && (t = r), !t) throw new Error("The Map container must be provided."); const n = document.createElement("div"); throw n.innerHTML = e, n.classList.add("webgl-warning-div"), t.appendChild(n), new Error(e); } function El(r) { const e = "The WebGL context was lost.", t = r.getContainer(), n = document.createElement("div"); n.innerHTML = e, n.classList.add("webgl-warning-div"), t.appendChild(n); } function Xr(r, e) { return !(!Array.isArray(r) || r.length !== 2 || r[0] !== "get" || typeof r[1] != "string" || e && !r[1].startsWith("name:") || !e && r[1] !== "name"); } function lo(r, e, t) { const n = structuredClone(r), a = (o) => { if (typeof o != "string") for (let i = 0; i < o.length; i += 1) Xr(o[i], t) ? o[i] = structuredClone(e) : a(o[i]); }; return Xr(n, t) ? e : (a(n), n); } function uo(r, e) { const t = e ? /\{name:\S+\}/ : /\{name\}/; return { contains: t.test(r), exactMatch: new RegExp(`^${t.source}$`).test(r) }; } function co(r, e, t) { const n = t ? /\{name:\S+\}/ : /\{name\}/, a = r.split(n); return ["concat", ...a.flatMap((s, l) => l === a.length - 1 ? [s] : [s, e])]; } function po(r) { var n; const e = /\{name(?::(?<language>\S+))?\}/g, t = []; for (; ; ) { const a = e.exec(r); if (!a) break; const o = ((n = a.groups) == null ? void 0 : n.language) ?? null; t.push(o); } return t; } function fo(r) { return !Array.isArray(r) || r.length !== 2 || r[0] !== "get" || typeof r[1] != "string" ? null : r[1].trim() === "name" ? { isLanguage: !0, localization: null } : r[1].trim().startsWith("name:") ? { isLanguage: !0, localization: r[1].trim().split(":").pop() } : null; } function yo(r) { const e = [], t = structuredClone(r), n = (a) => { if (typeof a != "string") for (let o = 0; o < a.length; o += 1) { const i = fo(a[o]); i ? e.push(i.localization) : n(a[o]); } }; return n([t]), e; } function mo(r, e) { const t = []; for (const o of r) { if (o.type !== "symbol") continue; const i = o, { id: s, layout: l } = i; if (!l || !("text-field" in l)) continue; const u = e.getLayoutProperty(s, "text-field"); if (u) if (typeof u == "string") { const c = po(u); t.push(c); } else { const c = yo(u); t.push(c); } } const n = t.flat(), a = { unlocalized: 0, localized: {} }; for (const o of n) o === null ? a.unlocalized += 1 : (o in a.localized || (a.localized[o] = 0), a.localized[o] += 1); return a; } let Ml = class extends S.Marker { addTo(e) { return super.addTo(e); } }; class zl extends S.Popup { addTo(e) { return super.addTo(e); } } class Pl extends S.Style { constructor(e, t = {}) { super(e, t); } } class Rl extends S.CanvasSource { onAdd(e) { super.onAdd(e); } } class $l extends S.GeoJSONSource { onAdd(e) { super.onAdd(e); } } class jl extends S.ImageSource { onAdd(e) { super.onAdd(e); } } class Ol extends S.RasterTileSource { onAdd(e) { super.onAdd(e); } } class Nl extends S.RasterDEMTileSource { onAdd(e) { super.onAdd(e); } } class Fl extends S.VectorTileSource { onAdd(e) { super.onAdd(e); } } class Dl extends S.VideoSource { onAdd(e) { super.onAdd(e); } } class ho extends S.NavigationControl { onAdd(e) { return super.onAdd(e); } } class go extends S.GeolocateControl { onAdd(e) { return super.onAdd(e); } } class ql extends S.AttributionControl { onAdd(e) { return super.onAdd(e); } } class vo extends S.LogoControl { onAdd(e) { return super.onAdd(e); } } class bo extends S.ScaleControl { onAdd(e) { return super.onAdd(e); } } class wo extends S.FullscreenControl { onAdd(e) { return super.onAdd(e); } } class Bl extends S.TerrainControl { onAdd(e) { return super.onAdd(e); } } class Ul extends S.BoxZoomHandler { constructor(e, t) { super(e, t); } } class Gl extends S.ScrollZoomHandler { constructor(e, t) { super(e, t); } } class Vl extends S.CooperativeGesturesHandler { constructor(e, t) { super(e, t); } } class Hl extends S.KeyboardHandler { constructor(e) { super(e); } } class Kl extends S.TwoFingersTouchPitchHandler { constructor(e) { super(e); } } class Wl extends S.MapWheelEvent { constructor(e, t, n) { super(e, t, n); } } class Zl extends S.MapTouchEvent { constructor(e, t, n) { super(e, t, n); } } class Jl extends S.MapMouseEvent { constructor(e, t, n, a = {}) { super(e, t, n, a); } } class Qr extends vo { constructor(t = {}) { super(t); L(this, "logoURL", ""); L(this, "linkURL", ""); this.logoURL = t.logoURL ?? G.maptilerLogoURL, this.linkURL = t.linkURL ?? G.maptilerURL; } onAdd(t) { this._map = t, this._compact = this.options.compact ?? !1, this._container = window.document.createElement("div"), this._container.className = "maplibregl-ctrl"; const n = window.document.createElement("a"); return n.style.backgroundRepeat = "no-repeat", n.style.cursor = "pointer", n.style.display = "block", n.style.height = "23px", n.style.margin = "0 0 -4px -4px", n.style.overflow = "hidden", n.style.width = "88px", n.style.backgroundImage = `url(${this.logoURL})`, n.style.backgroundSize = "100px 30px", n.style.width = "100px", n.style.height = "30px", n.target = "_blank", n.rel = "noopener", n.href = this.linkURL, n.setAttribute("aria-label", "MapTiler logo"), n.setAttribute("rel", "noopener"), this._container.appendChild(n), this._container.style.display = "block", this._map.on("resize", this._updateCompact), this._updateCompact(), this._container; } } var So = 8, xo = { version: { required: !0, type: "enum", values: [ 8 ] }, name: { type: "string" }, metadata: { type: "*" }, center: { type: "array", value: "number" }, centerAltitude: { type: "number" }, zoom: { type: "number" }, bearing: { type: "number", default: 0, period: 360, units: "degrees" }, pitch: { type: "number", default: 0, units: "degrees" }, roll: { type: "number", default: 0, units: "degrees" }, state: { type: "state", default: {} }, light: { type: "light" }, sky: { type: "sky" }, projection: { type: "projection" }, terrain: { type: "terrain" }, sources: { required: !0, type: "sources" }, sprite: { type: "sprite" }, glyphs: { type: "string" }, transition: { type: "transition" }, layers: { required: !0, type: "array", value: "layer" } }, ko = { "*": { type: "source" } }, Lo = [ "source_vector", "source_raster", "source_raster_dem", "source_geojson", "source_video", "source_image" ], Co = { type: { required: !0, 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: !1 }, "*": { type: "*" } }, Ao = { type: { required: !0, 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: !1 }, "*": { type: "*" } }, To = { type: { required: !0, 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: {}, custom: {} }, default: "mapbox" }, redFactor: { type: "number", default: 1 }, blueFactor: { type: "number", default: 1 }, greenFactor: { type: "number", default: 1 }, baseShift: { type: "number", default: 0 }, volatile: { type: "boolean", default: !1 }, "*": { type: "*" } }, Io = { type: { required: !0, type: "enum", values: { geojson: {} } }, data: { required: !0, 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: !1 }, clusterRadius: { type: "number", default: 50, minimum: 0 }, clusterMaxZoom: { type: "number" }, clusterMinPoints: { type: "number" }, clusterProperties: { type: "*" }, lineMetrics: { type: "boolean", default: !1 }, generateId: { type: "boolean", default: !1 }, promoteId: { type: "promoteId" } }, Eo = { type: { required: !0, type: "enum", values: { video: {} } }, urls: { required: !0, type: "array", value: "string" }, coordinates: { required: !0, type: "array", length: 4, value: { type: "array", length: 2, value: "number" } } }, Mo = { type: { required: !0, type: "enum", values: { image: {} } }, url: { required: !0, type: "string" }, coordinates: { required: !0, type: "array", length: 4, value: { type: "array", length: 2, value: "number" } } }, _o = { id: { type: "string", required: !0 }, type: { type: "enum", values: { fill: {}, line: {}, symbol: {}, circle: {}, heatmap: {}, "fill-extrusion": {}, raster: {}, hillshade: {}, "color-relief": {}, background: {} }, required: !0 }, 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" } }, zo = [ "layout_fill", "layout_line", "layout_circle", "layout_heatmap", "layout_fill-extrusion", "layout_symbol", "layout_raster", "layout_hillshade", "layout_color-relief", "layout_background" ], Po = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, Ro = { "fill-sort-key": { type: "number", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, $o = { "circle-sort-key": { type: "number", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, jo = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, Oo = { "line-cap": { type: "enum", values: { butt: {}, round: {}, square: {} }, default: "butt", expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "line-join": { type: "enum", values: { bevel: {}, round: {}, miter: {} }, default: "miter", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "line-miter-limit": { type: "number", default: 2, requires: [ { "line-join": "miter" } ], expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "line-round-limit": { type: "number", default: 1.05, requires: [ { "line-join": "round" } ], expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "line-sort-key": { type: "number", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, No = { "symbol-placement": { type: "enum", values: { point: {}, line: {}, "line-center": {} }, default: "point", expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "symbol-spacing": { type: "number", default: 250, minimum: 1, units: "pixels", requires: [ { "symbol-placement": "line" } ], expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "symbol-avoid-edges": { type: "boolean", default: !1, expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "symbol-sort-key": { type: "number", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "symbol-z-order": { type: "enum", values: { auto: {}, "viewport-y": {}, source: {} }, default: "auto", expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "icon-allow-overlap": { type: "boolean", default: !1, requires: [ "icon-image", { "!": "icon-overlap" } ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "icon-overlap": { type: "enum", values: { never: {}, always: {}, cooperative: {} }, requires: [ "icon-image" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "icon-ignore-placement": { type: "boolean", default: !1, requires: [ "icon-image" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "icon-optional": { type: "boolean", default: !1, requires: [ "icon-image", "text-field" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "icon-rotation-alignment": { type: "enum", values: { map: {}, viewport: {}, auto: {} }, default: "auto", requires: [ "icon-image" ], expression: { interpolated: !1, 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: !0, 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: !1, 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: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "icon-image": { type: "resolvedImage", tokens: !0, expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "icon-rotate": { type: "number", default: 0, period: 360, units: "degrees", requires: [ "icon-image" ], expression: { interpolated: !0, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "icon-padding": { type: "padding", default: [ 2 ], units: "pixels", requires: [ "icon-image" ], expression: { interpolated: !0, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "icon-keep-upright": { type: "boolean", default: !1, requires: [ "icon-image", { "icon-rotation-alignment": "map" }, { "symbol-placement": [ "line", "line-center" ] } ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "icon-offset": { type: "array", value: "number", length: 2, default: [ 0, 0 ], requires: [ "icon-image" ], expression: { interpolated: !0, 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: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "icon-pitch-alignment": { type: "enum", values: { map: {}, viewport: {}, auto: {} }, default: "auto", requires: [ "icon-image" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-pitch-alignment": { type: "enum", values: { map: {}, viewport: {}, auto: {} }, default: "auto", requires: [ "text-field" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-rotation-alignment": { type: "enum", values: { map: {}, viewport: {}, "viewport-glyph": {}, auto: {} }, default: "auto", requires: [ "text-field" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-field": { type: "formatted", default: "", tokens: !0, expression: { interpolated: !1, 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: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "text-size": { type: "number", default: 16, minimum: 0, units: "pixels", requires: [ "text-field" ], expression: { interpolated: !0, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "text-max-width": { type: "number", default: 10, minimum: 0, units: "ems", requires: [ "text-field" ], expression: { interpolated: !0, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "text-line-height": { type: "number", default: 1.2, units: "ems", requires: [ "text-field" ], expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-letter-spacing": { type: "number", default: 0, units: "ems", requires: [ "text-field" ], expression: { interpolated: !0, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "text-justify": { type: "enum", values: { auto: {}, left: {}, center: {}, right: {} }, default: "center", requires: [ "text-field" ], expression: { interpolated: !1, 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: !0, 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: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-variable-anchor-offset": { type: "variableAnchorOffsetCollection", requires: [ "text-field", { "symbol-placement": [ "point" ] } ], expression: { interpolated: !0, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "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: !1, 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: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-writing-mode": { type: "array", value: "enum", values: { horizontal: {}, vertical: {} }, requires: [ "text-field", { "symbol-placement": [ "point" ] } ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-rotate": { type: "number", default: 0, period: 360, units: "degrees", requires: [ "text-field" ], expression: { interpolated: !0, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "text-padding": { type: "number", default: 2, minimum: 0, units: "pixels", requires: [ "text-field" ], expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-keep-upright": { type: "boolean", default: !0, requires: [ "text-field", { "text-rotation-alignment": "map" }, { "symbol-placement": [ "line", "line-center" ] } ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-transform": { type: "enum", values: { none: {}, uppercase: {}, lowercase: {} }, default: "none", requires: [ "text-field" ], expression: { interpolated: !1, 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: !0, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, "text-allow-overlap": { type: "boolean", default: !1, requires: [ "text-field", { "!": "text-overlap" } ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-overlap": { type: "enum", values: { never: {}, always: {}, cooperative: {} }, requires: [ "text-field" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-ignore-placement": { type: "boolean", default: !1, requires: [ "text-field" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "text-optional": { type: "boolean", default: !1, requires: [ "text-field", "icon-image" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, Fo = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, Do = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, qo = { type: "array", value: "*" }, Bo = { type: "enum", values: { "==": {}, "!=": {}, ">": {}, ">=": {}, "<": {}, "<=": {}, in: {}, "!in": {}, all: {}, any: {}, none: {}, has: {}, "!has": {} } }, Uo = { type: "enum", values: { Point: {}, LineString: {}, Polygon: {} } }, Go = { type: "array", minimum: 0, maximum: 24, value: [ "number", "color" ], length: 2 }, Vo = { type: "array", value: "*", minimum: 1 }, Ho = { anchor: { type: "enum", default: "viewport", values: { map: {}, viewport: {} }, "property-type": "data-constant", transition: !1, expression: { interpolated: !1, parameters: [ "zoom" ] } }, position: { type: "array", default: [ 1.15, 210, 30 ], length: 3, value: "number", "property-type": "data-constant", transition: !0, expression: { interpolated: !0, parameters: [ "zoom" ] } }, color: { type: "color", "property-type": "data-constant", default: "#ffffff", expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 }, intensity: { type: "number", "property-type": "data-constant", default: 0.5, minimum: 0, maximum: 1, expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 } }, Ko = { "sky-color": { type: "color", "property-type": "data-constant", default: "#88C6FC", expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 }, "horizon-color": { type: "color", "property-type": "data-constant", default: "#ffffff", expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 }, "fog-color": { type: "color", "property-type": "data-constant", default: "#ffffff", expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 }, "fog-ground-blend": { type: "number", "property-type": "data-constant", default: 0.5, minimum: 0, maximum: 1, expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 }, "horizon-fog-blend": { type: "number", "property-type": "data-constant", default: 0.8, minimum: 0, maximum: 1, expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 }, "sky-horizon-blend": { type: "number", "property-type": "data-constant", default: 0.8, minimum: 0, maximum: 1, expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 }, "atmosphere-blend": { type: "number", "property-type": "data-constant", default: 0.8, minimum: 0, maximum: 1, expression: { interpolated: !0, parameters: [ "zoom" ] }, transition: !0 } }, Wo = { source: { type: "string", required: !0 }, exaggeration: { type: "number", minimum: 0, default: 1 } }, Zo = { type: { type: "projectionDefinition", default: "mercator", "property-type": "data-constant", transition: !1, expression: { interpolated: !0, parameters: [ "zoom" ] } } }, Jo = [ "paint_fill", "paint_line", "paint_circle", "paint_heatmap", "paint_fill-extrusion", "paint_symbol", "paint_raster", "paint_hillshade", "paint_color-relief", "paint_background" ], Yo = { "fill-antialias": { type: "boolean", default: !0, expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "fill-opacity": { type: "number", default: 1, minimum: 0, maximum: 1, transition: !0, expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "fill-color": { type: "color", default: "#000000", transition: !0, requires: [ { "!": "fill-pattern" } ], expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "fill-outline-color": { type: "color", transition: !0, requires: [ { "!": "fill-pattern" }, { "fill-antialias": !0 } ], expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "fill-translate": { type: "array", value: "number", length: 2, default: [ 0, 0 ], transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "fill-translate-anchor": { type: "enum", values: { map: {}, viewport: {} }, default: "map", requires: [ "fill-translate" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "fill-pattern": { type: "resolvedImage", transition: !0, expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "cross-faded-data-driven" } }, Xo = { "line-opacity": { type: "number", default: 1, minimum: 0, maximum: 1, transition: !0, expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "line-color": { type: "color", default: "#000000", transition: !0, requires: [ { "!": "line-pattern" } ], expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "line-translate": { type: "array", value: "number", length: 2, default: [ 0, 0 ], transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "line-translate-anchor": { type: "enum", values: { map: {}, viewport: {} }, default: "map", requires: [ "line-translate" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "line-width": { type: "number", default: 1, minimum: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "line-gap-width": { type: "number", default: 0, minimum: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "line-offset": { type: "number", default: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "line-blur": { type: "number", default: 0, minimum: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "line-dasharray": { type: "array", value: "number", minimum: 0, transition: !0, units: "line widths", requires: [ { "!": "line-pattern" } ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "cross-faded" }, "line-pattern": { type: "resolvedImage", transition: !0, expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "cross-faded-data-driven" }, "line-gradient": { type: "color", transition: !1, requires: [ { "!": "line-dasharray" }, { "!": "line-pattern" }, { source: "geojson", has: { lineMetrics: !0 } } ], expression: { interpolated: !0, parameters: [ "line-progress" ] }, "property-type": "color-ramp" } }, Qo = { "circle-radius": { type: "number", default: 5, minimum: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-color": { type: "color", default: "#000000", transition: !0, expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-blur": { type: "number", default: 0, transition: !0, expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-opacity": { type: "number", default: 1, minimum: 0, maximum: 1, transition: !0, expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-translate": { type: "array", value: "number", length: 2, default: [ 0, 0 ], transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "circle-translate-anchor": { type: "enum", values: { map: {}, viewport: {} }, default: "map", requires: [ "circle-translate" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "circle-pitch-scale": { type: "enum", values: { map: {}, viewport: {} }, default: "map", expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "circle-pitch-alignment": { type: "enum", values: { map: {}, viewport: {} }, default: "viewport", expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "circle-stroke-width": { type: "number", default: 0, minimum: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-sta