UNPKG

@maptiler/sdk

Version:

The Javascript & TypeScript map SDK tailored for MapTiler Cloud

2,617 lines 306 kB
var _a = Object.defineProperty; var jr = (r) => { throw TypeError(r); }; var za = (r, e, t) => e in r ? _a(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t; var L = (r, e, t) => za(r, typeof e != "symbol" ? e + "" : e, t), Rt = (r, e, t) => e.has(r) || jr("Cannot " + t); var E = (r, e, t) => (Rt(r, e, "read from private field"), t ? t.call(r) : e.get(r)), ye = (r, e, t) => e.has(r) ? jr("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(r) : e.set(r, t), xe = (r, e, t, n) => (Rt(r, e, "write to private field"), n ? n.call(r, t) : e.set(r, t), t), G = (r, e, t) => (Rt(r, e, "access private method"), t); import S, { addProtocol as Nr } from "maplibre-gl"; import { Language as Pa, getLanguageInfoFromCode as Or, config as $t, MapStyle as qe, mapStylePresetList as jt, expandMapStyle as Ra, MapStyleVariant as $a, ReferenceMapStyle as ja, toLanguageInfo as Fr, getLanguageInfoFromFlag as Na, geolocation as Dr } from "@maptiler/client"; import { MapStyle as Uu, MapStyleVariant as Vu, ReferenceMapStyle as Gu, ServiceError as Hu, areSameLanguages as Ku, bufferToPixelDataBrowser as Wu, circumferenceAtLatitude as Zu, coordinates as Ju, data as Yu, elevation as Xu, expandMapStyle as Qu, geocoding as ec, geolocation as tc, getAutoLanguage as rc, getBufferToPixelDataParser as nc, getLanguageInfoFromCode as ac, getLanguageInfoFromFlag as oc, getLanguageInfoFromKey as ic, getTileCache as sc, isLanguageInfo as lc, mapStylePresetList as uc, math as cc, misc as pc, staticMaps as fc, styleToStyle as dc, toLanguageInfo as yc } from "@maptiler/client"; import Oa from "events"; import { v4 as Fa } from "uuid"; import { Base64 as Da } from "js-base64"; const M = { /** * 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 }, ...Pa }; function qr() { if (typeof navigator > "u") { const e = Intl.DateTimeFormat().resolvedOptions().locale.split("-")[0], t = Or(e); return t || M.ENGLISH; } return Array.from(new Set(navigator.languages.map((e) => e.split("-")[0]))).map((e) => Or(e)).filter((e) => e)[0] ?? M.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: M.STYLE, secondaryLanguage: M.LOCAL, terrainSourceURL: "https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json", terrainSourceId: "maptiler-terrain" }; Object.freeze(V); const ur = Fa(); class qa extends Oa { constructor() { super(...arguments); /** * The primary language. By default, the language of the web browser is used. */ L(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. */ L(this, "secondaryLanguage"); /** * Setting on whether of not the SDK runs with a session logic. * A "session" is started at the initialization of the SDK and finished when the browser * page is being refreshed. * When `session` is enabled (default: true), the extra URL param `mtsid` is added to queries * on the MapTiler Cloud API. This allows MapTiler to enable "session based billing". */ L(this, "session", !0); /** * Enables client-side caching of requests for tiles and fonts. * The cached requests persist multiple browser sessions and will be reused when possible. * Works only for requests to the MapTiler Cloud API when sessions are enabled. */ L(this, "caching", !0); /** * Telemetry is enabled by default but can be opted-out by setting this value to `false`. * The telemetry is very valuable to the team at MapTiler because it shares information * about where to add the extra effort. It also helps spotting some incompatibility issues * that may arise between the SDK and a specific version of a module. * * It consists in sending metrics about usage of the following features: * - SDK version [string] * - API key [string] * - MapTiler sesion ID (if opted-in) [string] * - if tile caching is enabled [boolean] * - if language specified at initialization [boolean] * - if terrain is activated at initialization [boolean] * - if globe projection is activated at initialization [boolean] * * In addition, each official module will be added to a list, alongside its version number. */ L(this, "telemetry", !0); /** * Unit to be used */ L(this, "_unit", "metric"); /** * MapTiler Cloud API key */ L(this, "_apiKey", ""); } /** * Set the unit system */ set unit(t) { this._unit = t, this.emit("unit", t); } /** * Get the unit system */ get unit() { return this._unit; } /** * Set the MapTiler Cloud API key */ set apiKey(t) { this._apiKey = t, $t.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) { $t.fetch = t; } /** * Get the fetch fucntion */ get fetch() { return $t.fetch; } } const O = new qa(), Kt = "localcache_source", Wt = "localcache", Ba = "maptiler_sdk", Ua = 1e3, Va = 100, Zt = typeof caches < "u"; function Ga(r, e) { if (Zt && O.caching && O.session && r.host === V.maptilerApiHost) { if (e === "Source" && r.href.includes("tiles.json")) return r.href.replace("https://", `${Kt}://`); if (e === "Tile" || e === "Glyphs") return r.href.replace("https://", `${Wt}://`); } return r.href; } let Nt; async function xn() { return Nt || (Nt = await caches.open(Ba)), Nt; } let Br = 0; async function Ha() { const r = await xn(), e = await r.keys(), t = e.slice(0, Math.max(e.length - Ua, 0)); for (const n of t) r.delete(n); } function Ka() { Nr( Kt, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${Kt}://`, "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") }; } ), Nr(Wt, async (r, e) => { if (!r.url) throw new Error(""); r.url = r.url.replace(`${Wt}://`, "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 (m) => ({ data: await m.arrayBuffer(), cacheControl: m.headers.get("Cache-Control"), expires: m.headers.get("Expires") }), l = await xn(), 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(() => { }), ++Br > Va && (Ha(), Br = 0)), s(p); }); } function Wa() { if (typeof window > "u") return; const r = S.getRTLTextPluginStatus(); if (r === "unavailable" || r === "requested") try { S.setRTLTextPlugin(V.rtlPluginURL, !0); } catch { } } function Za(r, e) { for (const t of r) typeof e[t] == "function" && (e[t] = e[t].bind(e)); } function Ur(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", O.apiKey), O.session && t.searchParams.append("mtsid", ur)), { url: Ga(t, e) }; } function Vr(r) { return (e, t) => { if (r != null) { const n = r(e, t), a = Ur((n == null ? void 0 : n.url) ?? "", t); return { ...n, ...a }; } return Ur(e, t); }; } function kn() { return Math.random().toString(36).substring(2); } function vt(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 Ja(r) { try { return JSON.parse(r); } catch { } return null; } function Ya() { 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 Xa(r) { const e = Ya(); 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 ml(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 Gr(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 Qa(r, e, t) { const n = structuredClone(r), a = (o) => { if (typeof o != "string") for (let i = 0; i < o.length; i += 1) Gr(o[i], t) ? o[i] = structuredClone(e) : a(o[i]); }; return Gr(n, t) ? e : (a(n), n); } function eo(r, e) { const t = e ? /\{name:\S+\}/ : /\{name\}/; return { contains: t.test(r), exactMatch: new RegExp(`^${t.source}$`).test(r) }; } function to(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 ro(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 no(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 ao(r) { const e = [], t = structuredClone(r), n = (a) => { if (typeof a != "string") for (let o = 0; o < a.length; o += 1) { const i = no(a[o]); i ? e.push(i.localization) : n(a[o]); } }; return n([t]), e; } function oo(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 = ro(u); t.push(c); } else { const c = ao(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 hl = class extends S.Marker { addTo(e) { return super.addTo(e); } }; class vl extends S.Popup { addTo(e) { return super.addTo(e); } } class bl extends S.Style { constructor(e, t = {}) { super(e, t); } } class wl extends S.CanvasSource { onAdd(e) { super.onAdd(e); } } class Sl extends S.GeoJSONSource { onAdd(e) { super.onAdd(e); } } class xl extends S.ImageSource { onAdd(e) { super.onAdd(e); } } class kl extends S.RasterTileSource { onAdd(e) { super.onAdd(e); } } class Ll extends S.RasterDEMTileSource { onAdd(e) { super.onAdd(e); } } class Cl extends S.VectorTileSource { onAdd(e) { super.onAdd(e); } } class Al extends S.VideoSource { onAdd(e) { super.onAdd(e); } } class io extends S.NavigationControl { onAdd(e) { return super.onAdd(e); } } class so extends S.GeolocateControl { onAdd(e) { return super.onAdd(e); } } class Tl extends S.AttributionControl { onAdd(e) { return super.onAdd(e); } } class lo extends S.LogoControl { onAdd(e) { return super.onAdd(e); } } class uo extends S.ScaleControl { onAdd(e) { return super.onAdd(e); } } class co extends S.FullscreenControl { onAdd(e) { return super.onAdd(e); } } class Il extends S.TerrainControl { onAdd(e) { return super.onAdd(e); } } class El extends S.BoxZoomHandler { constructor(e, t) { super(e, t); } } class Ml extends S.ScrollZoomHandler { constructor(e, t) { super(e, t); } } class _l extends S.CooperativeGesturesHandler { constructor(e, t) { super(e, t); } } class zl extends S.KeyboardHandler { constructor(e) { super(e); } } class Pl extends S.TwoFingersTouchPitchHandler { constructor(e) { super(e); } } class Rl extends S.MapWheelEvent { constructor(e, t, n) { super(e, t, n); } } class $l extends S.MapTouchEvent { constructor(e, t, n) { super(e, t, n); } } class jl extends S.MapMouseEvent { constructor(e, t, n, a = {}) { super(e, t, n, a); } } class Hr extends lo { constructor(t = {}) { super(t); L(this, "logoURL", ""); L(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 po = 8, fo = { 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" }, 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" } }, yo = { "*": { type: "source" } }, mo = [ "source_vector", "source_raster", "source_raster_dem", "source_geojson", "source_video", "source_image" ], ho = { 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: "*" } }, go = { 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: "*" } }, vo = { 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: "*" } }, bo = { 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" } }, wo = { 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" } } }, So = { 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" } } }, xo = { id: { type: "string", required: !0 }, type: { type: "enum", values: { fill: {}, line: {}, symbol: {}, circle: {}, heatmap: {}, "fill-extrusion": {}, raster: {}, hillshade: {}, 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" } }, ko = [ "layout_fill", "layout_line", "layout_circle", "layout_heatmap", "layout_fill-extrusion", "layout_symbol", "layout_raster", "layout_hillshade", "layout_background" ], Lo = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, Co = { "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" } }, Ao = { "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" } }, To = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, Io = { "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" } }, Eo = { "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" } }, Mo = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, _o = { visibility: { type: "enum", values: { visible: {}, none: {} }, default: "visible", "property-type": "constant" } }, zo = { type: "array", value: "*" }, Po = { type: "enum", values: { "==": {}, "!=": {}, ">": {}, ">=": {}, "<": {}, "<=": {}, in: {}, "!in": {}, all: {}, any: {}, none: {}, has: {}, "!has": {} } }, Ro = { type: "enum", values: { Point: {}, LineString: {}, Polygon: {} } }, $o = { type: "array", minimum: 0, maximum: 24, value: [ "number", "color" ], length: 2 }, jo = { type: "array", value: "*", minimum: 1 }, No = { 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 } }, Oo = { "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 } }, Fo = { source: { type: "string", required: !0 }, exaggeration: { type: "number", minimum: 0, default: 1 } }, Do = { type: { type: "projectionDefinition", default: "mercator", "property-type": "data-constant", transition: !1, expression: { interpolated: !0, parameters: [ "zoom" ] } } }, qo = [ "paint_fill", "paint_line", "paint_circle", "paint_heatmap", "paint_fill-extrusion", "paint_symbol", "paint_raster", "paint_hillshade", "paint_background" ], Bo = { "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" } }, Uo = { "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" } }, Vo = { "circle-radius": { type: "number", default: 5, minimum: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-color": { type: "color", default: "#000000", transition: !0, expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-blur": { type: "number", default: 0, transition: !0, expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-opacity": { type: "number", default: 1, minimum: 0, maximum: 1, transition: !0, expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-translate": { type: "array", value: "number", length: 2, default: [ 0, 0 ], transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "circle-translate-anchor": { type: "enum", values: { map: {}, viewport: {} }, default: "map", requires: [ "circle-translate" ], expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "circle-pitch-scale": { type: "enum", values: { map: {}, viewport: {} }, default: "map", expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "circle-pitch-alignment": { type: "enum", values: { map: {}, viewport: {} }, default: "viewport", expression: { interpolated: !1, parameters: [ "zoom" ] }, "property-type": "data-constant" }, "circle-stroke-width": { type: "number", default: 0, minimum: 0, transition: !0, units: "pixels", expression: { interpolated: !0, parameters: [ "zoom", "feature", "feature-state" ] }, "property-type": "data-driven" }, "circle-stroke-color": { type: "color", default: "#000000"