UNPKG

@maptiler/sdk

Version:

The Javascript & TypeScript map SDK tailored for MapTiler Cloud

2,602 lines (2,601 loc) 462 kB
var _o = Object.defineProperty; var Un = (r) => { throw TypeError(r); }; var Mo = (r, e, t) => e in r ? _o(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t; var y = (r, e, t) => Mo(r, typeof e != "symbol" ? e + "" : e, t), Er = (r, e, t) => e.has(r) || Un("Cannot " + t); var E = (r, e, t) => (Er(r, e, "read from private field"), t ? t.call(r) : e.get(r)), W = (r, e, t) => e.has(r) ? Un("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(r) : e.set(r, t), Q = (r, e, t, n) => (Er(r, e, "write to private field"), n ? n.call(r, t) : e.set(r, t), t), ee = (r, e, t) => (Er(r, e, "access private method"), t); import k from "maplibre-gl"; import { Base64 as Po } from "js-base64"; import Ro from "events"; import * as Ot from "@maptiler/client"; import { Language as Oo, getLanguageInfoFromCode as Bn, config as Lr, MapStyle as dt, mapStylePresetList as Cr, expandMapStyle as zo, MapStyleVariant as Fo, ReferenceMapStyle as $o, toLanguageInfo as qn, getLanguageInfoFromFlag as No, geolocation as Vn } from "@maptiler/client"; import { MapStyle as dd, MapStyleVariant as hd, ReferenceMapStyle as md, ServiceError as yd, areSameLanguages as gd, bufferToPixelDataBrowser as vd, canParsePixelData as bd, circumferenceAtLatitude as wd, coordinates as Sd, data as xd, elevation as kd, expandMapStyle as Ed, geolocation as Ld, getAutoLanguage as Cd, getBufferToPixelDataParser as Ad, getLanguageInfoFromCode as Td, getLanguageInfoFromFlag as Id, getLanguageInfoFromKey as _d, getTileCache as Md, isLanguageInfo as Pd, mapStylePresetList as Rd, math as Od, misc as zd, staticMaps as Fd, styleToStyle as $d, toLanguageInfo as Nd } from "@maptiler/client"; import { v4 as dn } from "uuid"; (function() { typeof window > "u" || (window.requestIdleCallback = window.requestIdleCallback || function(r) { const e = Date.now(); return setTimeout(function() { r({ didTimeout: !1, timeRemaining: function() { return Math.max(0, 50 - (Date.now() - e)); } }); }, 1); }, window.cancelIdleCallback = window.cancelIdleCallback || function(r) { clearTimeout(r); }); })(); let jo = class extends k.Marker { addTo(e) { return super.addTo(e); } }; class Bp extends k.Popup { addTo(e) { return super.addTo(e); } } class qp extends k.Style { constructor(e, t = {}) { super(e, t); } } class Vp extends k.CanvasSource { onAdd(e) { super.onAdd(e); } } class Gp extends k.GeoJSONSource { onAdd(e) { super.onAdd(e); } } class Hp extends k.ImageSource { onAdd(e) { super.onAdd(e); } } class Kp extends k.RasterTileSource { onAdd(e) { super.onAdd(e); } } class Zp extends k.RasterDEMTileSource { onAdd(e) { super.onAdd(e); } } class Xp extends k.VectorTileSource { onAdd(e) { super.onAdd(e); } } class Wp extends k.VideoSource { onAdd(e) { super.onAdd(e); } } class Ya extends k.NavigationControl { onAdd(e) { return super.onAdd(e); } } class Do extends k.GeolocateControl { onAdd(e) { return super.onAdd(e); } } class Yp extends k.AttributionControl { onAdd(e) { return super.onAdd(e); } } class Uo extends k.LogoControl { onAdd(e) { return super.onAdd(e); } } class Bo extends k.ScaleControl { onAdd(e) { return super.onAdd(e); } } class qo extends k.FullscreenControl { onAdd(e) { return super.onAdd(e); } } class Jp extends k.TerrainControl { onAdd(e) { return super.onAdd(e); } } class Qp extends k.BoxZoomHandler { constructor(e, t) { super(e, t); } } class ef extends k.ScrollZoomHandler { constructor(e, t) { super(e, t); } } class tf extends k.CooperativeGesturesHandler { constructor(e, t) { super(e, t); } } class rf extends k.KeyboardHandler { constructor(e) { super(e); } } class nf extends k.TwoFingersTouchPitchHandler { constructor(e) { super(e); } } class af extends k.MapWheelEvent { constructor(e, t, n) { super(e, t, n); } } class of extends k.MapTouchEvent { constructor(e, t, n) { super(e, t, n); } } class sf extends k.MapMouseEvent { constructor(e, t, n, a = {}) { super(e, t, n, a); } } const O = { /** * 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 }, ...Oo }; function Gn() { if (typeof navigator > "u") { const e = Intl.DateTimeFormat().resolvedOptions().locale.split("-")[0], t = Bn(e); return t || O.ENGLISH; } return Array.from(new Set(navigator.languages.map((e) => e.split("-")[0]))).map((e) => Bn(e)).filter((e) => e)[0] ?? O.LOCAL; } const Y = { 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: O.STYLE, secondaryLanguage: O.LOCAL, terrainSourceURL: "https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json", terrainSourceId: "maptiler-terrain" }; Object.freeze(Y); const ir = dn(); class Vo extends Ro { constructor() { super(...arguments); /** * The primary language. By default, the language of the web browser is used. */ y(this, "primaryLanguage", Y.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. */ y(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 closed or refreshed. * When `session` is enabled (default: true), the extra URL param `mtsid` is added to queries * to the MapTiler Cloud API. This allows MapTiler to enable "session based billing". */ y(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. */ y(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. */ y(this, "telemetry", !0); /** * Unit to be used */ y(this, "_unit", "metric"); /** * MapTiler Cloud API key */ y(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, Lr.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) { Lr.fetch = t; } /** * Get the fetch fucntion */ get fetch() { return Lr.fetch; } } const j = new Vo(); class Hn extends Uo { constructor(t = {}) { super(t); y(this, "logoURL", ""); y(this, "linkURL", ""); this.logoURL = t.logoURL ?? Y.maptilerLogoURL, this.linkURL = t.linkURL ?? Y.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; } } const qr = "localcache_source", Vr = "localcache", Go = "maptiler_sdk", Ho = 1e3, Ko = 100, Gr = typeof caches < "u", { addProtocol: Kn } = k; function Zo(r, e) { if (Gr && j.caching && j.session && r.host === Y.maptilerApiHost) { if (e === "Source" && r.href.includes("tiles.json")) return r.href.replace("https://", `${qr}://`); if (e === "Tile" || e === "Glyphs") return r.href.replace("https://", `${Vr}://`); } return r.href; } let Ar; async function Ja() { return Ar || (Ar = await caches.open(Go)), Ar; } let Zn = 0; async function Xo() { const r = await Ja(), e = await r.keys(), t = e.slice(0, Math.max(e.length - Ho, 0)); for (const n of t) r.delete(n); } function Wo() { Kn( qr, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${qr}://`, "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") }; } ), Kn(Vr, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${Vr}://`, "https://"); const t = new URL(r.url), n = new URL(t); n.searchParams.delete("mtsid"), n.searchParams.delete("key"); const a = n.toString(), i = new URL(t); i.searchParams.delete("last-modified"); const o = i.toString(), s = async (f) => ({ data: await f.arrayBuffer(), cacheControl: f.headers.get("Cache-Control"), expires: f.headers.get("Expires") }), l = await Ja(), u = await l.match(a); if (u) return s(u); const c = r; c.signal = e.signal; const p = await fetch(o, c); return p.status >= 200 && p.status < 300 && (l.put(a, p.clone()).catch(() => { }), ++Zn > Ko && (Xo(), Zn = 0)), s(p); }); } async function Yo(r) { if (typeof window > "u") return; const e = k.getRTLTextPluginStatus(); if (e === "unavailable" || e === "requested") try { await k.setRTLTextPlugin(r ?? Y.rtlPluginURL, !0); } catch (t) { console.error("Error enabling RTL plugin. It is enabled by default and cannot be unset after. Are you attempting to enable it twice?", t); } } function Jo(r, e) { for (const t of r) typeof e[t] == "function" && (e[t] = e[t].bind(e)); } function Xn(r, e) { let t = null; try { t = new URL(r); } catch { return { url: r }; } return t.host === Y.maptilerApiHost && (t.searchParams.has("key") || t.searchParams.append("key", j.apiKey), j.session && t.searchParams.append("mtsid", ir)), { url: Zo(t, e) }; } function Wn(r) { return async (e, t) => { if (r != null) { const n = await r(e, t), a = Xn((n == null ? void 0 : n.url) ?? "", t); return { ...n, ...a }; } return Xn(e, t); }; } function Qa() { return Math.random().toString(36).substring(2); } function or(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 Qo(r) { try { return JSON.parse(r); } catch { } return null; } const es = { antialias: !1, preserveDrawingBuffer: !1, powerPreference: "high-performance", failIfMajorPerformanceCaveat: !1, desynchronized: !1 }; function ts(r = {}) { return document.createElement("canvas").getContext("webgl2", { ...es, ...r }) ? 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 rs(r, e) { const t = ts(e); if (!t) return; let n = null; if (typeof r == "string" ? n = document.getElementById(r) : r instanceof HTMLElement && (n = r), !n) throw new Error("The Map container must be provided."); const a = document.createElement("div"); throw a.innerHTML = t, a.classList.add("webgl-warning-div"), n.appendChild(a), new Error(t); } function lf(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 ns(r, e) { const t = e ? /\{name:\S+\}/ : /\{name\}/; return { contains: t.test(r), exactMatch: new RegExp(`^${t.source}$`).test(r) }; } function as(r, e, t) { const n = t ? /\{name:\S+\}/ : /\{name\}/, a = r.split(n); return ["concat", ...a.flatMap((s, l) => { const u = is(s); return l === a.length - 1 ? [u] : [u, e]; })]; } function is(r) { return typeof r != "string" || !r.includes("{ele}") ? r : [ "case", // if the value contains {ele} ["has", "ele"], // then concat the expression with the elevation and the unit and "m" [ "concat", [ // if the value contains {name} add a new line otherwise use an empty string "case", ["has", "name"], ` `, "" ], ["get", "ele"], " m" ], // if the value does not contain {ele} use an empty string "" ]; } function os(r) { var n; const e = /\{name(?::(?<language>\S+))?\}/g, t = []; for (; ; ) { const a = e.exec(r); if (!a) break; const i = ((n = a.groups) == null ? void 0 : n.language) ?? null; t.push(i); } return t; } function ss(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 ls(r) { const e = [], t = structuredClone(r), n = (a) => { if (typeof a != "string") for (let i = 0; i < a.length; i += 1) { const o = ss(a[i]); o ? e.push(o.localization) : n(a[i]); } }; return n([t]), e; } function us(r, e) { const t = []; for (const i of r) { if (i.type !== "symbol") continue; const o = i, { id: s, layout: l } = o; if (!l || !("text-field" in l)) continue; const u = e.getLayoutProperty(s, "text-field"); if (u) if (typeof u == "string") { const c = os(u); t.push(c); } else { const c = ls(u); t.push(c); } } const n = t.flat(), a = { unlocalized: 0, localized: {} }; for (const i of n) i === null ? a.unlocalized += 1 : (i in a.localized || (a.localized[i] = 0), a.localized[i] += 1); return a; } var cs = 8, ps = { version: { required: !0, type: "enum", values: [ 8 ] }, name: { type: "string" }, metadata: { type: "*" }, center: { type: "array", value: "number", length: 2 }, 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" }, "font-faces": { type: "fontFaces" }, transition: { type: "transition" }, layers: { required: !0, type: "array", value: "layer" } }, fs = { "*": { type: "source" } }, ds = [ "source_vector", "source_raster", "source_raster_dem", "source_geojson", "source_video", "source_image" ], hs = { 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 }, encoding: { type: "enum", values: { mvt: {}, mlt: {} }, default: "mvt" }, "*": { type: "*" } }, ms = { 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: "*" } }, ys = { 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: "*" } }, gs = { 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: "filter" }, 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" } }, vs = { 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" } } }, bs = { 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" } } }, ws = { 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" } }, Ss = [ "layout_fill", "layout_line", "layout_circle", "layout_heatmap", "layout_fill-extrusion", "layout_symbol", "layout_raster", "layout_hillshade", "layout_color-relief", "layout_background" ], xs = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, ks = { "fill-sort-key": { type: "number", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, Es = { "circle-sort-key": { type: "number", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, Ls = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, Cs = { "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", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, As = { "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", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, Ts = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, Is = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, _s = { type: "boolean", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, Ms = { type: "enum", values: { "==": {}, "!=": {}, ">": {}, ">=": {}, "<": {}, "<=": {}, in: {}, "!in": {}, all: {}, any: {}, none: {}, has: {}, "!has": {} } }, Ps = { type: "enum", values: { Point: {}, LineString: {}, Polygon: {} } }, Rs = { type: "array", minimum: 0, maximum: 24, value: [ "number", "color" ], length: 2 }, Os = { type: "array", value: "expression_name", minimum: 1 }, zs = { 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 } }, Fs = { "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 } }, $s = { source: { type: "string", required: !0 }, exaggeration: { type: "number", minimum: 0, default: 1 } }, Ns = { type: { type: "projectionDefinition", default: "mercator", "property-type": "data-constant", transition: !1, expression: { interpolated: !0, parameters: [ "zoom" ] } } }, js = [ "paint_fill", "paint_line", "paint_circle", "paint_heatmap", "paint_fill-extrusion", "paint_symbol", "paint_raster", "paint_hillshade", "paint_color-relief", "paint_background" ], Ds = { "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" } }, Us = { "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", "feature" ] }, "property-type": "cross-faded-data-driven" }, "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" } }, Bs = { "circle-radius": { type: "number", default: 5, minimum: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] },