UNPKG

@maptiler/sdk

Version:

The Javascript & TypeScript map SDK tailored for MapTiler Cloud

2,599 lines 460 kB
var Ii = Object.defineProperty; var Nn = (r) => { throw TypeError(r); }; var _i = (r, e, t) => e in r ? Ii(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t; var y = (r, e, t) => _i(r, typeof e != "symbol" ? e + "" : e, t), Sr = (r, e, t) => e.has(r) || Nn("Cannot " + t); var L = (r, e, t) => (Sr(r, e, "read from private field"), t ? t.call(r) : e.get(r)), Y = (r, e, t) => e.has(r) ? Nn("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(r) : e.set(r, t), J = (r, e, t, n) => (Sr(r, e, "write to private field"), n ? n.call(r, t) : e.set(r, t), t), Q = (r, e, t) => (Sr(r, e, "access private method"), t); import k from "maplibre-gl"; import { Base64 as Mi } from "js-base64"; import Pi from "events"; import { Language as Ri, getLanguageInfoFromCode as jn, config as xr, MapStyle as dt, mapStylePresetList as kr, expandMapStyle as Oi, MapStyleVariant as zi, ReferenceMapStyle as Fi, toLanguageInfo as Dn, getLanguageInfoFromFlag as $i, geolocation as Un } from "@maptiler/client"; import { MapStyle as cd, MapStyleVariant as pd, ReferenceMapStyle as fd, ServiceError as dd, areSameLanguages as hd, bufferToPixelDataBrowser as md, canParsePixelData as yd, circumferenceAtLatitude as gd, coordinates as vd, data as bd, elevation as wd, expandMapStyle as Sd, geocoding as xd, geolocation as kd, getAutoLanguage as Ld, getBufferToPixelDataParser as Ed, getLanguageInfoFromCode as Cd, getLanguageInfoFromFlag as Ad, getLanguageInfoFromKey as Td, getTileCache as Id, isLanguageInfo as _d, mapStylePresetList as Md, math as Pd, misc as Rd, staticMaps as Od, styleToStyle as zd, toLanguageInfo as Fd } from "@maptiler/client"; import { v4 as Xa } 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 Ni = class extends k.Marker { addTo(e) { return super.addTo(e); } }; class Dp extends k.Popup { addTo(e) { return super.addTo(e); } } class Up extends k.Style { constructor(e, t = {}) { super(e, t); } } class Bp extends k.CanvasSource { onAdd(e) { super.onAdd(e); } } class qp extends k.GeoJSONSource { onAdd(e) { super.onAdd(e); } } class Vp extends k.ImageSource { onAdd(e) { super.onAdd(e); } } class Gp extends k.RasterTileSource { onAdd(e) { super.onAdd(e); } } class Hp extends k.RasterDEMTileSource { onAdd(e) { super.onAdd(e); } } class Kp extends k.VectorTileSource { onAdd(e) { super.onAdd(e); } } class Zp extends k.VideoSource { onAdd(e) { super.onAdd(e); } } class Ya extends k.NavigationControl { onAdd(e) { return super.onAdd(e); } } class ji extends k.GeolocateControl { onAdd(e) { return super.onAdd(e); } } class Xp extends k.AttributionControl { onAdd(e) { return super.onAdd(e); } } class Di extends k.LogoControl { onAdd(e) { return super.onAdd(e); } } class Ui extends k.ScaleControl { onAdd(e) { return super.onAdd(e); } } class Bi extends k.FullscreenControl { onAdd(e) { return super.onAdd(e); } } class Yp extends k.TerrainControl { onAdd(e) { return super.onAdd(e); } } class Wp extends k.BoxZoomHandler { constructor(e, t) { super(e, t); } } class Jp extends k.ScrollZoomHandler { constructor(e, t) { super(e, t); } } class Qp extends k.CooperativeGesturesHandler { constructor(e, t) { super(e, t); } } class ef extends k.KeyboardHandler { constructor(e) { super(e); } } class tf extends k.TwoFingersTouchPitchHandler { constructor(e) { super(e); } } class rf extends k.MapWheelEvent { constructor(e, t, n) { super(e, t, n); } } class nf extends k.MapTouchEvent { constructor(e, t, n) { super(e, t, n); } } class af 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 }, ...Ri }; function Bn() { if (typeof navigator > "u") { const e = Intl.DateTimeFormat().resolvedOptions().locale.split("-")[0], t = jn(e); return t || O.ENGLISH; } return Array.from(new Set(navigator.languages.map((e) => e.split("-")[0]))).map((e) => jn(e)).filter((e) => e)[0] ?? O.LOCAL; } const W = { 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(W); const cn = Xa(); class qi extends Pi { constructor() { super(...arguments); /** * The primary language. By default, the language of the web browser is used. */ y(this, "primaryLanguage", W.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 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". */ 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, xr.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) { xr.fetch = t; } /** * Get the fetch fucntion */ get fetch() { return xr.fetch; } } const j = new qi(); class qn extends Di { constructor(t = {}) { super(t); y(this, "logoURL", ""); y(this, "linkURL", ""); this.logoURL = t.logoURL ?? W.maptilerLogoURL, this.linkURL = t.linkURL ?? W.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 Dr = "localcache_source", Ur = "localcache", Vi = "maptiler_sdk", Gi = 1e3, Hi = 100, Br = typeof caches < "u", { addProtocol: Vn } = k; function Ki(r, e) { if (Br && j.caching && j.session && r.host === W.maptilerApiHost) { if (e === "Source" && r.href.includes("tiles.json")) return r.href.replace("https://", `${Dr}://`); if (e === "Tile" || e === "Glyphs") return r.href.replace("https://", `${Ur}://`); } return r.href; } let Lr; async function Wa() { return Lr || (Lr = await caches.open(Vi)), Lr; } let Gn = 0; async function Zi() { const r = await Wa(), e = await r.keys(), t = e.slice(0, Math.max(e.length - Gi, 0)); for (const n of t) r.delete(n); } function Xi() { Vn( Dr, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${Dr}://`, "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(Ur, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${Ur}://`, "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 Wa(), 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(() => { }), ++Gn > Hi && (Zi(), Gn = 0)), s(p); }); } async function Yi(r) { if (typeof window > "u") return; const e = k.getRTLTextPluginStatus(); if (e === "unavailable" || e === "requested") try { await k.setRTLTextPlugin(r ?? W.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 Wi(r, e) { for (const t of r) typeof e[t] == "function" && (e[t] = e[t].bind(e)); } function Hn(r, e) { let t = null; try { t = new URL(r); } catch { return { url: r }; } return t.host === W.maptilerApiHost && (t.searchParams.has("key") || t.searchParams.append("key", j.apiKey), j.session && t.searchParams.append("mtsid", cn)), { url: Ki(t, e) }; } function Kn(r) { return (e, t) => { if (r != null) { const n = r(e, t), a = Hn((n == null ? void 0 : n.url) ?? "", t); return { ...n, ...a }; } return Hn(e, t); }; } function Ja() { return Math.random().toString(36).substring(2); } function nr(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 Ji(r) { try { return JSON.parse(r); } catch { } return null; } function Qi() { 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 es(r) { const e = Qi(); 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 of(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 Zn(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 ts(r, e, t) { const n = structuredClone(r), a = (o) => { if (typeof o != "string") for (let i = 0; i < o.length; i += 1) Zn(o[i], t) ? o[i] = structuredClone(e) : a(o[i]); }; return Zn(n, t) ? e : (a(n), n); } function rs(r, e) { const t = e ? /\{name:\S+\}/ : /\{name\}/; return { contains: t.test(r), exactMatch: new RegExp(`^${t.source}$`).test(r) }; } function ns(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 as(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 os(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 is(r) { const e = [], t = structuredClone(r), n = (a) => { if (typeof a != "string") for (let o = 0; o < a.length; o += 1) { const i = os(a[o]); i ? e.push(i.localization) : n(a[o]); } }; return n([t]), e; } function ss(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 = as(u); t.push(c); } else { const c = is(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; } var ls = 8, us = { 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" } }, cs = { "*": { type: "source" } }, ps = [ "source_vector", "source_raster", "source_raster_dem", "source_geojson", "source_video", "source_image" ], fs = { 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: "*" } }, ds = { 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: "*" } }, hs = { 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: "*" } }, ms = { 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" } }, ys = { 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" } } }, gs = { 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" } } }, vs = { 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" } }, bs = [ "layout_fill", "layout_line", "layout_circle", "layout_heatmap", "layout_fill-extrusion", "layout_symbol", "layout_raster", "layout_hillshade", "layout_color-relief", "layout_background" ], ws = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, Ss = { "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" } }, xs = { "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" } }, ks = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, Ls = { "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" } }, Es = { "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" } }, Cs = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, As = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", expression: { interpolated: !1, parameters: [ "global-state" ] }, "property-type": "data-constant" } }, Ts = { type: "boolean", expression: { interpolated: !1, parameters: [ "zoom", "feature" ] }, "property-type": "data-driven" }, Is = { type: "enum", values: { "==": {}, "!=": {}, ">": {}, ">=": {}, "<": {}, "<=": {}, in: {}, "!in": {}, all: {}, any: {}, none: {}, has: {}, "!has": {} } }, _s = { type: "enum", values: { Point: {}, LineString: {}, Polygon: {} } }, Ms = { type: "array", minimum: 0, maximum: 24, value: [ "number", "color" ], length: 2 }, Ps = { type: "array", value: "expression_name", minimum: 1 }, Rs = { 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 } }, Os = { "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 } }, zs = { source: { type: "string", required: !0 }, exaggeration: { type: "number", minimum: 0, default: 1 } }, Fs = { type: { type: "projectionDefinition", default: "mercator", "property-type": "data-constant", transition: !1, expression: { interpolated: !0, parameters: [ "zoom" ] } } }, $s = [ "paint_fill", "paint_line", "paint_circle", "paint_heatmap", "paint_fill-extrusion", "paint_symbol", "paint_raster", "paint_hillshade", "paint_color-relief", "paint_background" ], Ns = { "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" } }, js = { "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" } }, Ds = { "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, e