UNPKG

@maptiler/sdk

Version:

The Javascript & TypeScript map SDK tailored for MapTiler Cloud

2,616 lines 379 kB
var Eo = Object.defineProperty; var dn = (r) => { throw TypeError(r); }; var To = (r, e, t) => e in r ? Eo(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t; var S = (r, e, t) => To(r, typeof e != "symbol" ? e + "" : e, t), rr = (r, e, t) => e.has(r) || dn("Cannot " + t); var P = (r, e, t) => (rr(r, e, "read from private field"), t ? t.call(r) : e.get(r)), be = (r, e, t) => e.has(r) ? dn("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(r) : e.set(r, t), _e = (r, e, t, n) => (rr(r, e, "write to private field"), n ? n.call(r, t) : e.set(r, t), t), H = (r, e, t) => (rr(r, e, "access private method"), t); import k from "maplibre-gl"; import { Language as _o, getLanguageInfoFromCode as hn, config as nr, MapStyle as et, mapStylePresetList as ar, expandMapStyle as Io, MapStyleVariant as Mo, ReferenceMapStyle as Po, toLanguageInfo as yn, getLanguageInfoFromFlag as Ro, geolocation as mn } from "@maptiler/client"; import { MapStyle as Ip, MapStyleVariant as Mp, ReferenceMapStyle as Pp, ServiceError as Rp, areSameLanguages as zp, bufferToPixelDataBrowser as Fp, canParsePixelData as $p, circumferenceAtLatitude as Op, coordinates as jp, data as Np, elevation as Dp, expandMapStyle as Up, geocoding as Bp, geolocation as qp, getAutoLanguage as Gp, getBufferToPixelDataParser as Vp, getLanguageInfoFromCode as Hp, getLanguageInfoFromFlag as Kp, getLanguageInfoFromKey as Xp, getTileCache as Zp, isLanguageInfo as Yp, mapStylePresetList as Wp, math as Jp, misc as Qp, staticMaps as ef, styleToStyle as tf, toLanguageInfo as rf } from "@maptiler/client"; import zo from "events"; import { v4 as Fo } from "uuid"; import { Base64 as $o } from "js-base64"; const R = { /** * 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 }, ..._o }; function gn() { if (typeof navigator > "u") { const e = Intl.DateTimeFormat().resolvedOptions().locale.split("-")[0], t = hn(e); return t || R.ENGLISH; } return Array.from(new Set(navigator.languages.map((e) => e.split("-")[0]))).map((e) => hn(e)).filter((e) => e)[0] ?? R.LOCAL; } const V = { 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: R.STYLE, secondaryLanguage: R.LOCAL, terrainSourceURL: "https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json", terrainSourceId: "maptiler-terrain" }; Object.freeze(V); const Nr = Fo(); class Oo extends zo { constructor() { super(...arguments); /** * The primary language. By default, the language of the web browser is used. */ S(this, "primaryLanguage", V.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. */ S(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". */ S(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. */ S(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. */ S(this, "telemetry", !0); /** * Unit to be used */ S(this, "_unit", "metric"); /** * MapTiler Cloud API key */ S(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, nr.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) { nr.fetch = t; } /** * Get the fetch fucntion */ get fetch() { return nr.fetch; } } const D = new Oo(), xr = "localcache_source", kr = "localcache", jo = "maptiler_sdk", No = 1e3, Do = 100, Cr = typeof caches < "u", { addProtocol: vn } = k; function Uo(r, e) { if (Cr && D.caching && D.session && r.host === V.maptilerApiHost) { if (e === "Source" && r.href.includes("tiles.json")) return r.href.replace("https://", `${xr}://`); if (e === "Tile" || e === "Glyphs") return r.href.replace("https://", `${kr}://`); } return r.href; } let or; async function fa() { return or || (or = await caches.open(jo)), or; } let bn = 0; async function Bo() { const r = await fa(), e = await r.keys(), t = e.slice(0, Math.max(e.length - No, 0)); for (const n of t) r.delete(n); } function qo() { vn( xr, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${xr}://`, "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") }; } ), vn(kr, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${kr}://`, "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 (f) => ({ data: await f.arrayBuffer(), cacheControl: f.headers.get("Cache-Control"), expires: f.headers.get("Expires") }), l = await fa(), 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(() => { }), ++bn > Do && (Bo(), bn = 0)), s(p); }); } function Go() { if (typeof window > "u") return; const r = k.getRTLTextPluginStatus(); if (r === "unavailable" || r === "requested") try { k.setRTLTextPlugin(V.rtlPluginURL, !0); } catch { } } function Vo(r, e) { for (const t of r) typeof e[t] == "function" && (e[t] = e[t].bind(e)); } function wn(r, e) { let t = null; try { t = new URL(r); } catch { return { url: r }; } return t.host === V.maptilerApiHost && (t.searchParams.has("key") || t.searchParams.append("key", D.apiKey), D.session && t.searchParams.append("mtsid", Nr)), { url: Uo(t, e) }; } function Sn(r) { return (e, t) => { if (r != null) { const n = r(e, t), a = wn((n == null ? void 0 : n.url) ?? "", t); return { ...n, ...a }; } return wn(e, t); }; } function da() { return Math.random().toString(36).substring(2); } function jt(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 Ho(r) { try { return JSON.parse(r); } catch { } return null; } function Ko() { 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 Xo(r) { const e = Ko(); 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 rc(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 xn(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 Zo(r, e, t) { const n = structuredClone(r), a = (o) => { if (typeof o != "string") for (let i = 0; i < o.length; i += 1) xn(o[i], t) ? o[i] = structuredClone(e) : a(o[i]); }; return xn(n, t) ? e : (a(n), n); } function Yo(r, e) { const t = e ? /\{name:\S+\}/ : /\{name\}/; return { contains: t.test(r), exactMatch: new RegExp(`^${t.source}$`).test(r) }; } function Wo(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 Jo(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 Qo(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 ei(r) { const e = [], t = structuredClone(r), n = (a) => { if (typeof a != "string") for (let o = 0; o < a.length; o += 1) { const i = Qo(a[o]); i ? e.push(i.localization) : n(a[o]); } }; return n([t]), e; } function ti(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 = Jo(u); t.push(c); } else { const c = ei(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 nc = class extends k.Marker { addTo(e) { return super.addTo(e); } }; class oc extends k.Popup { addTo(e) { return super.addTo(e); } } class ic extends k.Style { constructor(e, t = {}) { super(e, t); } } class sc extends k.CanvasSource { onAdd(e) { super.onAdd(e); } } class lc extends k.GeoJSONSource { onAdd(e) { super.onAdd(e); } } class uc extends k.ImageSource { onAdd(e) { super.onAdd(e); } } class cc extends k.RasterTileSource { onAdd(e) { super.onAdd(e); } } class pc extends k.RasterDEMTileSource { onAdd(e) { super.onAdd(e); } } class fc extends k.VectorTileSource { onAdd(e) { super.onAdd(e); } } class dc extends k.VideoSource { onAdd(e) { super.onAdd(e); } } class ri extends k.NavigationControl { onAdd(e) { return super.onAdd(e); } } class ni extends k.GeolocateControl { onAdd(e) { return super.onAdd(e); } } class hc extends k.AttributionControl { onAdd(e) { return super.onAdd(e); } } class ai extends k.LogoControl { onAdd(e) { return super.onAdd(e); } } class oi extends k.ScaleControl { onAdd(e) { return super.onAdd(e); } } class ii extends k.FullscreenControl { onAdd(e) { return super.onAdd(e); } } class yc extends k.TerrainControl { onAdd(e) { return super.onAdd(e); } } class mc extends k.BoxZoomHandler { constructor(e, t) { super(e, t); } } class gc extends k.ScrollZoomHandler { constructor(e, t) { super(e, t); } } class vc extends k.CooperativeGesturesHandler { constructor(e, t) { super(e, t); } } class bc extends k.KeyboardHandler { constructor(e) { super(e); } } class wc extends k.TwoFingersTouchPitchHandler { constructor(e) { super(e); } } class Sc extends k.MapWheelEvent { constructor(e, t, n) { super(e, t, n); } } class xc extends k.MapTouchEvent { constructor(e, t, n) { super(e, t, n); } } class kc extends k.MapMouseEvent { constructor(e, t, n, a = {}) { super(e, t, n, a); } } class kn extends ai { constructor(t = {}) { super(t); S(this, "logoURL", ""); S(this, "linkURL", ""); this.logoURL = t.logoURL ?? V.maptilerLogoURL, this.linkURL = t.linkURL ?? V.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 si = 8, li = { 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" } }, ui = { "*": { type: "source" } }, ci = [ "source_vector", "source_raster", "source_raster_dem", "source_geojson", "source_video", "source_image" ], pi = { 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: "*" } }, fi = { 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: "*" } }, di = { 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: "*" } }, hi = { 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" } }, yi = { 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" } } }, mi = { 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" } } }, gi = { 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" } }, vi = [ "layout_fill", "layout_line", "layout_circle", "layout_heatmap", "layout_fill-extrusion", "layout_symbol", "layout_raster", "layout_hillshade", "layout_color-relief", "layout_background" ], bi = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, wi = { "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" } }, Si = { "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" } }, xi = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, ki = { "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" } }, Ci = { "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" } }, Li = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, Ai = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, Ei = { type: "array", value: "*" }, Ti = { type: "enum", values: { "==": {}, "!=": {}, ">": {}, ">=": {}, "<": {}, "<=": {}, in: {}, "!in": {}, all: {}, any: {}, none: {}, has: {}, "!has": {} } }, _i = { type: "enum", values: { Point: {}, LineString: {}, Polygon: {} } }, Ii = { type: "array", minimum: 0, maximum: 24, value: [ "number", "color" ], length: 2 }, Mi = { type: "array", value: "*", minimum: 1 }, Pi = { 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 } }, Ri = { "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 } }, zi = { source: { type: "string", required: !0 }, exaggeration: { type: "number", minimum: 0, default: 1 } }, Fi = { type: { type: "projectionDefinition", default: "mercator", "property-type": "data-constant", transition: !1, expression: { interpolated: !0, parameters: [ "zoom" ] } } }, $i = [ "paint_fill", "paint_line", "paint_circle", "paint_heatmap", "paint_fill-extrusion", "paint_symbol", "paint_raster", "paint_hillshade", "paint_color-relief", "paint_background" ], Oi = { "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" } }, ji = { "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" } }, Ni = { "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", "featu