@maptiler/sdk 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/demos/maptiler-sdk.umd.js +11 -6
  2. package/dist/maptiler-sdk.min.mjs +1 -1
  3. package/dist/maptiler-sdk.mjs +8 -3
  4. package/dist/maptiler-sdk.mjs.map +1 -1
  5. package/dist/maptiler-sdk.umd.js +11 -6
  6. package/dist/maptiler-sdk.umd.js.map +1 -1
  7. package/dist/maptiler-sdk.umd.min.js +5 -5
  8. package/package.json +1 -1
  9. package/readme.md +11 -11
  10. package/src/CustomGeolocateControl.ts +7 -5
  11. package/docs/.nojekyll +0 -1
  12. package/docs/assets/custom.css +0 -118
  13. package/docs/assets/highlight.css +0 -134
  14. package/docs/assets/main.js +0 -54
  15. package/docs/assets/search.js +0 -1
  16. package/docs/assets/style.css +0 -1257
  17. package/docs/classes/Map.html +0 -273
  18. package/docs/classes/Point.html +0 -549
  19. package/docs/classes/SdkConfig.html +0 -188
  20. package/docs/demos/maptiler-sdk.css +0 -147
  21. package/docs/demos/maptiler-sdk.umd.js +0 -3287
  22. package/docs/demos/simple.html +0 -63
  23. package/docs/functions/addProtocol.html +0 -146
  24. package/docs/functions/clearPrewarmedResources.html +0 -92
  25. package/docs/functions/clearStorage.html +0 -124
  26. package/docs/functions/getRTLTextPluginStatus.html +0 -92
  27. package/docs/functions/prewarm.html +0 -92
  28. package/docs/functions/removeProtocol.html +0 -106
  29. package/docs/functions/setRTLTextPlugin.html +0 -112
  30. package/docs/functions/supported.html +0 -97
  31. package/docs/images/JS-logo.svg +0 -4
  32. package/docs/images/TS-logo.svg +0 -6
  33. package/docs/images/maptiler-logo.svg +0 -19
  34. package/docs/images/maptiler-sdk-logo.afdesign +0 -0
  35. package/docs/images/maptiler-sdk-logo.svg +0 -66
  36. package/docs/images/screenshots/alps.gif +0 -0
  37. package/docs/images/screenshots/grandcanyon.gif +0 -0
  38. package/docs/images/screenshots/lang-arabic.png +0 -0
  39. package/docs/images/screenshots/lang-hebrew.png +0 -0
  40. package/docs/images/screenshots/multilang.gif +0 -0
  41. package/docs/images/screenshots/static-bounded-europe-1024.png +0 -0
  42. package/docs/images/screenshots/static-bounded-europe-2048.png +0 -0
  43. package/docs/images/screenshots/static-bounded-portugal-1024x2048.png +0 -0
  44. package/docs/images/screenshots/static-bounded-portugal-2048x2048.png +0 -0
  45. package/docs/images/screenshots/static-with-path.png +0 -0
  46. package/docs/images/screenshots/style-basic-v2.png +0 -0
  47. package/docs/images/screenshots/style-bright.png +0 -0
  48. package/docs/images/screenshots/style-dataviz-dark.png +0 -0
  49. package/docs/images/screenshots/style-hybrid.png +0 -0
  50. package/docs/images/screenshots/style-osm.png +0 -0
  51. package/docs/images/screenshots/style-outdoor.png +0 -0
  52. package/docs/images/screenshots/style-pastel.png +0 -0
  53. package/docs/images/screenshots/style-satellite.png +0 -0
  54. package/docs/images/screenshots/style-streets-v2-dark.png +0 -0
  55. package/docs/images/screenshots/style-streets-v2-light.png +0 -0
  56. package/docs/images/screenshots/style-streets-v2.png +0 -0
  57. package/docs/images/screenshots/style-toner.png +0 -0
  58. package/docs/images/screenshots/style-topo.png +0 -0
  59. package/docs/images/screenshots/style-topographique.png +0 -0
  60. package/docs/images/screenshots/style-voyager.png +0 -0
  61. package/docs/images/screenshots/style-winter.png +0 -0
  62. package/docs/index.html +0 -601
  63. package/docs/modules.html +0 -142
  64. package/docs/types/LanguageKey.html +0 -90
  65. package/docs/types/LanguageString.html +0 -90
  66. package/docs/types/MapOptions.html +0 -90
  67. package/docs/types/Matrix2.html +0 -90
  68. package/docs/types/Unit.html +0 -88
  69. package/docs/variables/AJAXError.html +0 -88
  70. package/docs/variables/AttributionControl.html +0 -88
  71. package/docs/variables/CanvasSource.html +0 -88
  72. package/docs/variables/Evented.html +0 -88
  73. package/docs/variables/FullscreenControl.html +0 -88
  74. package/docs/variables/GeoJSONSource.html +0 -88
  75. package/docs/variables/GeolocateControl.html +0 -88
  76. package/docs/variables/GeolocationType.html +0 -95
  77. package/docs/variables/ImageSource.html +0 -88
  78. package/docs/variables/Language.html +0 -249
  79. package/docs/variables/LngLat.html +0 -88
  80. package/docs/variables/LngLatBounds.html +0 -88
  81. package/docs/variables/LogoControl.html +0 -88
  82. package/docs/variables/Marker.html +0 -88
  83. package/docs/variables/MercatorCoordinate.html +0 -88
  84. package/docs/variables/NavigationControl.html +0 -88
  85. package/docs/variables/Popup.html +0 -88
  86. package/docs/variables/RasterDEMTileSource.html +0 -88
  87. package/docs/variables/RasterTileSource.html +0 -88
  88. package/docs/variables/ScaleControl.html +0 -88
  89. package/docs/variables/Style.html +0 -88
  90. package/docs/variables/TerrainControl.html +0 -88
  91. package/docs/variables/VectorTileSource.html +0 -88
  92. package/docs/variables/VideoSource.html +0 -88
  93. package/docs/variables/config.html +0 -88
  94. package/docs/variables/maxParallelImageRequests.html +0 -88
  95. package/docs/variables/version.html +0 -88
  96. package/docs/variables/workerCount.html +0 -88
  97. package/docs/variables/workerUrl.html +0 -88
  98. package/docsmd/.nojekyll +0 -1
  99. package/docsmd/README.md +0 -710
  100. package/docsmd/assets/custom.css +0 -118
  101. package/docsmd/classes/Map.md +0 -292
  102. package/docsmd/classes/Point.md +0 -603
  103. package/docsmd/classes/SdkConfig.md +0 -186
  104. package/docsmd/images/JS-logo.svg +0 -4
  105. package/docsmd/images/TS-logo.svg +0 -6
  106. package/docsmd/images/maptiler-logo.svg +0 -19
  107. package/docsmd/images/maptiler-sdk-logo.afdesign +0 -0
  108. package/docsmd/images/maptiler-sdk-logo.svg +0 -66
  109. package/docsmd/images/screenshots/alps.gif +0 -0
  110. package/docsmd/images/screenshots/grandcanyon.gif +0 -0
  111. package/docsmd/images/screenshots/lang-arabic.png +0 -0
  112. package/docsmd/images/screenshots/lang-hebrew.png +0 -0
  113. package/docsmd/images/screenshots/multilang.gif +0 -0
  114. package/docsmd/images/screenshots/static-bounded-europe-1024.png +0 -0
  115. package/docsmd/images/screenshots/static-bounded-europe-2048.png +0 -0
  116. package/docsmd/images/screenshots/static-bounded-portugal-1024x2048.png +0 -0
  117. package/docsmd/images/screenshots/static-bounded-portugal-2048x2048.png +0 -0
  118. package/docsmd/images/screenshots/static-with-path.png +0 -0
  119. package/docsmd/images/screenshots/style-basic-v2.png +0 -0
  120. package/docsmd/images/screenshots/style-bright.png +0 -0
  121. package/docsmd/images/screenshots/style-dataviz-dark.png +0 -0
  122. package/docsmd/images/screenshots/style-hybrid.png +0 -0
  123. package/docsmd/images/screenshots/style-osm.png +0 -0
  124. package/docsmd/images/screenshots/style-outdoor.png +0 -0
  125. package/docsmd/images/screenshots/style-pastel.png +0 -0
  126. package/docsmd/images/screenshots/style-satellite.png +0 -0
  127. package/docsmd/images/screenshots/style-streets-v2-dark.png +0 -0
  128. package/docsmd/images/screenshots/style-streets-v2-light.png +0 -0
  129. package/docsmd/images/screenshots/style-streets-v2.png +0 -0
  130. package/docsmd/images/screenshots/style-toner.png +0 -0
  131. package/docsmd/images/screenshots/style-topo.png +0 -0
  132. package/docsmd/images/screenshots/style-topographique.png +0 -0
  133. package/docsmd/images/screenshots/style-voyager.png +0 -0
  134. package/docsmd/images/screenshots/style-winter.png +0 -0
  135. package/images/JS-logo.svg +0 -4
  136. package/images/TS-logo.svg +0 -6
  137. package/images/maptiler-logo.svg +0 -19
  138. package/images/maptiler-sdk-logo.afdesign +0 -0
  139. package/images/maptiler-sdk-logo.svg +0 -66
  140. package/images/screenshots/alps.gif +0 -0
  141. package/images/screenshots/grandcanyon.gif +0 -0
  142. package/images/screenshots/lang-arabic.png +0 -0
  143. package/images/screenshots/lang-hebrew.png +0 -0
  144. package/images/screenshots/multilang.gif +0 -0
  145. package/images/screenshots/static-bounded-europe-1024.png +0 -0
  146. package/images/screenshots/static-bounded-europe-2048.png +0 -0
  147. package/images/screenshots/static-bounded-portugal-1024x2048.png +0 -0
  148. package/images/screenshots/static-bounded-portugal-2048x2048.png +0 -0
  149. package/images/screenshots/static-with-path.png +0 -0
  150. package/images/screenshots/style-basic-v2.png +0 -0
  151. package/images/screenshots/style-bright.png +0 -0
  152. package/images/screenshots/style-dataviz-dark.png +0 -0
  153. package/images/screenshots/style-hybrid.png +0 -0
  154. package/images/screenshots/style-osm.png +0 -0
  155. package/images/screenshots/style-outdoor.png +0 -0
  156. package/images/screenshots/style-pastel.png +0 -0
  157. package/images/screenshots/style-satellite.png +0 -0
  158. package/images/screenshots/style-streets-v2-dark.png +0 -0
  159. package/images/screenshots/style-streets-v2-light.png +0 -0
  160. package/images/screenshots/style-streets-v2.png +0 -0
  161. package/images/screenshots/style-toner.png +0 -0
  162. package/images/screenshots/style-topo.png +0 -0
  163. package/images/screenshots/style-topographique.png +0 -0
  164. package/images/screenshots/style-voyager.png +0 -0
  165. package/images/screenshots/style-winter.png +0 -0
  166. package/scripts/replace-path-with-content.js +0 -51
@@ -1 +1 @@
1
- {"version":3,"file":"maptiler-sdk.mjs","sources":["../src/language.ts","../src/config.ts","../src/defaults.ts","../src/CustomLogoControl.ts","../src/tools.ts","../src/mapstyle.ts","../src/TerrainControl.ts","../src/MaptilerNavigationControl.ts","../src/CustomGeolocateControl.ts","../src/Map.ts","../src/Point.ts","../src/index.ts"],"sourcesContent":["/**\n * Languages. Note that not all the languages of this list are available but the compatibility list may be expanded in the future.\n */\nconst Language = {\n /**\n * AUTO mode uses the language of the browser\n */\n AUTO: \"auto\",\n\n /**\n * Default fallback languages that uses latin charaters\n */\n LATIN: \"latin\",\n\n /**\n * Default fallback languages that uses non-latin charaters\n */\n NON_LATIN: \"nonlatin\",\n\n /**\n * Labels are in their local language, when available\n */\n LOCAL: \"\",\n\n ALBANIAN: \"sq\",\n AMHARIC: \"am\",\n ARABIC: \"ar\",\n ARMENIAN: \"hy\",\n AZERBAIJANI: \"az\",\n BASQUE: \"eu\",\n BELORUSSIAN: \"be\",\n BOSNIAN: \"bs\",\n BRETON: \"br\",\n BULGARIAN: \"bg\",\n CATALAN: \"ca\",\n CHINESE: \"zh\",\n CORSICAN: \"co\",\n CROATIAN: \"hr\",\n CZECH: \"cs\",\n DANISH: \"da\",\n DUTCH: \"nl\",\n ENGLISH: \"en\",\n ESPERANTO: \"eo\",\n ESTONIAN: \"et\",\n FINNISH: \"fi\",\n FRENCH: \"fr\",\n FRISIAN: \"fy\",\n GEORGIAN: \"ka\",\n GERMAN: \"de\",\n GREEK: \"el\",\n HEBREW: \"he\",\n HINDI: \"hi\",\n HUNGARIAN: \"hu\",\n ICELANDIC: \"is\",\n INDONESIAN: \"id\",\n IRISH: \"ga\",\n ITALIAN: \"it\",\n JAPANESE: \"ja\",\n JAPANESE_HIRAGANA: \"ja-Hira\",\n JAPANESE_KANA: \"ja_kana\",\n JAPANESE_LATIN: \"ja_rm\",\n JAPANESE_2018: \"ja-Latn\",\n KANNADA: \"kn\",\n KAZAKH: \"kk\",\n KOREAN: \"ko\",\n KOREAN_LATIN: \"ko-Latn\",\n KURDISH: \"ku\",\n ROMAN_LATIN: \"la\",\n LATVIAN: \"lv\",\n LITHUANIAN: \"lt\",\n LUXEMBOURGISH: \"lb\",\n MACEDONIAN: \"mk\",\n MALAYALAM: \"ml\",\n MALTESE: \"mt\",\n NORWEGIAN: \"no\",\n OCCITAN: \"oc\",\n POLISH: \"pl\",\n PORTUGUESE: \"pt\",\n ROMANIAN: \"ro\",\n ROMANSH: \"rm\",\n RUSSIAN: \"ru\",\n SCOTTISH_GAELIC: \"gd\",\n SERBIAN_CYRILLIC: \"sr\",\n SERBIAN_LATIN: \"sr-Latn\",\n SLOVAK: \"sk\",\n SLOVENE: \"sl\",\n SPANISH: \"es\",\n SWEDISH: \"sv\",\n TAMIL: \"ta\",\n TELUGU: \"te\",\n THAI: \"th\",\n TURKISH: \"tr\",\n UKRAINIAN: \"uk\",\n WELSH: \"cy\",\n} as const;\n\nconst languagesIsoSet = new Set(Object.values(Language) as Array<string>);\n\nfunction isLanguageSupported(lang: string): boolean {\n return languagesIsoSet.has(lang);\n}\n\nconst languageCodeSet = new Set(Object.values(Language));\n\n/**\n * Type representing the key of the Language object\n */\ntype LanguageKey = keyof typeof Language;\n\ntype Values<T> = T[keyof T];\n\n/**\n * Built-in languages values as strings\n */\ntype LanguageString = Values<typeof Language>;\n\nfunction getBrowserLanguage(): LanguageString {\n if (typeof navigator === \"undefined\") {\n return Intl.DateTimeFormat()\n .resolvedOptions()\n .locale.split(\"-\")[0] as LanguageString;\n }\n\n const canditatelangs = Array.from(\n new Set(navigator.languages.map((l) => l.split(\"-\")[0]))\n ).filter((l) => languageCodeSet.has(l as LanguageString));\n\n return canditatelangs.length\n ? (canditatelangs[0] as LanguageString)\n : Language.LATIN;\n}\n\nexport {\n Language,\n LanguageString,\n LanguageKey,\n getBrowserLanguage,\n isLanguageSupported,\n};\n","import EventEmitter from \"events\";\nimport { Language, LanguageString } from \"./language\";\nimport { config as clientConfig, FetchFunction } from \"@maptiler/client\";\nimport { Unit } from \"./unit\";\n\n/**\n * Configuration class for the SDK\n */\nclass SdkConfig extends EventEmitter {\n /**\n * The primary language. By default, the language of the web browser is used.\n */\n primaryLanguage: LanguageString | null = Language.AUTO;\n\n /**\n * The secondary language, to overwrite the default language defined in the map style.\n * This settings is highly dependant on the style compatibility and may not work in most cases.\n */\n secondaryLanguage: LanguageString | null = null;\n\n /**\n * Setting on whether of not the SDK runs with a session logic.\n * A \"session\" is started at the initialization of the SDK and finished when the browser\n * page is being refreshed.\n * When `session` is enabled (default: true), the extra URL param `mtsid` is added to queries\n * on the MapTiler Cloud API. This allows MapTiler to enable \"session based billing\".\n */\n session = true;\n\n /**\n * Unit to be used\n */\n private _unit: Unit = \"metric\";\n\n /**\n * MapTiler Cloud API key\n */\n private _apiKey = \"\";\n\n constructor() {\n super();\n }\n\n /**\n * Set the unit system\n */\n set unit(u: Unit) {\n this._unit = u;\n this.emit(\"unit\", u);\n }\n\n /**\n * Get the unit system\n */\n get unit(): Unit {\n return this._unit;\n }\n\n /**\n * Set the MapTiler Cloud API key\n */\n set apiKey(k: string) {\n this._apiKey = k;\n clientConfig.apiKey = k;\n this.emit(\"apiKey\", k);\n }\n\n /**\n * Get the MapTiler Cloud API key\n */\n get apiKey(): string {\n return this._apiKey;\n }\n\n /**\n * Set a the custom fetch function to replace the default one\n */\n set fetch(f: FetchFunction) {\n clientConfig.fetch = f;\n }\n\n /**\n * Get the fetch fucntion\n */\n get fetch(): FetchFunction | null {\n return clientConfig.fetch;\n }\n}\n\nconst config = new SdkConfig();\n\nexport { config, SdkConfig };\n","import { Language } from \"./language\";\n\n/**\n * Some default settings for the SDK\n */\nconst defaults = {\n maptilerLogoURL: \"https://api.maptiler.com/resources/logo.svg\",\n maptilerURL: \"https://www.maptiler.com/\",\n maptilerApiHost: \"api.maptiler.com\",\n rtlPluginURL:\n \"https://cdn.maptiler.com/mapbox-gl-rtl-text/v0.2.3/mapbox-gl-rtl-text.min.js\",\n primaryLanguage: Language.AUTO,\n secondaryLanguage: Language.LOCAL,\n terrainSourceURL: \"https://api.maptiler.com/tiles/terrain-rgb/tiles.json\",\n terrainSourceId: \"maptiler-terrain\",\n};\n\nObject.freeze(defaults);\n\nexport { defaults };\n","import maplibregl from \"maplibre-gl\";\nimport { defaults } from \"./defaults\";\nimport { Map } from \"./Map\";\n\ntype LogoOptions = maplibregl.LogoOptions & {\n logoURL?: string;\n linkURL?: string;\n};\n\n/**\n * This LogoControl extends the MapLibre LogoControl but instead can use any image URL and\n * any link URL. By default this is using MapTiler logo and URL.\n */\nexport class CustomLogoControl extends maplibregl.LogoControl {\n private logoURL = \"\";\n private linkURL = \"\";\n\n constructor(options: LogoOptions = {}) {\n super(options);\n\n this.logoURL = options.logoURL ?? defaults.maptilerLogoURL;\n this.linkURL = options.linkURL ?? defaults.maptilerURL;\n }\n\n onAdd(map: Map): HTMLElement {\n this._map = map;\n this._compact = this.options && this.options.compact;\n this._container = window.document.createElement(\"div\");\n this._container.className = \"maplibregl-ctrl\";\n const anchor = window.document.createElement(\"a\");\n anchor.style.backgroundRepeat = \"no-repeat\";\n anchor.style.cursor = \"pointer\";\n anchor.style.display = \"block\";\n anchor.style.height = \"23px\";\n anchor.style.margin = \"0 0 -4px -4px\";\n anchor.style.overflow = \"hidden\";\n anchor.style.width = \"88px\";\n anchor.style.backgroundImage = `url(${this.logoURL})`;\n anchor.style.backgroundSize = \"100px 30px\";\n anchor.style.width = \"100px\";\n anchor.style.height = \"30px\";\n\n anchor.target = \"_blank\";\n anchor.rel = \"noopener nofollow\";\n anchor.href = this.linkURL;\n anchor.setAttribute(\n \"aria-label\",\n this._map._getUIString(\"LogoControl.Title\")\n );\n anchor.setAttribute(\"rel\", \"noopener nofollow\");\n this._container.appendChild(anchor);\n this._container.style.display = \"block\";\n\n this._map.on(\"resize\", this._updateCompact);\n this._updateCompact();\n\n return this._container;\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport { defaults } from \"./defaults\";\n\nexport function enableRTL() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (maplibregl.getRTLTextPluginStatus() === \"unavailable\") {\n maplibregl.setRTLTextPlugin(\n defaults.rtlPluginURL,\n null,\n true // Lazy load the plugin\n );\n }\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/util.ts#L223\nexport function bindAll(fns: Array<string>, context: any): void {\n fns.forEach((fn) => {\n if (!context[fn]) {\n return;\n }\n context[fn] = context[fn].bind(context);\n });\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/dom.ts#L22\nexport function DOMcreate<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n className?: string,\n container?: HTMLElement\n): HTMLElementTagNameMap[K] {\n const el = window.document.createElement(tagName);\n if (className !== undefined) el.className = className;\n if (container) container.appendChild(el);\n return el;\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/dom.ts#L111\nexport function DOMremove(node: HTMLElement) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\n","import {\n MapStyle,\n ReferenceMapStyle,\n MapStyleVariant,\n mapStylePresetList,\n expandMapStyle,\n} from \"@maptiler/client\";\n\nexport function styleToStyle(\n style:\n | string\n | ReferenceMapStyle\n | MapStyleVariant\n | maplibregl.StyleSpecification\n | null\n | undefined\n): string | maplibregl.StyleSpecification {\n if (!style) {\n return MapStyle[mapStylePresetList[0].referenceStyleID]\n .getDefaultVariant()\n .getExpandedStyleURL();\n }\n\n // If the provided style is a shorthand (eg. \"streets-v2\") or a full style URL\n if (typeof style === \"string\" || style instanceof String) {\n return expandMapStyle(style);\n }\n\n if (style instanceof MapStyleVariant) {\n return style.getExpandedStyleURL();\n }\n\n if (style instanceof ReferenceMapStyle) {\n return (style.getDefaultVariant() as MapStyleVariant).getExpandedStyleURL();\n }\n\n return style as maplibregl.StyleSpecification;\n}\n","import { bindAll, DOMcreate, DOMremove } from \"./tools\";\n\nimport { Map } from \"./Map\";\nimport maplibregl from \"maplibre-gl\";\n\n/**\n * An `TerrainControl` control adds a button to turn terrain on and off.\n *\n * @implements {IControl}\n * @param {Object} [options]\n * @param {string} [options.id] The ID of the raster-dem source to use.\n * @param {Object} [options.options]\n * @param {number} [options.options.exaggeration]\n * @example\n * var map = new maplibregl.Map({TerrainControl: false})\n * .addControl(new maplibregl.TerrainControl({\n * source: \"terrain\"\n * }));\n */\nexport class TerrainControl implements maplibregl.IControl {\n _map: Map;\n _container: HTMLElement;\n _terrainButton: HTMLButtonElement;\n\n constructor() {\n bindAll([\"_toggleTerrain\", \"_updateTerrainIcon\"], this);\n }\n\n onAdd(map: Map) {\n this._map = map;\n this._container = DOMcreate(\"div\", \"maplibregl-ctrl maplibregl-ctrl-group\");\n this._terrainButton = DOMcreate(\n \"button\",\n \"maplibregl-ctrl-terrain\",\n this._container\n );\n DOMcreate(\"span\", \"maplibregl-ctrl-icon\", this._terrainButton).setAttribute(\n \"aria-hidden\",\n \"true\"\n );\n this._terrainButton.type = \"button\";\n this._terrainButton.addEventListener(\"click\", this._toggleTerrain);\n\n this._updateTerrainIcon();\n this._map.on(\"terrain\", this._updateTerrainIcon);\n return this._container;\n }\n\n onRemove() {\n DOMremove(this._container);\n this._map.off(\"terrain\", this._updateTerrainIcon);\n this._map = undefined;\n }\n\n _toggleTerrain() {\n // if (this._map.getTerrain()) {\n // this._map.setTerrain(null);\n // } else {\n // this._map.setTerrain(this.options);\n // }\n\n if (this._map.hasTerrain()) {\n this._map.disableTerrain();\n } else {\n this._map.enableTerrain();\n }\n\n this._updateTerrainIcon();\n }\n\n _updateTerrainIcon() {\n this._terrainButton.classList.remove(\"maplibregl-ctrl-terrain\");\n this._terrainButton.classList.remove(\"maplibregl-ctrl-terrain-enabled\");\n // if (this._map.terrain) {\n if (this._map.hasTerrain()) {\n this._terrainButton.classList.add(\"maplibregl-ctrl-terrain-enabled\");\n this._terrainButton.title = this._map._getUIString(\n \"TerrainControl.disableTerrain\"\n );\n } else {\n this._terrainButton.classList.add(\"maplibregl-ctrl-terrain\");\n this._terrainButton.title = this._map._getUIString(\n \"TerrainControl.enableTerrain\"\n );\n }\n }\n}\n","import maplibregl from \"maplibre-gl\";\n\ntype HTMLButtonElementPlus = HTMLButtonElement & {\n clickFunction: (e?: any) => unknown;\n};\n\nexport class MaptilerNavigationControl extends maplibregl.NavigationControl {\n constructor() {\n super({\n showCompass: true,\n showZoom: true,\n visualizePitch: true,\n });\n\n // Removing the default click event\n this._compass.removeEventListener(\n \"click\",\n (this._compass as HTMLButtonElementPlus).clickFunction\n );\n\n // Adding custom click event\n this._compass.addEventListener(\"click\", (e) => {\n {\n const currentPitch = this._map.getPitch();\n if (currentPitch === 0) {\n this._map.easeTo({ pitch: Math.min(this._map.getMaxPitch(), 80) });\n } else {\n if (this.options.visualizePitch) {\n this._map.resetNorthPitch({}, { originalEvent: e });\n } else {\n this._map.resetNorth({}, { originalEvent: e });\n }\n }\n }\n });\n }\n\n /**\n * Overloading: the button now stores its click callback so that we can later on delete it and replace it\n */\n _createButton(\n className: string,\n fn: (e?: any) => unknown\n ): HTMLButtonElementPlus {\n const button = super._createButton(className, fn) as HTMLButtonElementPlus;\n button.clickFunction = fn;\n return button;\n }\n\n /**\n * Overloading: Limit how flat the compass icon can get\n */\n _rotateCompassArrow() {\n const rotate = this.options.visualizePitch\n ? `scale(${Math.min(\n 1.5,\n 1 /\n Math.pow(Math.cos(this._map.transform.pitch * (Math.PI / 180)), 0.5)\n )}) rotateX(${Math.min(70, this._map.transform.pitch)}deg) rotateZ(${\n this._map.transform.angle * (180 / Math.PI)\n }deg)`\n : `rotate(${this._map.transform.angle * (180 / Math.PI)}deg)`;\n\n this._compassIcon.style.transform = rotate;\n }\n}\n","import { GeolocateControl, LngLat, LngLatLike, Marker } from \"maplibre-gl\";\nimport { DOMcreate } from \"./tools\";\n\nexport class CustomGeolocateControl extends GeolocateControl {\n private lastUpdatedCenter: LngLat;\n private lastUpdatedZoom: number;\n\n /**\n * Update the camera location to center on the current position\n *\n * @param {Position} position the Geolocation API Position\n * @private\n */\n _updateCamera(position: GeolocationPosition) {\n const center = new LngLat(\n position.coords.longitude,\n position.coords.latitude\n );\n const radius = position.coords.accuracy;\n const bearing = this._map.getBearing();\n const options = {\n bearing,\n ...this.options.fitBoundsOptions,\n };\n\n console.log(\"moving camera\");\n\n this._map.fitBounds(center.toBounds(radius), options, {\n geolocateSource: true, // tag this camera change so it won't cause the control to change to background state\n });\n\n let hasFittingBeenDisrupted = false;\n\n const flagFittingDisruption = () => {\n console.log(\"DISRUPTED FITTING!\");\n hasFittingBeenDisrupted = true;\n };\n\n this._map.once(\"click\", flagFittingDisruption);\n this._map.once(\"dblclick\", flagFittingDisruption);\n this._map.once(\"dragstart\", flagFittingDisruption);\n this._map.once(\"mousedown\", flagFittingDisruption);\n this._map.once(\"touchstart\", flagFittingDisruption);\n this._map.once(\"wheel\", flagFittingDisruption);\n\n this._map.once(\"moveend\", () => {\n console.log(\"done moving, with disruption:\", hasFittingBeenDisrupted);\n\n // Removing the events if not used\n this._map.off(\"click\", flagFittingDisruption);\n this._map.off(\"dblclick\", flagFittingDisruption);\n this._map.off(\"dragstart\", flagFittingDisruption);\n this._map.off(\"mousedown\", flagFittingDisruption);\n this._map.off(\"touchstart\", flagFittingDisruption);\n this._map.off(\"wheel\", flagFittingDisruption);\n\n if (hasFittingBeenDisrupted) {\n return;\n }\n\n this.lastUpdatedCenter = this._map.getCenter();\n this.lastUpdatedZoom = this._map.getZoom();\n });\n }\n\n _setupUI(supported: boolean) {\n this.lastUpdatedCenter = this._map.getCenter();\n this.lastUpdatedZoom = this._map.getZoom();\n\n this._container.addEventListener(\"contextmenu\", (e: MouseEvent) =>\n e.preventDefault()\n );\n this._geolocateButton = DOMcreate(\n \"button\",\n \"maplibregl-ctrl-geolocate\",\n this._container\n );\n DOMcreate(\n \"span\",\n \"maplibregl-ctrl-icon\",\n this._geolocateButton\n ).setAttribute(\"aria-hidden\", \"true\");\n this._geolocateButton.type = \"button\";\n\n if (supported === false) {\n // warnOnce('Geolocation support is not available so the GeolocateControl will be disabled.');\n const title = this._map._getUIString(\n \"GeolocateControl.LocationNotAvailable\"\n );\n this._geolocateButton.disabled = true;\n this._geolocateButton.title = title;\n this._geolocateButton.setAttribute(\"aria-label\", title);\n } else {\n const title = this._map._getUIString(\"GeolocateControl.FindMyLocation\");\n this._geolocateButton.title = title;\n this._geolocateButton.setAttribute(\"aria-label\", title);\n }\n\n if (this.options.trackUserLocation) {\n this._geolocateButton.setAttribute(\"aria-pressed\", \"false\");\n this._watchState = \"OFF\";\n }\n\n // when showUserLocation is enabled, keep the Geolocate button disabled until the device location marker is setup on the map\n if (this.options.showUserLocation) {\n this._dotElement = DOMcreate(\"div\", \"maplibregl-user-location-dot\");\n\n this._userLocationDotMarker = new Marker(this._dotElement);\n\n this._circleElement = DOMcreate(\n \"div\",\n \"maplibregl-user-location-accuracy-circle\"\n );\n this._accuracyCircleMarker = new Marker({\n element: this._circleElement,\n pitchAlignment: \"map\",\n });\n\n if (this.options.trackUserLocation) this._watchState = \"OFF\";\n\n this._map.on(\"move\", this._onZoom);\n }\n\n this._geolocateButton.addEventListener(\"click\", this.trigger.bind(this));\n\n this._setup = true;\n\n // when the camera is changed (and it's not as a result of the Geolocation Control) change\n // the watch mode to background watch, so that the marker is updated but not the camera.\n // Addition: Yet the status change does not occur if the ditance it has moved to is less than\n // one meter from the last auto-updated position. This is to guarrantee that if the move\n // is a zoom, rotation or pitch (where the center stays the same) then we can keep the ACTIVE_LOCK\n // mode ON.\n if (this.options.trackUserLocation) {\n this._map.on(\"moveend\", (event: any) => {\n const fromResize =\n event.originalEvent && event.originalEvent.type === \"resize\";\n const movingDistance = this.lastUpdatedCenter.distanceTo(\n this._map.getCenter()\n );\n\n if (\n !event.geolocateSource &&\n this._watchState === \"ACTIVE_LOCK\" &&\n !fromResize &&\n movingDistance > 1\n ) {\n this._watchState = \"BACKGROUND\";\n this._geolocateButton.classList.add(\n \"maplibregl-ctrl-geolocate-background\"\n );\n this._geolocateButton.classList.remove(\n \"maplibregl-ctrl-geolocate-active\"\n );\n\n this.fire(new Event(\"trackuserlocationend\"));\n }\n });\n }\n }\n\n _updateCircleRadius() {\n if (\n this._watchState !== \"BACKGROUND\" &&\n this._watchState !== \"ACTIVE_LOCK\"\n ) {\n return;\n }\n\n const lastKnownLocation: LngLatLike = [\n this._lastKnownPosition.coords.longitude,\n this._lastKnownPosition.coords.latitude,\n ];\n\n const projectedLocation = this._map.project(lastKnownLocation);\n const a = this._map.unproject([projectedLocation.x, projectedLocation.y]);\n const b = this._map.unproject([\n projectedLocation.x + 20,\n projectedLocation.y,\n ]);\n const metersPerPixel = a.distanceTo(b) / 20;\n\n const circleDiameter = Math.ceil((2.0 * this._accuracy) / metersPerPixel);\n this._circleElement.style.width = `${circleDiameter}px`;\n this._circleElement.style.height = `${circleDiameter}px`;\n }\n\n _onZoom() {\n if (this.options.showUserLocation && this.options.showAccuracyCircle) {\n this._updateCircleRadius();\n }\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport { Base64 } from \"js-base64\";\nimport type {\n StyleSpecification,\n MapOptions as MapOptionsML,\n ControlPosition,\n StyleOptions,\n} from \"maplibre-gl\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { ReferenceMapStyle, MapStyleVariant } from \"@maptiler/client\";\nimport { config } from \"./config\";\nimport { defaults } from \"./defaults\";\nimport { CustomLogoControl } from \"./CustomLogoControl\";\nimport { enableRTL } from \"./tools\";\nimport {\n getBrowserLanguage,\n isLanguageSupported,\n Language,\n LanguageString,\n} from \"./language\";\nimport { styleToStyle } from \"./mapstyle\";\nimport { TerrainControl } from \"./TerrainControl\";\nimport { MaptilerNavigationControl } from \"./MaptilerNavigationControl\";\nimport { geolocation } from \"@maptiler/client\";\nimport { CustomGeolocateControl } from \"./CustomGeolocateControl\";\n\n// StyleSwapOptions is not exported by Maplibre, but we can redefine it (used for setStyle)\nexport type TransformStyleFunction = (\n previous: StyleSpecification,\n next: StyleSpecification\n) => StyleSpecification;\n\nexport type StyleSwapOptions = {\n diff?: boolean;\n transformStyle?: TransformStyleFunction;\n};\n\nconst MAPTILER_SESSION_ID = uuidv4();\n\nexport const GeolocationType: {\n POINT: \"POINT\";\n COUNTRY: \"COUNTRY\";\n} = {\n POINT: \"POINT\",\n COUNTRY: \"COUNTRY\",\n} as const;\n\n/**\n * Options to provide to the `Map` constructor\n */\nexport type MapOptions = Omit<MapOptionsML, \"style\" | \"maplibreLogo\"> & {\n /**\n * Style of the map. Can be:\n * - a full style URL (possibly with API key)\n * - a shorthand with only the MapTIler style name (eg. `\"streets-v2\"`)\n * - a longer form with the prefix `\"maptiler://\"` (eg. `\"maptiler://streets-v2\"`)\n */\n style?: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string;\n\n /**\n * Shows the MapTiler logo if `true`. Note that the logo is always displayed on free plan.\n */\n maptilerLogo?: boolean;\n\n /**\n * Enables 3D terrain if `true`. (default: `false`)\n */\n terrain?: boolean;\n\n /**\n * Exaggeration factor of the terrain. (default: `1`, no exaggeration)\n */\n terrainExaggeration?: number;\n\n /**\n * Show the navigation control. (default: `true`, will hide if `false`)\n */\n navigationControl?: boolean | ControlPosition;\n\n /**\n * Show the terrain control. (default: `false`, will show if `true`)\n */\n terrainControl?: boolean | ControlPosition;\n\n /**\n * Show the geolocate control. (default: `true`, will hide if `false`)\n */\n geolocateControl?: boolean | ControlPosition;\n\n /**\n * Show the scale control. (default: `false`, will show if `true`)\n */\n scaleControl?: boolean | ControlPosition;\n\n /**\n * Show the full screen control. (default: `false`, will show if `true`)\n */\n fullscreenControl?: boolean | ControlPosition;\n\n /**\n * Method to position the map at a given geolocation. Only if:\n * - `hash` is `false`\n * - `center` is not provided\n *\n * If the value is `true` of `\"POINT\"` (given by `GeolocationType.POINT`) then the positionning uses the MapTiler Cloud\n * Geolocation to find the non-GPS location point.\n * The zoom level can be provided in the `Map` constructor with the `zoom` option or will be `13` if not provided.\n *\n * If the value is `\"COUNTRY\"` (given by `GeolocationType.COUNTRY`) then the map is centered around the bounding box of the country.\n * In this case, the `zoom` option will be ignored.\n *\n * If the value is `false`, no geolocation is performed and the map centering and zooming depends on other options or on\n * the built-in defaults.\n *\n * If this option is non-false and the options `center` is also provided, then `center` prevails.\n *\n * Default: `false`\n */\n geolocate?: typeof GeolocationType[keyof typeof GeolocationType] | boolean;\n};\n\n/**\n * The Map class can be instanciated to display a map in a `<div>`\n */\nexport class Map extends maplibregl.Map {\n private languageShouldUpdate = false;\n private isStyleInitialized = false;\n private isTerrainEnabled = false;\n private terrainExaggeration = 1;\n\n constructor(options: MapOptions) {\n const style = styleToStyle(options.style);\n console.log(style);\n\n const hashPreConstructor = location.hash;\n\n if (!config.apiKey) {\n console.warn(\n \"MapTiler Cloud API key is not set. Visit https://maptiler.com and try Cloud for free!\"\n );\n }\n\n // calling the map constructor with full length style\n super({\n ...options,\n style,\n maplibreLogo: false,\n\n transformRequest: (url: string) => {\n const reqUrl = new URL(url);\n\n if (reqUrl.host === defaults.maptilerApiHost) {\n if (!reqUrl.searchParams.has(\"key\")) {\n reqUrl.searchParams.append(\"key\", config.apiKey);\n }\n\n if (config.session) {\n reqUrl.searchParams.append(\"mtsid\", MAPTILER_SESSION_ID);\n }\n }\n\n return {\n url: reqUrl.href,\n headers: {},\n };\n },\n });\n\n // Map centering and geolocation\n this.once(\"styledata\", async () => {\n // Not using geolocation centering if...\n\n if (options.geolocate === false) {\n return;\n }\n\n // ... a center is provided in options\n if (options.center) {\n return;\n }\n\n // ... the hash option is enabled and a hash is present in the URL\n if (options.hash && !!hashPreConstructor) {\n return;\n }\n\n // If the geolocation is set to COUNTRY:\n try {\n if (options.geolocate === GeolocationType.COUNTRY) {\n await this.fitToIpBounds();\n return;\n }\n } catch (e) {\n // not raising\n console.warn(e.message);\n }\n\n // As a fallback, we want to center the map on the visitor. First with IP geolocation...\n let ipLocatedCameraHash = null;\n try {\n await this.centerOnIpPoint(options.zoom);\n ipLocatedCameraHash = this.getCameraHash();\n } catch (e) {\n // not raising\n console.warn(e.message);\n }\n\n // Then, the get a more precise location, we rely on the browser location, but only if it was already granted\n // before (we don't want to ask wih a popup at launch time)\n const locationResult = await navigator.permissions.query({\n name: \"geolocation\",\n });\n\n if (locationResult.state === \"granted\") {\n navigator.geolocation.getCurrentPosition(\n // success callback\n (data) => {\n // If the user has already moved since the ip location, then we no longer want to move the center\n if (ipLocatedCameraHash !== this.getCameraHash()) {\n return;\n }\n\n this.easeTo({\n center: [data.coords.longitude, data.coords.latitude],\n zoom: options.zoom || 12,\n duration: 2000,\n });\n },\n\n // error callback\n null,\n\n // options\n {\n maximumAge: 24 * 3600 * 1000, // a day in millisec\n timeout: 5000, // milliseconds\n enableHighAccuracy: false,\n }\n );\n }\n });\n\n // Check if language has been modified and. If so, it will be updated during the next lifecycle step\n this.on(\"styledataloading\", () => {\n this.languageShouldUpdate =\n !!config.primaryLanguage || !!config.secondaryLanguage;\n });\n\n // If the config includes language changing, we must update the map language\n this.on(\"styledata\", () => {\n if (\n config.primaryLanguage &&\n (this.languageShouldUpdate || !this.isStyleInitialized)\n ) {\n this.setPrimaryLanguage(config.primaryLanguage);\n }\n\n if (\n config.secondaryLanguage &&\n (this.languageShouldUpdate || !this.isStyleInitialized)\n ) {\n this.setSecondaryLanguage(config.secondaryLanguage);\n }\n\n this.languageShouldUpdate = false;\n this.isStyleInitialized = true;\n });\n\n // this even is in charge of reaplying the terrain elevation after the\n // style has changed because depending on the src/tgt style,\n // the style logic is not always able to resolve the application of terrain\n this.on(\"styledata\", () => {\n // the styling resolver did no manage to reaply the terrain,\n // so let's reload it\n if (this.getTerrain() === null && this.isTerrainEnabled) {\n this.enableTerrain(this.terrainExaggeration);\n }\n });\n\n // load the Right-to-Left text plugin (will happen only once)\n this.once(\"load\", async () => {\n enableRTL();\n });\n\n // Update logo and attibution\n this.once(\"load\", async () => {\n let tileJsonContent = { logo: null };\n\n try {\n const possibleSources = Object.keys(this.style.sourceCaches)\n .map((sourceName) => this.getSource(sourceName))\n .filter(\n (s: any) =>\n typeof s.url === \"string\" && s.url.includes(\"tiles.json\")\n );\n\n const styleUrl = new URL(\n (possibleSources[0] as maplibregl.VectorTileSource).url\n );\n\n if (!styleUrl.searchParams.has(\"key\")) {\n styleUrl.searchParams.append(\"key\", config.apiKey);\n }\n\n const tileJsonRes = await fetch(styleUrl.href);\n tileJsonContent = await tileJsonRes.json();\n } catch (e) {\n // No tiles.json found (should not happen on maintained styles)\n }\n\n // The attribution and logo must show when required\n if (\"logo\" in tileJsonContent && tileJsonContent.logo) {\n const logoURL: string = tileJsonContent.logo;\n\n this.addControl(\n new CustomLogoControl({ logoURL }),\n options.logoPosition\n );\n\n // if attribution in option is `false` but the the logo shows up in the tileJson, then the attribution must show anyways\n if (options.attributionControl === false) {\n this.addControl(new maplibregl.AttributionControl(options));\n }\n } else if (options.maptilerLogo) {\n this.addControl(new CustomLogoControl(), options.logoPosition);\n }\n\n // the other controls at init time but be after\n // (due to the async nature of logo control)\n\n // By default, no scale control\n if (options.scaleControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.scaleControl === true || options.scaleControl === undefined\n ? \"bottom-right\"\n : options.scaleControl\n ) as ControlPosition;\n\n const scaleControl = new maplibregl.ScaleControl({ unit: config.unit });\n this.addControl(scaleControl, position);\n config.on(\"unit\", (unit) => {\n scaleControl.setUnit(unit);\n });\n }\n\n if (options.navigationControl !== false) {\n // default position, if not provided, is top left corner\n const position = (\n options.navigationControl === true ||\n options.navigationControl === undefined\n ? \"top-right\"\n : options.navigationControl\n ) as ControlPosition;\n this.addControl(new MaptilerNavigationControl(), position);\n }\n\n if (options.geolocateControl !== false) {\n // default position, if not provided, is top left corner\n const position = (\n options.geolocateControl === true ||\n options.geolocateControl === undefined\n ? \"top-right\"\n : options.geolocateControl\n ) as ControlPosition;\n\n this.addControl(\n // new maplibregl.GeolocateControl({\n new CustomGeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n maximumAge: 0,\n timeout: 6000 /* 6 sec */,\n },\n fitBoundsOptions: {\n maxZoom: 15,\n },\n trackUserLocation: true,\n showAccuracyCircle: true,\n showUserLocation: true,\n }),\n position\n );\n }\n\n if (options.terrainControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.terrainControl === true ||\n options.terrainControl === undefined\n ? \"top-right\"\n : options.terrainControl\n ) as ControlPosition;\n this.addControl(new TerrainControl(), position);\n }\n\n // By default, no fullscreen control\n if (options.fullscreenControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.fullscreenControl === true ||\n options.fullscreenControl === undefined\n ? \"top-right\"\n : options.fullscreenControl\n ) as ControlPosition;\n\n this.addControl(new maplibregl.FullscreenControl({}), position);\n }\n });\n\n // enable 3D terrain if provided in options\n if (options.terrain) {\n this.enableTerrain(\n options.terrainExaggeration ?? this.terrainExaggeration\n );\n }\n }\n\n /**\n * Update the style of the map.\n * Can be:\n * - a full style URL (possibly with API key)\n * - a shorthand with only the MapTIler style name (eg. `\"streets-v2\"`)\n * - a longer form with the prefix `\"maptiler://\"` (eg. `\"maptiler://streets-v2\"`)\n * @param style\n * @param options\n * @returns\n */\n setStyle(\n style: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string,\n options?: StyleSwapOptions & StyleOptions\n ) {\n return super.setStyle(styleToStyle(style), options);\n }\n\n /**\n * Define the primary language of the map. Note that not all the languages shorthands provided are available.\n * This function is a short for `.setPrimaryLanguage()`\n * @param language\n */\n setLanguage(language: LanguageString = defaults.primaryLanguage) {\n if (language === Language.AUTO) {\n return this.setLanguage(getBrowserLanguage());\n }\n this.setPrimaryLanguage(language);\n }\n\n /**\n * Define the primary language of the map. Note that not all the languages shorthands provided are available.\n * @param language\n */\n setPrimaryLanguage(language: LanguageString = defaults.primaryLanguage) {\n if (!isLanguageSupported(language as string)) {\n return;\n }\n\n this.onStyleReady(() => {\n if (language === Language.AUTO) {\n return this.setPrimaryLanguage(getBrowserLanguage());\n }\n\n // We want to keep track of it to apply the language again when changing the style\n config.primaryLanguage = language;\n\n const layers = this.getStyle().layers;\n\n // detects pattern like \"{name:somelanguage}\" with loose spacing\n const strLanguageRegex = /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // detects pattern like \"name:somelanguage\" with loose spacing\n const strLanguageInArrayRegex = /^\\s*name\\s*(:\\s*(\\S*))?\\s*$/;\n\n // for string based bilingual lang such as \"{name:latin} {name:nonlatin}\" or \"{name:latin} {name}\"\n const strBilingualRegex =\n /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}(\\s*){\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // Regex to capture when there are more info, such as mountains elevation with unit m/ft\n const strMoreInfoRegex = /^(.*)({\\s*name\\s*(:\\s*(\\S*))?\\s*})(.*)$/;\n\n const langStr = language ? `name:${language}` : \"name\"; // to handle local lang\n const replacer = [\n \"case\",\n [\"has\", langStr],\n [\"get\", langStr],\n [\"get\", \"name:latin\"],\n ];\n\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n const layout = layer.layout;\n\n if (!layout) {\n continue;\n }\n\n if (!layout[\"text-field\"]) {\n continue;\n }\n\n const textFieldLayoutProp = this.getLayoutProperty(\n layer.id,\n \"text-field\"\n );\n\n // Note:\n // The value of the 'text-field' property can take multiple shape;\n // 1. can be an array with 'concat' on its first element (most likely means bilingual)\n // 2. can be an array with 'get' on its first element (monolingual)\n // 3. can be a string of shape '{name:latin}'\n // 4. can be a string referencing another prop such as '{housenumber}' or '{ref}'\n //\n // The case 1, 2 and 3 will be updated while maintaining their original type and shape.\n // The case 3 will not be updated\n\n let regexMatch;\n\n // This is case 1\n if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"concat\"\n ) {\n const newProp = textFieldLayoutProp.slice(); // newProp is Array\n // The style could possibly have defined more than 2 concatenated language strings but we only want to edit the first\n // The style could also define that there are more things being concatenated and not only languages\n\n for (let j = 0; j < textFieldLayoutProp.length; j += 1) {\n const elem = textFieldLayoutProp[j];\n\n // we are looking for an elem of shape '{name:somelangage}' (string) of `[\"get\", \"name:somelanguage\"]` (array)\n\n // the entry of of shape '{name:somelangage}', possibly with loose spacing\n if (\n (typeof elem === \"string\" || elem instanceof String) &&\n strLanguageRegex.exec(elem.toString())\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n }\n // the entry is of an array of shape `[\"get\", \"name:somelanguage\"]`\n else if (\n Array.isArray(elem) &&\n elem.length >= 2 &&\n elem[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(elem[1].toString())\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n } else if (\n Array.isArray(elem) &&\n elem.length === 4 &&\n elem[0].trim().toLowerCase() === \"case\"\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n }\n }\n\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // This is case 2\n else if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(textFieldLayoutProp[1].toString())\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // This is case 3\n else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n strLanguageRegex.exec(textFieldLayoutProp.toString())\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length === 4 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"case\"\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strBilingualRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const newProp = `{${langStr}}${regexMatch[3]}{name${\n regexMatch[4] || \"\"\n }}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strMoreInfoRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const newProp = `${regexMatch[1]}{${langStr}}${regexMatch[5]}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n }\n });\n }\n\n /**\n * Define the secondary language of the map.\n * Note that most styles do not allow a secondary language and this function only works if the style allows (no force adding)\n * @param language\n */\n setSecondaryLanguage(language: LanguageString = defaults.secondaryLanguage) {\n if (!isLanguageSupported(language as string)) {\n return;\n }\n\n this.onStyleReady(() => {\n if (language === Language.AUTO) {\n return this.setSecondaryLanguage(getBrowserLanguage());\n }\n\n // We want to keep track of it to apply the language again when changing the style\n config.secondaryLanguage = language;\n\n const layers = this.getStyle().layers;\n\n // detects pattern like \"{name:somelanguage}\" with loose spacing\n const strLanguageRegex = /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // detects pattern like \"name:somelanguage\" with loose spacing\n const strLanguageInArrayRegex = /^\\s*name\\s*(:\\s*(\\S*))?\\s*$/;\n\n // for string based bilingual lang such as \"{name:latin} {name:nonlatin}\" or \"{name:latin} {name}\"\n const strBilingualRegex =\n /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}(\\s*){\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n let regexMatch;\n\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n const layout = layer.layout;\n\n if (!layout) {\n continue;\n }\n\n if (!layout[\"text-field\"]) {\n continue;\n }\n\n const textFieldLayoutProp = this.getLayoutProperty(\n layer.id,\n \"text-field\"\n );\n\n let newProp;\n\n // Note:\n // The value of the 'text-field' property can take multiple shape;\n // 1. can be an array with 'concat' on its first element (most likely means bilingual)\n // 2. can be an array with 'get' on its first element (monolingual)\n // 3. can be a string of shape '{name:latin}'\n // 4. can be a string referencing another prop such as '{housenumber}' or '{ref}'\n //\n // Only the case 1 will be updated because we don't want to change the styling (read: add a secondary language where the original styling is only displaying 1)\n\n // This is case 1\n if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"concat\"\n ) {\n newProp = textFieldLayoutProp.slice(); // newProp is Array\n // The style could possibly have defined more than 2 concatenated language strings but we only want to edit the first\n // The style could also define that there are more things being concatenated and not only languages\n\n let languagesAlreadyFound = 0;\n\n for (let j = 0; j < textFieldLayoutProp.length; j += 1) {\n const elem = textFieldLayoutProp[j];\n\n // we are looking for an elem of shape '{name:somelangage}' (string) of `[\"get\", \"name:somelanguage\"]` (array)\n\n // the entry of of shape '{name:somelangage}', possibly with loose spacing\n if (\n (typeof elem === \"string\" || elem instanceof String) &&\n strLanguageRegex.exec(elem.toString())\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j] = `{name:${language}}`;\n break; // we just want to update the secondary language\n }\n\n languagesAlreadyFound += 1;\n }\n // the entry is of an array of shape `[\"get\", \"name:somelanguage\"]`\n else if (\n Array.isArray(elem) &&\n elem.length >= 2 &&\n elem[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(elem[1].toString())\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j][1] = `name:${language}`;\n break; // we just want to update the secondary language\n }\n\n languagesAlreadyFound += 1;\n } else if (\n Array.isArray(elem) &&\n elem.length === 4 &&\n elem[0].trim().toLowerCase() === \"case\"\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j] = [\"get\", `name:${language}`]; // the situation with 'case' is supposed to only happen with the primary lang\n break; // but in case a styling also does that for secondary...\n }\n\n languagesAlreadyFound += 1;\n }\n }\n\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // the language (both first and second) are defined into a single string model\n else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strBilingualRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const langStr = language ? `name:${language}` : \"name\"; // to handle local lang\n newProp = `{name${regexMatch[1] || \"\"}}${regexMatch[3]}{${langStr}}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n }\n });\n }\n\n /**\n * Get the exaggeration factor applied to the terrain\n * @returns\n */\n getTerrainExaggeration(): number {\n return this.terrainExaggeration;\n }\n\n /**\n * Know if terrian is enabled or not\n * @returns\n */\n hasTerrain(): boolean {\n return this.isTerrainEnabled;\n }\n\n /**\n * Enables the 3D terrain visualization\n * @param exaggeration\n * @returns\n */\n enableTerrain(exaggeration = this.terrainExaggeration) {\n if (exaggeration < 0) {\n console.warn(\"Terrain exaggeration cannot be negative.\");\n return;\n }\n\n const terrainInfo = this.getTerrain();\n\n const addTerrain = () => {\n // When style is changed,\n this.isTerrainEnabled = true;\n this.terrainExaggeration = exaggeration;\n\n this.addSource(defaults.terrainSourceId, {\n type: \"raster-dem\",\n url: defaults.terrainSourceURL,\n });\n this.setTerrain({\n source: defaults.terrainSourceId,\n exaggeration: exaggeration,\n });\n };\n\n // The terrain has already been loaded,\n // we just update the exaggeration.\n if (terrainInfo) {\n this.setTerrain({ ...terrainInfo, exaggeration });\n return;\n }\n\n if (this.loaded() || this.isTerrainEnabled) {\n addTerrain();\n } else {\n this.once(\"load\", () => {\n if (this.getTerrain() && this.getSource(defaults.terrainSourceId)) {\n return;\n }\n addTerrain();\n });\n }\n }\n\n /**\n * Disable the 3D terrain visualization\n */\n disableTerrain() {\n this.isTerrainEnabled = false;\n this.setTerrain(null);\n if (this.getSource(defaults.terrainSourceId)) {\n this.removeSource(defaults.terrainSourceId);\n }\n }\n\n /**\n * Sets the 3D terrain exageration factor.\n * Note: this is only a shortcut to `.enableTerrain()`\n * @param exaggeration\n */\n setTerrainExaggeration(exaggeration: number) {\n this.enableTerrain(exaggeration);\n }\n\n // getLanguages() {\n // const layers = this.getStyle().layers;\n\n // for (let i = 0; i < layers.length; i += 1) {\n // const layer = layers[i];\n // const layout = layer.layout;\n\n // if (!layout) {\n // continue;\n // }\n\n // if (!layout[\"text-field\"]) {\n // continue;\n // }\n\n // const textFieldLayoutProp = this.getLayoutProperty(\n // layer.id,\n // \"text-field\"\n // );\n // }\n // }\n\n /**\n * Perform an action when the style is ready. It could be at the moment of calling this method\n * or later.\n * @param cb\n */\n private onStyleReady(cb) {\n if (this.isStyleLoaded()) {\n cb();\n } else {\n this.once(\"styledata\", () => {\n cb();\n });\n }\n }\n\n async fitToIpBounds() {\n const ipGeolocateResult = await geolocation.info();\n this.fitBounds(\n ipGeolocateResult.country_bounds as [number, number, number, number],\n {\n duration: 0,\n padding: 100,\n }\n );\n }\n\n async centerOnIpPoint(zoom: number | undefined) {\n const ipGeolocateResult = await geolocation.info();\n this.jumpTo({\n center: [ipGeolocateResult.longitude, ipGeolocateResult.latitude],\n zoom: zoom || 11,\n });\n }\n\n getCameraHash() {\n const hashBin = new Float32Array(5);\n const center = this.getCenter();\n hashBin[0] = center.lng;\n hashBin[1] = center.lat;\n hashBin[2] = this.getZoom();\n hashBin[3] = this.getPitch();\n hashBin[4] = this.getBearing();\n return Base64.fromUint8Array(new Uint8Array(hashBin.buffer));\n }\n}\n","/**\n * This is TypeScript rewrite of the Point class to use instead of the version imported in MapLibre.\n * It also uses a class instead of prototypes.\n */\n\n/**\n * Row major 2x2 matrix\n */\nexport type Matrix2 = [number, number, number, number];\n\n/**\n * a point\n * @param x\n * @param y\n */\nexport class Point {\n public x: number;\n public y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n private _matMult(m: Matrix2): Point {\n const x = m[0] * this.x + m[1] * this.y;\n const y = m[2] * this.x + m[3] * this.y;\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _add(p: Point): Point {\n this.x += p.x;\n this.y += p.y;\n return this;\n }\n\n private _sub(p: Point): Point {\n this.x -= p.x;\n this.y -= p.y;\n return this;\n }\n\n private _mult(k: number): Point {\n this.x *= k;\n this.y *= k;\n return this;\n }\n\n private _div(k: number): Point {\n this.x /= k;\n this.y /= k;\n return this;\n }\n\n private _multByPoint(p: Point): Point {\n this.x *= p.x;\n this.y *= p.y;\n return this;\n }\n\n private _divByPoint(p: Point): Point {\n this.x /= p.x;\n this.y /= p.y;\n return this;\n }\n\n private _unit(): Point {\n this._div(this.mag());\n return this;\n }\n\n private _perp(): Point {\n const y = this.y;\n this.y = this.x;\n this.x = -y;\n return this;\n }\n\n private _rotate(angle: number): Point {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = cos * this.x - sin * this.y;\n const y = sin * this.x + cos * this.y;\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _rotateAround(angle: number, p: Point): Point {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y);\n const y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _round(): Point {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n\n /**\n * Clone this point, returning a new point that can be modified\n * without affecting the old one.\n * @return {Point} the clone\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Add this point's x & y coordinates to another point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n add(p: Point): Point {\n return this.clone()._add(p);\n }\n\n /**\n * Subtract this point's x & y coordinates to from point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n sub(p: Point): Point {\n return this.clone()._sub(p);\n }\n\n /**\n * Multiply this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n multByPoint(p: Point): Point {\n return this.clone()._multByPoint(p);\n }\n\n /**\n * Divide this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n divByPoint(p: Point): Point {\n return this.clone()._divByPoint(p);\n }\n\n /**\n * Multiply this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Number} k factor\n * @return {Point} output point\n */\n mult(k: number): Point {\n return this.clone()._mult(k);\n }\n\n /**\n * Divide this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Point} k factor\n * @return {Point} output point\n */\n div(k: number): Point {\n return this.clone()._div(k);\n }\n\n /**\n * Rotate this point around the 0, 0 origin by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @return {Point} output point\n */\n rotate(a: number): Point {\n return this.clone()._rotate(a);\n }\n\n /**\n * Rotate this point around p point by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @param {Point} p Point to rotate around\n * @return {Point} output point\n */\n rotateAround(a: number, p: Point): Point {\n return this.clone()._rotateAround(a, p);\n }\n\n /**\n * Multiply this point by a 4x1 transformation matrix\n * @param {Array<Number>} m transformation matrix\n * @return {Point} output point\n */\n matMult(m: Matrix2): Point {\n return this.clone()._matMult(m);\n }\n\n /**\n * Calculate this point but as a unit vector from 0, 0, meaning\n * that the distance from the resulting point to the 0, 0\n * coordinate will be equal to 1 and the angle from the resulting\n * point to the 0, 0 coordinate will be the same as before.\n * @return {Point} unit vector point\n */\n unit(): Point {\n return this.clone()._unit();\n }\n\n /**\n * Compute a perpendicular point, where the new y coordinate\n * is the old x coordinate and the new x coordinate is the old y\n * coordinate multiplied by -1\n * @return {Point} perpendicular point\n */\n perp(): Point {\n return this.clone()._perp();\n }\n\n /**\n * Return a version of this point with the x & y coordinates\n * rounded to integers.\n * @return {Point} rounded point\n */\n round(): Point {\n return this.clone()._round();\n }\n\n /**\n * Return the magnitude of this point: this is the Euclidean\n * distance from the 0, 0 coordinate to this point's x and y\n * coordinates.\n * @return {Number} magnitude\n */\n mag(): number {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * Judge whether this point is equal to another point, returning\n * true or false.\n * @param {Point} other the other point\n * @return {boolean} whether the points are equal\n */\n equals(other): boolean {\n return this.x === other.x && this.y === other.y;\n }\n\n /**\n * Calculate the distance from this point to another point\n * @param {Point} p the other point\n * @return {Number} distance\n */\n dist(p): number {\n return Math.sqrt(this.distSqr(p));\n }\n\n /**\n * Calculate the distance from this point to another point,\n * without the square root step. Useful if you're comparing\n * relative distances.\n * @param {Point} p the other point\n * @return {Number} distance\n */\n distSqr(p): number {\n const dx = p.x - this.x;\n const dy = p.y - this.y;\n return dx * dx + dy * dy;\n }\n\n /**\n * Get the angle from the 0, 0 coordinate to this point, in radians\n * coordinates.\n * @return {Number} angle\n */\n angle(): number {\n return Math.atan2(this.y, this.x);\n }\n\n /**\n * Get the angle from this point to another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleTo(b: Point): number {\n return Math.atan2(this.y - b.y, this.x - b.x);\n }\n\n /**\n * Get the angle between this point and another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleWith(b: Point): number {\n return this.angleWithSep(b.x, b.y);\n }\n\n /*\n * Find the angle of the two vectors, solving the formula for\n * the cross product a x b = |a||b|sin(θ) for θ.\n * @param {Number} x the x-coordinate\n * @param {Number} y the y-coordinate\n * @return {Number} the angle in radians\n */\n angleWithSep(x: number, y: number): number {\n return Math.atan2(this.x * y - this.y * x, this.x * x + this.y * y);\n }\n\n /**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array<number> | Point} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\n static convert(a: Point | Array<number>) {\n if (a instanceof Point) {\n return a;\n }\n if (Array.isArray(a)) {\n return new Point(a[0], a[1]);\n }\n return a;\n }\n}\n","/**\n * Maplibre export first, then extensions can overload the exports.\n */\nexport * from \"maplibre-gl\";\n\n/**\n * To perform explicit named export so that they are included in the UMD bundle\n */\n// import * as ML from \"maplibre-gl\";\n\nimport maplibregl from \"maplibre-gl\";\n\nconst {\n supported,\n setRTLTextPlugin,\n getRTLTextPluginStatus,\n NavigationControl,\n GeolocateControl,\n AttributionControl,\n LogoControl,\n ScaleControl,\n FullscreenControl,\n TerrainControl,\n Popup,\n Marker,\n Style,\n LngLat,\n LngLatBounds,\n MercatorCoordinate,\n Evented,\n AJAXError,\n CanvasSource,\n GeoJSONSource,\n ImageSource,\n RasterDEMTileSource,\n RasterTileSource,\n VectorTileSource,\n VideoSource,\n prewarm,\n clearPrewarmedResources,\n version,\n workerCount,\n maxParallelImageRequests,\n clearStorage,\n workerUrl,\n addProtocol,\n removeProtocol,\n\n // isSafari,\n // getPerformanceMetrics,\n // config,\n // Point,\n} = maplibregl;\n\nexport {\n supported,\n setRTLTextPlugin,\n getRTLTextPluginStatus,\n // Map,\n NavigationControl,\n GeolocateControl,\n AttributionControl,\n LogoControl,\n ScaleControl,\n FullscreenControl,\n TerrainControl,\n Popup,\n Marker,\n Style,\n LngLat,\n LngLatBounds,\n // Point,\n MercatorCoordinate,\n Evented,\n AJAXError,\n // config,\n CanvasSource,\n GeoJSONSource,\n ImageSource,\n RasterDEMTileSource,\n RasterTileSource,\n VectorTileSource,\n VideoSource,\n prewarm,\n clearPrewarmedResources,\n version,\n workerCount,\n maxParallelImageRequests,\n clearStorage,\n workerUrl,\n addProtocol,\n removeProtocol,\n // isSafari,\n // getPerformanceMetrics\n};\n\nimport { Map, GeolocationType } from \"./Map\";\nimport type { MapOptions } from \"./Map\";\n\n// importing client functions to expose them as part of the SDK\nimport type {\n BBox,\n Position,\n GeocodingOptions,\n CoordinatesSearchOptions,\n CenteredStaticMapOptions,\n AutomaticStaticMapOptions,\n BoundedStaticMapOptions,\n} from \"@maptiler/client\";\n\nimport {\n geocoding,\n geolocation,\n coordinates,\n data,\n staticMaps,\n ServiceError,\n LanguageGeocoding,\n LanguageGeocodingString,\n ReferenceMapStyle,\n MapStyle,\n MapStyleVariant,\n} from \"@maptiler/client\";\n\nimport type { MapStyleType } from \"@maptiler/client\";\n\nimport { Point } from \"./Point\";\nimport type { Matrix2 } from \"./Point\";\n\n// Importing enums and configs\nimport { config, SdkConfig } from \"./config\";\nimport { Language, LanguageString, LanguageKey } from \"./language\";\nimport type { Unit } from \"./unit\";\n\n// Exporting types\nexport type {\n MapOptions,\n GeocodingOptions,\n BBox,\n Position,\n CoordinatesSearchOptions,\n CenteredStaticMapOptions,\n BoundedStaticMapOptions,\n AutomaticStaticMapOptions,\n LanguageString,\n LanguageKey,\n LanguageGeocodingString,\n Unit,\n MapStyleType,\n Matrix2,\n};\n\n// Exporting classes, objects, functions, etc.\nexport {\n Map,\n GeolocationType,\n SdkConfig,\n config,\n ServiceError,\n geocoding,\n geolocation,\n coordinates,\n data,\n staticMaps,\n MapStyle,\n Language,\n LanguageGeocoding,\n Point,\n ReferenceMapStyle,\n MapStyleVariant,\n};\n"],"names":["clientConfig","maplibregl","TerrainControl","GeolocateControl","LngLat","__spreadValues","Marker","uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"maptiler-sdk.mjs","sources":["../src/language.ts","../src/config.ts","../src/defaults.ts","../src/CustomLogoControl.ts","../src/tools.ts","../src/mapstyle.ts","../src/TerrainControl.ts","../src/MaptilerNavigationControl.ts","../src/CustomGeolocateControl.ts","../src/Map.ts","../src/Point.ts","../src/index.ts"],"sourcesContent":["/**\n * Languages. Note that not all the languages of this list are available but the compatibility list may be expanded in the future.\n */\nconst Language = {\n /**\n * AUTO mode uses the language of the browser\n */\n AUTO: \"auto\",\n\n /**\n * Default fallback languages that uses latin charaters\n */\n LATIN: \"latin\",\n\n /**\n * Default fallback languages that uses non-latin charaters\n */\n NON_LATIN: \"nonlatin\",\n\n /**\n * Labels are in their local language, when available\n */\n LOCAL: \"\",\n\n ALBANIAN: \"sq\",\n AMHARIC: \"am\",\n ARABIC: \"ar\",\n ARMENIAN: \"hy\",\n AZERBAIJANI: \"az\",\n BASQUE: \"eu\",\n BELORUSSIAN: \"be\",\n BOSNIAN: \"bs\",\n BRETON: \"br\",\n BULGARIAN: \"bg\",\n CATALAN: \"ca\",\n CHINESE: \"zh\",\n CORSICAN: \"co\",\n CROATIAN: \"hr\",\n CZECH: \"cs\",\n DANISH: \"da\",\n DUTCH: \"nl\",\n ENGLISH: \"en\",\n ESPERANTO: \"eo\",\n ESTONIAN: \"et\",\n FINNISH: \"fi\",\n FRENCH: \"fr\",\n FRISIAN: \"fy\",\n GEORGIAN: \"ka\",\n GERMAN: \"de\",\n GREEK: \"el\",\n HEBREW: \"he\",\n HINDI: \"hi\",\n HUNGARIAN: \"hu\",\n ICELANDIC: \"is\",\n INDONESIAN: \"id\",\n IRISH: \"ga\",\n ITALIAN: \"it\",\n JAPANESE: \"ja\",\n JAPANESE_HIRAGANA: \"ja-Hira\",\n JAPANESE_KANA: \"ja_kana\",\n JAPANESE_LATIN: \"ja_rm\",\n JAPANESE_2018: \"ja-Latn\",\n KANNADA: \"kn\",\n KAZAKH: \"kk\",\n KOREAN: \"ko\",\n KOREAN_LATIN: \"ko-Latn\",\n KURDISH: \"ku\",\n ROMAN_LATIN: \"la\",\n LATVIAN: \"lv\",\n LITHUANIAN: \"lt\",\n LUXEMBOURGISH: \"lb\",\n MACEDONIAN: \"mk\",\n MALAYALAM: \"ml\",\n MALTESE: \"mt\",\n NORWEGIAN: \"no\",\n OCCITAN: \"oc\",\n POLISH: \"pl\",\n PORTUGUESE: \"pt\",\n ROMANIAN: \"ro\",\n ROMANSH: \"rm\",\n RUSSIAN: \"ru\",\n SCOTTISH_GAELIC: \"gd\",\n SERBIAN_CYRILLIC: \"sr\",\n SERBIAN_LATIN: \"sr-Latn\",\n SLOVAK: \"sk\",\n SLOVENE: \"sl\",\n SPANISH: \"es\",\n SWEDISH: \"sv\",\n TAMIL: \"ta\",\n TELUGU: \"te\",\n THAI: \"th\",\n TURKISH: \"tr\",\n UKRAINIAN: \"uk\",\n WELSH: \"cy\",\n} as const;\n\nconst languagesIsoSet = new Set(Object.values(Language) as Array<string>);\n\nfunction isLanguageSupported(lang: string): boolean {\n return languagesIsoSet.has(lang);\n}\n\nconst languageCodeSet = new Set(Object.values(Language));\n\n/**\n * Type representing the key of the Language object\n */\ntype LanguageKey = keyof typeof Language;\n\ntype Values<T> = T[keyof T];\n\n/**\n * Built-in languages values as strings\n */\ntype LanguageString = Values<typeof Language>;\n\nfunction getBrowserLanguage(): LanguageString {\n if (typeof navigator === \"undefined\") {\n return Intl.DateTimeFormat()\n .resolvedOptions()\n .locale.split(\"-\")[0] as LanguageString;\n }\n\n const canditatelangs = Array.from(\n new Set(navigator.languages.map((l) => l.split(\"-\")[0]))\n ).filter((l) => languageCodeSet.has(l as LanguageString));\n\n return canditatelangs.length\n ? (canditatelangs[0] as LanguageString)\n : Language.LATIN;\n}\n\nexport {\n Language,\n LanguageString,\n LanguageKey,\n getBrowserLanguage,\n isLanguageSupported,\n};\n","import EventEmitter from \"events\";\nimport { Language, LanguageString } from \"./language\";\nimport { config as clientConfig, FetchFunction } from \"@maptiler/client\";\nimport { Unit } from \"./unit\";\n\n/**\n * Configuration class for the SDK\n */\nclass SdkConfig extends EventEmitter {\n /**\n * The primary language. By default, the language of the web browser is used.\n */\n primaryLanguage: LanguageString | null = Language.AUTO;\n\n /**\n * The secondary language, to overwrite the default language defined in the map style.\n * This settings is highly dependant on the style compatibility and may not work in most cases.\n */\n secondaryLanguage: LanguageString | null = null;\n\n /**\n * Setting on whether of not the SDK runs with a session logic.\n * A \"session\" is started at the initialization of the SDK and finished when the browser\n * page is being refreshed.\n * When `session` is enabled (default: true), the extra URL param `mtsid` is added to queries\n * on the MapTiler Cloud API. This allows MapTiler to enable \"session based billing\".\n */\n session = true;\n\n /**\n * Unit to be used\n */\n private _unit: Unit = \"metric\";\n\n /**\n * MapTiler Cloud API key\n */\n private _apiKey = \"\";\n\n constructor() {\n super();\n }\n\n /**\n * Set the unit system\n */\n set unit(u: Unit) {\n this._unit = u;\n this.emit(\"unit\", u);\n }\n\n /**\n * Get the unit system\n */\n get unit(): Unit {\n return this._unit;\n }\n\n /**\n * Set the MapTiler Cloud API key\n */\n set apiKey(k: string) {\n this._apiKey = k;\n clientConfig.apiKey = k;\n this.emit(\"apiKey\", k);\n }\n\n /**\n * Get the MapTiler Cloud API key\n */\n get apiKey(): string {\n return this._apiKey;\n }\n\n /**\n * Set a the custom fetch function to replace the default one\n */\n set fetch(f: FetchFunction) {\n clientConfig.fetch = f;\n }\n\n /**\n * Get the fetch fucntion\n */\n get fetch(): FetchFunction | null {\n return clientConfig.fetch;\n }\n}\n\nconst config = new SdkConfig();\n\nexport { config, SdkConfig };\n","import { Language } from \"./language\";\n\n/**\n * Some default settings for the SDK\n */\nconst defaults = {\n maptilerLogoURL: \"https://api.maptiler.com/resources/logo.svg\",\n maptilerURL: \"https://www.maptiler.com/\",\n maptilerApiHost: \"api.maptiler.com\",\n rtlPluginURL:\n \"https://cdn.maptiler.com/mapbox-gl-rtl-text/v0.2.3/mapbox-gl-rtl-text.min.js\",\n primaryLanguage: Language.AUTO,\n secondaryLanguage: Language.LOCAL,\n terrainSourceURL: \"https://api.maptiler.com/tiles/terrain-rgb/tiles.json\",\n terrainSourceId: \"maptiler-terrain\",\n};\n\nObject.freeze(defaults);\n\nexport { defaults };\n","import maplibregl from \"maplibre-gl\";\nimport { defaults } from \"./defaults\";\nimport { Map } from \"./Map\";\n\ntype LogoOptions = maplibregl.LogoOptions & {\n logoURL?: string;\n linkURL?: string;\n};\n\n/**\n * This LogoControl extends the MapLibre LogoControl but instead can use any image URL and\n * any link URL. By default this is using MapTiler logo and URL.\n */\nexport class CustomLogoControl extends maplibregl.LogoControl {\n private logoURL = \"\";\n private linkURL = \"\";\n\n constructor(options: LogoOptions = {}) {\n super(options);\n\n this.logoURL = options.logoURL ?? defaults.maptilerLogoURL;\n this.linkURL = options.linkURL ?? defaults.maptilerURL;\n }\n\n onAdd(map: Map): HTMLElement {\n this._map = map;\n this._compact = this.options && this.options.compact;\n this._container = window.document.createElement(\"div\");\n this._container.className = \"maplibregl-ctrl\";\n const anchor = window.document.createElement(\"a\");\n anchor.style.backgroundRepeat = \"no-repeat\";\n anchor.style.cursor = \"pointer\";\n anchor.style.display = \"block\";\n anchor.style.height = \"23px\";\n anchor.style.margin = \"0 0 -4px -4px\";\n anchor.style.overflow = \"hidden\";\n anchor.style.width = \"88px\";\n anchor.style.backgroundImage = `url(${this.logoURL})`;\n anchor.style.backgroundSize = \"100px 30px\";\n anchor.style.width = \"100px\";\n anchor.style.height = \"30px\";\n\n anchor.target = \"_blank\";\n anchor.rel = \"noopener nofollow\";\n anchor.href = this.linkURL;\n anchor.setAttribute(\n \"aria-label\",\n this._map._getUIString(\"LogoControl.Title\")\n );\n anchor.setAttribute(\"rel\", \"noopener nofollow\");\n this._container.appendChild(anchor);\n this._container.style.display = \"block\";\n\n this._map.on(\"resize\", this._updateCompact);\n this._updateCompact();\n\n return this._container;\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport { defaults } from \"./defaults\";\n\nexport function enableRTL() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (maplibregl.getRTLTextPluginStatus() === \"unavailable\") {\n maplibregl.setRTLTextPlugin(\n defaults.rtlPluginURL,\n null,\n true // Lazy load the plugin\n );\n }\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/util.ts#L223\nexport function bindAll(fns: Array<string>, context: any): void {\n fns.forEach((fn) => {\n if (!context[fn]) {\n return;\n }\n context[fn] = context[fn].bind(context);\n });\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/dom.ts#L22\nexport function DOMcreate<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n className?: string,\n container?: HTMLElement\n): HTMLElementTagNameMap[K] {\n const el = window.document.createElement(tagName);\n if (className !== undefined) el.className = className;\n if (container) container.appendChild(el);\n return el;\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/dom.ts#L111\nexport function DOMremove(node: HTMLElement) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\n","import {\n MapStyle,\n ReferenceMapStyle,\n MapStyleVariant,\n mapStylePresetList,\n expandMapStyle,\n} from \"@maptiler/client\";\n\nexport function styleToStyle(\n style:\n | string\n | ReferenceMapStyle\n | MapStyleVariant\n | maplibregl.StyleSpecification\n | null\n | undefined\n): string | maplibregl.StyleSpecification {\n if (!style) {\n return MapStyle[mapStylePresetList[0].referenceStyleID]\n .getDefaultVariant()\n .getExpandedStyleURL();\n }\n\n // If the provided style is a shorthand (eg. \"streets-v2\") or a full style URL\n if (typeof style === \"string\" || style instanceof String) {\n return expandMapStyle(style);\n }\n\n if (style instanceof MapStyleVariant) {\n return style.getExpandedStyleURL();\n }\n\n if (style instanceof ReferenceMapStyle) {\n return (style.getDefaultVariant() as MapStyleVariant).getExpandedStyleURL();\n }\n\n return style as maplibregl.StyleSpecification;\n}\n","import { bindAll, DOMcreate, DOMremove } from \"./tools\";\n\nimport { Map } from \"./Map\";\nimport maplibregl from \"maplibre-gl\";\n\n/**\n * An `TerrainControl` control adds a button to turn terrain on and off.\n *\n * @implements {IControl}\n * @param {Object} [options]\n * @param {string} [options.id] The ID of the raster-dem source to use.\n * @param {Object} [options.options]\n * @param {number} [options.options.exaggeration]\n * @example\n * var map = new maplibregl.Map({TerrainControl: false})\n * .addControl(new maplibregl.TerrainControl({\n * source: \"terrain\"\n * }));\n */\nexport class TerrainControl implements maplibregl.IControl {\n _map: Map;\n _container: HTMLElement;\n _terrainButton: HTMLButtonElement;\n\n constructor() {\n bindAll([\"_toggleTerrain\", \"_updateTerrainIcon\"], this);\n }\n\n onAdd(map: Map) {\n this._map = map;\n this._container = DOMcreate(\"div\", \"maplibregl-ctrl maplibregl-ctrl-group\");\n this._terrainButton = DOMcreate(\n \"button\",\n \"maplibregl-ctrl-terrain\",\n this._container\n );\n DOMcreate(\"span\", \"maplibregl-ctrl-icon\", this._terrainButton).setAttribute(\n \"aria-hidden\",\n \"true\"\n );\n this._terrainButton.type = \"button\";\n this._terrainButton.addEventListener(\"click\", this._toggleTerrain);\n\n this._updateTerrainIcon();\n this._map.on(\"terrain\", this._updateTerrainIcon);\n return this._container;\n }\n\n onRemove() {\n DOMremove(this._container);\n this._map.off(\"terrain\", this._updateTerrainIcon);\n this._map = undefined;\n }\n\n _toggleTerrain() {\n // if (this._map.getTerrain()) {\n // this._map.setTerrain(null);\n // } else {\n // this._map.setTerrain(this.options);\n // }\n\n if (this._map.hasTerrain()) {\n this._map.disableTerrain();\n } else {\n this._map.enableTerrain();\n }\n\n this._updateTerrainIcon();\n }\n\n _updateTerrainIcon() {\n this._terrainButton.classList.remove(\"maplibregl-ctrl-terrain\");\n this._terrainButton.classList.remove(\"maplibregl-ctrl-terrain-enabled\");\n // if (this._map.terrain) {\n if (this._map.hasTerrain()) {\n this._terrainButton.classList.add(\"maplibregl-ctrl-terrain-enabled\");\n this._terrainButton.title = this._map._getUIString(\n \"TerrainControl.disableTerrain\"\n );\n } else {\n this._terrainButton.classList.add(\"maplibregl-ctrl-terrain\");\n this._terrainButton.title = this._map._getUIString(\n \"TerrainControl.enableTerrain\"\n );\n }\n }\n}\n","import maplibregl from \"maplibre-gl\";\n\ntype HTMLButtonElementPlus = HTMLButtonElement & {\n clickFunction: (e?: any) => unknown;\n};\n\nexport class MaptilerNavigationControl extends maplibregl.NavigationControl {\n constructor() {\n super({\n showCompass: true,\n showZoom: true,\n visualizePitch: true,\n });\n\n // Removing the default click event\n this._compass.removeEventListener(\n \"click\",\n (this._compass as HTMLButtonElementPlus).clickFunction\n );\n\n // Adding custom click event\n this._compass.addEventListener(\"click\", (e) => {\n {\n const currentPitch = this._map.getPitch();\n if (currentPitch === 0) {\n this._map.easeTo({ pitch: Math.min(this._map.getMaxPitch(), 80) });\n } else {\n if (this.options.visualizePitch) {\n this._map.resetNorthPitch({}, { originalEvent: e });\n } else {\n this._map.resetNorth({}, { originalEvent: e });\n }\n }\n }\n });\n }\n\n /**\n * Overloading: the button now stores its click callback so that we can later on delete it and replace it\n */\n _createButton(\n className: string,\n fn: (e?: any) => unknown\n ): HTMLButtonElementPlus {\n const button = super._createButton(className, fn) as HTMLButtonElementPlus;\n button.clickFunction = fn;\n return button;\n }\n\n /**\n * Overloading: Limit how flat the compass icon can get\n */\n _rotateCompassArrow() {\n const rotate = this.options.visualizePitch\n ? `scale(${Math.min(\n 1.5,\n 1 /\n Math.pow(Math.cos(this._map.transform.pitch * (Math.PI / 180)), 0.5)\n )}) rotateX(${Math.min(70, this._map.transform.pitch)}deg) rotateZ(${\n this._map.transform.angle * (180 / Math.PI)\n }deg)`\n : `rotate(${this._map.transform.angle * (180 / Math.PI)}deg)`;\n\n this._compassIcon.style.transform = rotate;\n }\n}\n","import type { LngLatLike } from \"maplibre-gl\";\nimport maplibregl from \"maplibre-gl\";\nimport { DOMcreate } from \"./tools\";\n\nconst GeolocateControl = maplibregl.GeolocateControl;\nconst Marker = maplibregl.Marker;\nconst LngLat = maplibregl.LngLat;\n\nexport class CustomGeolocateControl extends GeolocateControl {\n private lastUpdatedCenter = new LngLat(0, 0);\n\n /**\n * Update the camera location to center on the current position\n *\n * @param {Position} position the Geolocation API Position\n * @private\n */\n _updateCamera(position: GeolocationPosition) {\n const center = new LngLat(\n position.coords.longitude,\n position.coords.latitude\n );\n const radius = position.coords.accuracy;\n const bearing = this._map.getBearing();\n const options = {\n bearing,\n ...this.options.fitBoundsOptions,\n };\n\n console.log(\"moving camera\");\n\n this._map.fitBounds(center.toBounds(radius), options, {\n geolocateSource: true, // tag this camera change so it won't cause the control to change to background state\n });\n\n let hasFittingBeenDisrupted = false;\n\n const flagFittingDisruption = () => {\n console.log(\"DISRUPTED FITTING!\");\n hasFittingBeenDisrupted = true;\n };\n\n this._map.once(\"click\", flagFittingDisruption);\n this._map.once(\"dblclick\", flagFittingDisruption);\n this._map.once(\"dragstart\", flagFittingDisruption);\n this._map.once(\"mousedown\", flagFittingDisruption);\n this._map.once(\"touchstart\", flagFittingDisruption);\n this._map.once(\"wheel\", flagFittingDisruption);\n\n this._map.once(\"moveend\", () => {\n console.log(\"done moving, with disruption:\", hasFittingBeenDisrupted);\n\n // Removing the events if not used\n this._map.off(\"click\", flagFittingDisruption);\n this._map.off(\"dblclick\", flagFittingDisruption);\n this._map.off(\"dragstart\", flagFittingDisruption);\n this._map.off(\"mousedown\", flagFittingDisruption);\n this._map.off(\"touchstart\", flagFittingDisruption);\n this._map.off(\"wheel\", flagFittingDisruption);\n\n if (hasFittingBeenDisrupted) {\n return;\n }\n\n this.lastUpdatedCenter = this._map.getCenter();\n });\n }\n\n _setupUI(supported: boolean) {\n this.lastUpdatedCenter = this._map.getCenter();\n\n this._container.addEventListener(\"contextmenu\", (e: MouseEvent) =>\n e.preventDefault()\n );\n this._geolocateButton = DOMcreate(\n \"button\",\n \"maplibregl-ctrl-geolocate\",\n this._container\n );\n DOMcreate(\n \"span\",\n \"maplibregl-ctrl-icon\",\n this._geolocateButton\n ).setAttribute(\"aria-hidden\", \"true\");\n this._geolocateButton.type = \"button\";\n\n if (supported === false) {\n // warnOnce('Geolocation support is not available so the GeolocateControl will be disabled.');\n const title = this._map._getUIString(\n \"GeolocateControl.LocationNotAvailable\"\n );\n this._geolocateButton.disabled = true;\n this._geolocateButton.title = title;\n this._geolocateButton.setAttribute(\"aria-label\", title);\n } else {\n const title = this._map._getUIString(\"GeolocateControl.FindMyLocation\");\n this._geolocateButton.title = title;\n this._geolocateButton.setAttribute(\"aria-label\", title);\n }\n\n if (this.options.trackUserLocation) {\n this._geolocateButton.setAttribute(\"aria-pressed\", \"false\");\n this._watchState = \"OFF\";\n }\n\n // when showUserLocation is enabled, keep the Geolocate button disabled until the device location marker is setup on the map\n if (this.options.showUserLocation) {\n this._dotElement = DOMcreate(\"div\", \"maplibregl-user-location-dot\");\n\n this._userLocationDotMarker = new Marker(this._dotElement);\n\n this._circleElement = DOMcreate(\n \"div\",\n \"maplibregl-user-location-accuracy-circle\"\n );\n this._accuracyCircleMarker = new Marker({\n element: this._circleElement,\n pitchAlignment: \"map\",\n });\n\n if (this.options.trackUserLocation) this._watchState = \"OFF\";\n\n this._map.on(\"move\", this._onZoom);\n }\n\n this._geolocateButton.addEventListener(\"click\", this.trigger.bind(this));\n\n this._setup = true;\n\n // when the camera is changed (and it's not as a result of the Geolocation Control) change\n // the watch mode to background watch, so that the marker is updated but not the camera.\n // Addition: Yet the status change does not occur if the ditance it has moved to is less than\n // one meter from the last auto-updated position. This is to guarrantee that if the move\n // is a zoom, rotation or pitch (where the center stays the same) then we can keep the ACTIVE_LOCK\n // mode ON.\n if (this.options.trackUserLocation) {\n this._map.on(\"moveend\", (event: any) => {\n const fromResize =\n event.originalEvent && event.originalEvent.type === \"resize\";\n const movingDistance = this.lastUpdatedCenter.distanceTo(\n this._map.getCenter()\n );\n\n if (\n !event.geolocateSource &&\n this._watchState === \"ACTIVE_LOCK\" &&\n !fromResize &&\n movingDistance > 1\n ) {\n this._watchState = \"BACKGROUND\";\n this._geolocateButton.classList.add(\n \"maplibregl-ctrl-geolocate-background\"\n );\n this._geolocateButton.classList.remove(\n \"maplibregl-ctrl-geolocate-active\"\n );\n\n this.fire(new Event(\"trackuserlocationend\"));\n }\n });\n }\n }\n\n _updateCircleRadius() {\n if (\n this._watchState !== \"BACKGROUND\" &&\n this._watchState !== \"ACTIVE_LOCK\"\n ) {\n return;\n }\n\n const lastKnownLocation: LngLatLike = [\n this._lastKnownPosition.coords.longitude,\n this._lastKnownPosition.coords.latitude,\n ];\n\n const projectedLocation = this._map.project(lastKnownLocation);\n const a = this._map.unproject([projectedLocation.x, projectedLocation.y]);\n const b = this._map.unproject([\n projectedLocation.x + 20,\n projectedLocation.y,\n ]);\n const metersPerPixel = a.distanceTo(b) / 20;\n\n const circleDiameter = Math.ceil((2.0 * this._accuracy) / metersPerPixel);\n this._circleElement.style.width = `${circleDiameter}px`;\n this._circleElement.style.height = `${circleDiameter}px`;\n }\n\n _onZoom() {\n if (this.options.showUserLocation && this.options.showAccuracyCircle) {\n this._updateCircleRadius();\n }\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport { Base64 } from \"js-base64\";\nimport type {\n StyleSpecification,\n MapOptions as MapOptionsML,\n ControlPosition,\n StyleOptions,\n} from \"maplibre-gl\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { ReferenceMapStyle, MapStyleVariant } from \"@maptiler/client\";\nimport { config } from \"./config\";\nimport { defaults } from \"./defaults\";\nimport { CustomLogoControl } from \"./CustomLogoControl\";\nimport { enableRTL } from \"./tools\";\nimport {\n getBrowserLanguage,\n isLanguageSupported,\n Language,\n LanguageString,\n} from \"./language\";\nimport { styleToStyle } from \"./mapstyle\";\nimport { TerrainControl } from \"./TerrainControl\";\nimport { MaptilerNavigationControl } from \"./MaptilerNavigationControl\";\nimport { geolocation } from \"@maptiler/client\";\nimport { CustomGeolocateControl } from \"./CustomGeolocateControl\";\n\n// StyleSwapOptions is not exported by Maplibre, but we can redefine it (used for setStyle)\nexport type TransformStyleFunction = (\n previous: StyleSpecification,\n next: StyleSpecification\n) => StyleSpecification;\n\nexport type StyleSwapOptions = {\n diff?: boolean;\n transformStyle?: TransformStyleFunction;\n};\n\nconst MAPTILER_SESSION_ID = uuidv4();\n\nexport const GeolocationType: {\n POINT: \"POINT\";\n COUNTRY: \"COUNTRY\";\n} = {\n POINT: \"POINT\",\n COUNTRY: \"COUNTRY\",\n} as const;\n\n/**\n * Options to provide to the `Map` constructor\n */\nexport type MapOptions = Omit<MapOptionsML, \"style\" | \"maplibreLogo\"> & {\n /**\n * Style of the map. Can be:\n * - a full style URL (possibly with API key)\n * - a shorthand with only the MapTIler style name (eg. `\"streets-v2\"`)\n * - a longer form with the prefix `\"maptiler://\"` (eg. `\"maptiler://streets-v2\"`)\n */\n style?: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string;\n\n /**\n * Shows the MapTiler logo if `true`. Note that the logo is always displayed on free plan.\n */\n maptilerLogo?: boolean;\n\n /**\n * Enables 3D terrain if `true`. (default: `false`)\n */\n terrain?: boolean;\n\n /**\n * Exaggeration factor of the terrain. (default: `1`, no exaggeration)\n */\n terrainExaggeration?: number;\n\n /**\n * Show the navigation control. (default: `true`, will hide if `false`)\n */\n navigationControl?: boolean | ControlPosition;\n\n /**\n * Show the terrain control. (default: `false`, will show if `true`)\n */\n terrainControl?: boolean | ControlPosition;\n\n /**\n * Show the geolocate control. (default: `true`, will hide if `false`)\n */\n geolocateControl?: boolean | ControlPosition;\n\n /**\n * Show the scale control. (default: `false`, will show if `true`)\n */\n scaleControl?: boolean | ControlPosition;\n\n /**\n * Show the full screen control. (default: `false`, will show if `true`)\n */\n fullscreenControl?: boolean | ControlPosition;\n\n /**\n * Method to position the map at a given geolocation. Only if:\n * - `hash` is `false`\n * - `center` is not provided\n *\n * If the value is `true` of `\"POINT\"` (given by `GeolocationType.POINT`) then the positionning uses the MapTiler Cloud\n * Geolocation to find the non-GPS location point.\n * The zoom level can be provided in the `Map` constructor with the `zoom` option or will be `13` if not provided.\n *\n * If the value is `\"COUNTRY\"` (given by `GeolocationType.COUNTRY`) then the map is centered around the bounding box of the country.\n * In this case, the `zoom` option will be ignored.\n *\n * If the value is `false`, no geolocation is performed and the map centering and zooming depends on other options or on\n * the built-in defaults.\n *\n * If this option is non-false and the options `center` is also provided, then `center` prevails.\n *\n * Default: `false`\n */\n geolocate?: typeof GeolocationType[keyof typeof GeolocationType] | boolean;\n};\n\n/**\n * The Map class can be instanciated to display a map in a `<div>`\n */\nexport class Map extends maplibregl.Map {\n private languageShouldUpdate = false;\n private isStyleInitialized = false;\n private isTerrainEnabled = false;\n private terrainExaggeration = 1;\n\n constructor(options: MapOptions) {\n const style = styleToStyle(options.style);\n console.log(style);\n\n const hashPreConstructor = location.hash;\n\n if (!config.apiKey) {\n console.warn(\n \"MapTiler Cloud API key is not set. Visit https://maptiler.com and try Cloud for free!\"\n );\n }\n\n // calling the map constructor with full length style\n super({\n ...options,\n style,\n maplibreLogo: false,\n\n transformRequest: (url: string) => {\n const reqUrl = new URL(url);\n\n if (reqUrl.host === defaults.maptilerApiHost) {\n if (!reqUrl.searchParams.has(\"key\")) {\n reqUrl.searchParams.append(\"key\", config.apiKey);\n }\n\n if (config.session) {\n reqUrl.searchParams.append(\"mtsid\", MAPTILER_SESSION_ID);\n }\n }\n\n return {\n url: reqUrl.href,\n headers: {},\n };\n },\n });\n\n // Map centering and geolocation\n this.once(\"styledata\", async () => {\n // Not using geolocation centering if...\n\n if (options.geolocate === false) {\n return;\n }\n\n // ... a center is provided in options\n if (options.center) {\n return;\n }\n\n // ... the hash option is enabled and a hash is present in the URL\n if (options.hash && !!hashPreConstructor) {\n return;\n }\n\n // If the geolocation is set to COUNTRY:\n try {\n if (options.geolocate === GeolocationType.COUNTRY) {\n await this.fitToIpBounds();\n return;\n }\n } catch (e) {\n // not raising\n console.warn(e.message);\n }\n\n // As a fallback, we want to center the map on the visitor. First with IP geolocation...\n let ipLocatedCameraHash = null;\n try {\n await this.centerOnIpPoint(options.zoom);\n ipLocatedCameraHash = this.getCameraHash();\n } catch (e) {\n // not raising\n console.warn(e.message);\n }\n\n // Then, the get a more precise location, we rely on the browser location, but only if it was already granted\n // before (we don't want to ask wih a popup at launch time)\n const locationResult = await navigator.permissions.query({\n name: \"geolocation\",\n });\n\n if (locationResult.state === \"granted\") {\n navigator.geolocation.getCurrentPosition(\n // success callback\n (data) => {\n // If the user has already moved since the ip location, then we no longer want to move the center\n if (ipLocatedCameraHash !== this.getCameraHash()) {\n return;\n }\n\n this.easeTo({\n center: [data.coords.longitude, data.coords.latitude],\n zoom: options.zoom || 12,\n duration: 2000,\n });\n },\n\n // error callback\n null,\n\n // options\n {\n maximumAge: 24 * 3600 * 1000, // a day in millisec\n timeout: 5000, // milliseconds\n enableHighAccuracy: false,\n }\n );\n }\n });\n\n // Check if language has been modified and. If so, it will be updated during the next lifecycle step\n this.on(\"styledataloading\", () => {\n this.languageShouldUpdate =\n !!config.primaryLanguage || !!config.secondaryLanguage;\n });\n\n // If the config includes language changing, we must update the map language\n this.on(\"styledata\", () => {\n if (\n config.primaryLanguage &&\n (this.languageShouldUpdate || !this.isStyleInitialized)\n ) {\n this.setPrimaryLanguage(config.primaryLanguage);\n }\n\n if (\n config.secondaryLanguage &&\n (this.languageShouldUpdate || !this.isStyleInitialized)\n ) {\n this.setSecondaryLanguage(config.secondaryLanguage);\n }\n\n this.languageShouldUpdate = false;\n this.isStyleInitialized = true;\n });\n\n // this even is in charge of reaplying the terrain elevation after the\n // style has changed because depending on the src/tgt style,\n // the style logic is not always able to resolve the application of terrain\n this.on(\"styledata\", () => {\n // the styling resolver did no manage to reaply the terrain,\n // so let's reload it\n if (this.getTerrain() === null && this.isTerrainEnabled) {\n this.enableTerrain(this.terrainExaggeration);\n }\n });\n\n // load the Right-to-Left text plugin (will happen only once)\n this.once(\"load\", async () => {\n enableRTL();\n });\n\n // Update logo and attibution\n this.once(\"load\", async () => {\n let tileJsonContent = { logo: null };\n\n try {\n const possibleSources = Object.keys(this.style.sourceCaches)\n .map((sourceName) => this.getSource(sourceName))\n .filter(\n (s: any) =>\n typeof s.url === \"string\" && s.url.includes(\"tiles.json\")\n );\n\n const styleUrl = new URL(\n (possibleSources[0] as maplibregl.VectorTileSource).url\n );\n\n if (!styleUrl.searchParams.has(\"key\")) {\n styleUrl.searchParams.append(\"key\", config.apiKey);\n }\n\n const tileJsonRes = await fetch(styleUrl.href);\n tileJsonContent = await tileJsonRes.json();\n } catch (e) {\n // No tiles.json found (should not happen on maintained styles)\n }\n\n // The attribution and logo must show when required\n if (\"logo\" in tileJsonContent && tileJsonContent.logo) {\n const logoURL: string = tileJsonContent.logo;\n\n this.addControl(\n new CustomLogoControl({ logoURL }),\n options.logoPosition\n );\n\n // if attribution in option is `false` but the the logo shows up in the tileJson, then the attribution must show anyways\n if (options.attributionControl === false) {\n this.addControl(new maplibregl.AttributionControl(options));\n }\n } else if (options.maptilerLogo) {\n this.addControl(new CustomLogoControl(), options.logoPosition);\n }\n\n // the other controls at init time but be after\n // (due to the async nature of logo control)\n\n // By default, no scale control\n if (options.scaleControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.scaleControl === true || options.scaleControl === undefined\n ? \"bottom-right\"\n : options.scaleControl\n ) as ControlPosition;\n\n const scaleControl = new maplibregl.ScaleControl({ unit: config.unit });\n this.addControl(scaleControl, position);\n config.on(\"unit\", (unit) => {\n scaleControl.setUnit(unit);\n });\n }\n\n if (options.navigationControl !== false) {\n // default position, if not provided, is top left corner\n const position = (\n options.navigationControl === true ||\n options.navigationControl === undefined\n ? \"top-right\"\n : options.navigationControl\n ) as ControlPosition;\n this.addControl(new MaptilerNavigationControl(), position);\n }\n\n if (options.geolocateControl !== false) {\n // default position, if not provided, is top left corner\n const position = (\n options.geolocateControl === true ||\n options.geolocateControl === undefined\n ? \"top-right\"\n : options.geolocateControl\n ) as ControlPosition;\n\n this.addControl(\n // new maplibregl.GeolocateControl({\n new CustomGeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n maximumAge: 0,\n timeout: 6000 /* 6 sec */,\n },\n fitBoundsOptions: {\n maxZoom: 15,\n },\n trackUserLocation: true,\n showAccuracyCircle: true,\n showUserLocation: true,\n }),\n position\n );\n }\n\n if (options.terrainControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.terrainControl === true ||\n options.terrainControl === undefined\n ? \"top-right\"\n : options.terrainControl\n ) as ControlPosition;\n this.addControl(new TerrainControl(), position);\n }\n\n // By default, no fullscreen control\n if (options.fullscreenControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.fullscreenControl === true ||\n options.fullscreenControl === undefined\n ? \"top-right\"\n : options.fullscreenControl\n ) as ControlPosition;\n\n this.addControl(new maplibregl.FullscreenControl({}), position);\n }\n });\n\n // enable 3D terrain if provided in options\n if (options.terrain) {\n this.enableTerrain(\n options.terrainExaggeration ?? this.terrainExaggeration\n );\n }\n }\n\n /**\n * Update the style of the map.\n * Can be:\n * - a full style URL (possibly with API key)\n * - a shorthand with only the MapTIler style name (eg. `\"streets-v2\"`)\n * - a longer form with the prefix `\"maptiler://\"` (eg. `\"maptiler://streets-v2\"`)\n * @param style\n * @param options\n * @returns\n */\n setStyle(\n style: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string,\n options?: StyleSwapOptions & StyleOptions\n ) {\n return super.setStyle(styleToStyle(style), options);\n }\n\n /**\n * Define the primary language of the map. Note that not all the languages shorthands provided are available.\n * This function is a short for `.setPrimaryLanguage()`\n * @param language\n */\n setLanguage(language: LanguageString = defaults.primaryLanguage) {\n if (language === Language.AUTO) {\n return this.setLanguage(getBrowserLanguage());\n }\n this.setPrimaryLanguage(language);\n }\n\n /**\n * Define the primary language of the map. Note that not all the languages shorthands provided are available.\n * @param language\n */\n setPrimaryLanguage(language: LanguageString = defaults.primaryLanguage) {\n if (!isLanguageSupported(language as string)) {\n return;\n }\n\n this.onStyleReady(() => {\n if (language === Language.AUTO) {\n return this.setPrimaryLanguage(getBrowserLanguage());\n }\n\n // We want to keep track of it to apply the language again when changing the style\n config.primaryLanguage = language;\n\n const layers = this.getStyle().layers;\n\n // detects pattern like \"{name:somelanguage}\" with loose spacing\n const strLanguageRegex = /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // detects pattern like \"name:somelanguage\" with loose spacing\n const strLanguageInArrayRegex = /^\\s*name\\s*(:\\s*(\\S*))?\\s*$/;\n\n // for string based bilingual lang such as \"{name:latin} {name:nonlatin}\" or \"{name:latin} {name}\"\n const strBilingualRegex =\n /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}(\\s*){\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // Regex to capture when there are more info, such as mountains elevation with unit m/ft\n const strMoreInfoRegex = /^(.*)({\\s*name\\s*(:\\s*(\\S*))?\\s*})(.*)$/;\n\n const langStr = language ? `name:${language}` : \"name\"; // to handle local lang\n const replacer = [\n \"case\",\n [\"has\", langStr],\n [\"get\", langStr],\n [\"get\", \"name:latin\"],\n ];\n\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n const layout = layer.layout;\n\n if (!layout) {\n continue;\n }\n\n if (!layout[\"text-field\"]) {\n continue;\n }\n\n const textFieldLayoutProp = this.getLayoutProperty(\n layer.id,\n \"text-field\"\n );\n\n // Note:\n // The value of the 'text-field' property can take multiple shape;\n // 1. can be an array with 'concat' on its first element (most likely means bilingual)\n // 2. can be an array with 'get' on its first element (monolingual)\n // 3. can be a string of shape '{name:latin}'\n // 4. can be a string referencing another prop such as '{housenumber}' or '{ref}'\n //\n // The case 1, 2 and 3 will be updated while maintaining their original type and shape.\n // The case 3 will not be updated\n\n let regexMatch;\n\n // This is case 1\n if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"concat\"\n ) {\n const newProp = textFieldLayoutProp.slice(); // newProp is Array\n // The style could possibly have defined more than 2 concatenated language strings but we only want to edit the first\n // The style could also define that there are more things being concatenated and not only languages\n\n for (let j = 0; j < textFieldLayoutProp.length; j += 1) {\n const elem = textFieldLayoutProp[j];\n\n // we are looking for an elem of shape '{name:somelangage}' (string) of `[\"get\", \"name:somelanguage\"]` (array)\n\n // the entry of of shape '{name:somelangage}', possibly with loose spacing\n if (\n (typeof elem === \"string\" || elem instanceof String) &&\n strLanguageRegex.exec(elem.toString())\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n }\n // the entry is of an array of shape `[\"get\", \"name:somelanguage\"]`\n else if (\n Array.isArray(elem) &&\n elem.length >= 2 &&\n elem[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(elem[1].toString())\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n } else if (\n Array.isArray(elem) &&\n elem.length === 4 &&\n elem[0].trim().toLowerCase() === \"case\"\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n }\n }\n\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // This is case 2\n else if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(textFieldLayoutProp[1].toString())\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // This is case 3\n else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n strLanguageRegex.exec(textFieldLayoutProp.toString())\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length === 4 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"case\"\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strBilingualRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const newProp = `{${langStr}}${regexMatch[3]}{name${\n regexMatch[4] || \"\"\n }}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strMoreInfoRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const newProp = `${regexMatch[1]}{${langStr}}${regexMatch[5]}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n }\n });\n }\n\n /**\n * Define the secondary language of the map.\n * Note that most styles do not allow a secondary language and this function only works if the style allows (no force adding)\n * @param language\n */\n setSecondaryLanguage(language: LanguageString = defaults.secondaryLanguage) {\n if (!isLanguageSupported(language as string)) {\n return;\n }\n\n this.onStyleReady(() => {\n if (language === Language.AUTO) {\n return this.setSecondaryLanguage(getBrowserLanguage());\n }\n\n // We want to keep track of it to apply the language again when changing the style\n config.secondaryLanguage = language;\n\n const layers = this.getStyle().layers;\n\n // detects pattern like \"{name:somelanguage}\" with loose spacing\n const strLanguageRegex = /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // detects pattern like \"name:somelanguage\" with loose spacing\n const strLanguageInArrayRegex = /^\\s*name\\s*(:\\s*(\\S*))?\\s*$/;\n\n // for string based bilingual lang such as \"{name:latin} {name:nonlatin}\" or \"{name:latin} {name}\"\n const strBilingualRegex =\n /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}(\\s*){\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n let regexMatch;\n\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n const layout = layer.layout;\n\n if (!layout) {\n continue;\n }\n\n if (!layout[\"text-field\"]) {\n continue;\n }\n\n const textFieldLayoutProp = this.getLayoutProperty(\n layer.id,\n \"text-field\"\n );\n\n let newProp;\n\n // Note:\n // The value of the 'text-field' property can take multiple shape;\n // 1. can be an array with 'concat' on its first element (most likely means bilingual)\n // 2. can be an array with 'get' on its first element (monolingual)\n // 3. can be a string of shape '{name:latin}'\n // 4. can be a string referencing another prop such as '{housenumber}' or '{ref}'\n //\n // Only the case 1 will be updated because we don't want to change the styling (read: add a secondary language where the original styling is only displaying 1)\n\n // This is case 1\n if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"concat\"\n ) {\n newProp = textFieldLayoutProp.slice(); // newProp is Array\n // The style could possibly have defined more than 2 concatenated language strings but we only want to edit the first\n // The style could also define that there are more things being concatenated and not only languages\n\n let languagesAlreadyFound = 0;\n\n for (let j = 0; j < textFieldLayoutProp.length; j += 1) {\n const elem = textFieldLayoutProp[j];\n\n // we are looking for an elem of shape '{name:somelangage}' (string) of `[\"get\", \"name:somelanguage\"]` (array)\n\n // the entry of of shape '{name:somelangage}', possibly with loose spacing\n if (\n (typeof elem === \"string\" || elem instanceof String) &&\n strLanguageRegex.exec(elem.toString())\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j] = `{name:${language}}`;\n break; // we just want to update the secondary language\n }\n\n languagesAlreadyFound += 1;\n }\n // the entry is of an array of shape `[\"get\", \"name:somelanguage\"]`\n else if (\n Array.isArray(elem) &&\n elem.length >= 2 &&\n elem[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(elem[1].toString())\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j][1] = `name:${language}`;\n break; // we just want to update the secondary language\n }\n\n languagesAlreadyFound += 1;\n } else if (\n Array.isArray(elem) &&\n elem.length === 4 &&\n elem[0].trim().toLowerCase() === \"case\"\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j] = [\"get\", `name:${language}`]; // the situation with 'case' is supposed to only happen with the primary lang\n break; // but in case a styling also does that for secondary...\n }\n\n languagesAlreadyFound += 1;\n }\n }\n\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // the language (both first and second) are defined into a single string model\n else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strBilingualRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const langStr = language ? `name:${language}` : \"name\"; // to handle local lang\n newProp = `{name${regexMatch[1] || \"\"}}${regexMatch[3]}{${langStr}}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n }\n });\n }\n\n /**\n * Get the exaggeration factor applied to the terrain\n * @returns\n */\n getTerrainExaggeration(): number {\n return this.terrainExaggeration;\n }\n\n /**\n * Know if terrian is enabled or not\n * @returns\n */\n hasTerrain(): boolean {\n return this.isTerrainEnabled;\n }\n\n /**\n * Enables the 3D terrain visualization\n * @param exaggeration\n * @returns\n */\n enableTerrain(exaggeration = this.terrainExaggeration) {\n if (exaggeration < 0) {\n console.warn(\"Terrain exaggeration cannot be negative.\");\n return;\n }\n\n const terrainInfo = this.getTerrain();\n\n const addTerrain = () => {\n // When style is changed,\n this.isTerrainEnabled = true;\n this.terrainExaggeration = exaggeration;\n\n this.addSource(defaults.terrainSourceId, {\n type: \"raster-dem\",\n url: defaults.terrainSourceURL,\n });\n this.setTerrain({\n source: defaults.terrainSourceId,\n exaggeration: exaggeration,\n });\n };\n\n // The terrain has already been loaded,\n // we just update the exaggeration.\n if (terrainInfo) {\n this.setTerrain({ ...terrainInfo, exaggeration });\n return;\n }\n\n if (this.loaded() || this.isTerrainEnabled) {\n addTerrain();\n } else {\n this.once(\"load\", () => {\n if (this.getTerrain() && this.getSource(defaults.terrainSourceId)) {\n return;\n }\n addTerrain();\n });\n }\n }\n\n /**\n * Disable the 3D terrain visualization\n */\n disableTerrain() {\n this.isTerrainEnabled = false;\n this.setTerrain(null);\n if (this.getSource(defaults.terrainSourceId)) {\n this.removeSource(defaults.terrainSourceId);\n }\n }\n\n /**\n * Sets the 3D terrain exageration factor.\n * Note: this is only a shortcut to `.enableTerrain()`\n * @param exaggeration\n */\n setTerrainExaggeration(exaggeration: number) {\n this.enableTerrain(exaggeration);\n }\n\n // getLanguages() {\n // const layers = this.getStyle().layers;\n\n // for (let i = 0; i < layers.length; i += 1) {\n // const layer = layers[i];\n // const layout = layer.layout;\n\n // if (!layout) {\n // continue;\n // }\n\n // if (!layout[\"text-field\"]) {\n // continue;\n // }\n\n // const textFieldLayoutProp = this.getLayoutProperty(\n // layer.id,\n // \"text-field\"\n // );\n // }\n // }\n\n /**\n * Perform an action when the style is ready. It could be at the moment of calling this method\n * or later.\n * @param cb\n */\n private onStyleReady(cb) {\n if (this.isStyleLoaded()) {\n cb();\n } else {\n this.once(\"styledata\", () => {\n cb();\n });\n }\n }\n\n async fitToIpBounds() {\n const ipGeolocateResult = await geolocation.info();\n this.fitBounds(\n ipGeolocateResult.country_bounds as [number, number, number, number],\n {\n duration: 0,\n padding: 100,\n }\n );\n }\n\n async centerOnIpPoint(zoom: number | undefined) {\n const ipGeolocateResult = await geolocation.info();\n this.jumpTo({\n center: [ipGeolocateResult.longitude, ipGeolocateResult.latitude],\n zoom: zoom || 11,\n });\n }\n\n getCameraHash() {\n const hashBin = new Float32Array(5);\n const center = this.getCenter();\n hashBin[0] = center.lng;\n hashBin[1] = center.lat;\n hashBin[2] = this.getZoom();\n hashBin[3] = this.getPitch();\n hashBin[4] = this.getBearing();\n return Base64.fromUint8Array(new Uint8Array(hashBin.buffer));\n }\n}\n","/**\n * This is TypeScript rewrite of the Point class to use instead of the version imported in MapLibre.\n * It also uses a class instead of prototypes.\n */\n\n/**\n * Row major 2x2 matrix\n */\nexport type Matrix2 = [number, number, number, number];\n\n/**\n * a point\n * @param x\n * @param y\n */\nexport class Point {\n public x: number;\n public y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n private _matMult(m: Matrix2): Point {\n const x = m[0] * this.x + m[1] * this.y;\n const y = m[2] * this.x + m[3] * this.y;\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _add(p: Point): Point {\n this.x += p.x;\n this.y += p.y;\n return this;\n }\n\n private _sub(p: Point): Point {\n this.x -= p.x;\n this.y -= p.y;\n return this;\n }\n\n private _mult(k: number): Point {\n this.x *= k;\n this.y *= k;\n return this;\n }\n\n private _div(k: number): Point {\n this.x /= k;\n this.y /= k;\n return this;\n }\n\n private _multByPoint(p: Point): Point {\n this.x *= p.x;\n this.y *= p.y;\n return this;\n }\n\n private _divByPoint(p: Point): Point {\n this.x /= p.x;\n this.y /= p.y;\n return this;\n }\n\n private _unit(): Point {\n this._div(this.mag());\n return this;\n }\n\n private _perp(): Point {\n const y = this.y;\n this.y = this.x;\n this.x = -y;\n return this;\n }\n\n private _rotate(angle: number): Point {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = cos * this.x - sin * this.y;\n const y = sin * this.x + cos * this.y;\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _rotateAround(angle: number, p: Point): Point {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y);\n const y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _round(): Point {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n\n /**\n * Clone this point, returning a new point that can be modified\n * without affecting the old one.\n * @return {Point} the clone\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Add this point's x & y coordinates to another point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n add(p: Point): Point {\n return this.clone()._add(p);\n }\n\n /**\n * Subtract this point's x & y coordinates to from point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n sub(p: Point): Point {\n return this.clone()._sub(p);\n }\n\n /**\n * Multiply this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n multByPoint(p: Point): Point {\n return this.clone()._multByPoint(p);\n }\n\n /**\n * Divide this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n divByPoint(p: Point): Point {\n return this.clone()._divByPoint(p);\n }\n\n /**\n * Multiply this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Number} k factor\n * @return {Point} output point\n */\n mult(k: number): Point {\n return this.clone()._mult(k);\n }\n\n /**\n * Divide this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Point} k factor\n * @return {Point} output point\n */\n div(k: number): Point {\n return this.clone()._div(k);\n }\n\n /**\n * Rotate this point around the 0, 0 origin by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @return {Point} output point\n */\n rotate(a: number): Point {\n return this.clone()._rotate(a);\n }\n\n /**\n * Rotate this point around p point by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @param {Point} p Point to rotate around\n * @return {Point} output point\n */\n rotateAround(a: number, p: Point): Point {\n return this.clone()._rotateAround(a, p);\n }\n\n /**\n * Multiply this point by a 4x1 transformation matrix\n * @param {Array<Number>} m transformation matrix\n * @return {Point} output point\n */\n matMult(m: Matrix2): Point {\n return this.clone()._matMult(m);\n }\n\n /**\n * Calculate this point but as a unit vector from 0, 0, meaning\n * that the distance from the resulting point to the 0, 0\n * coordinate will be equal to 1 and the angle from the resulting\n * point to the 0, 0 coordinate will be the same as before.\n * @return {Point} unit vector point\n */\n unit(): Point {\n return this.clone()._unit();\n }\n\n /**\n * Compute a perpendicular point, where the new y coordinate\n * is the old x coordinate and the new x coordinate is the old y\n * coordinate multiplied by -1\n * @return {Point} perpendicular point\n */\n perp(): Point {\n return this.clone()._perp();\n }\n\n /**\n * Return a version of this point with the x & y coordinates\n * rounded to integers.\n * @return {Point} rounded point\n */\n round(): Point {\n return this.clone()._round();\n }\n\n /**\n * Return the magnitude of this point: this is the Euclidean\n * distance from the 0, 0 coordinate to this point's x and y\n * coordinates.\n * @return {Number} magnitude\n */\n mag(): number {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * Judge whether this point is equal to another point, returning\n * true or false.\n * @param {Point} other the other point\n * @return {boolean} whether the points are equal\n */\n equals(other): boolean {\n return this.x === other.x && this.y === other.y;\n }\n\n /**\n * Calculate the distance from this point to another point\n * @param {Point} p the other point\n * @return {Number} distance\n */\n dist(p): number {\n return Math.sqrt(this.distSqr(p));\n }\n\n /**\n * Calculate the distance from this point to another point,\n * without the square root step. Useful if you're comparing\n * relative distances.\n * @param {Point} p the other point\n * @return {Number} distance\n */\n distSqr(p): number {\n const dx = p.x - this.x;\n const dy = p.y - this.y;\n return dx * dx + dy * dy;\n }\n\n /**\n * Get the angle from the 0, 0 coordinate to this point, in radians\n * coordinates.\n * @return {Number} angle\n */\n angle(): number {\n return Math.atan2(this.y, this.x);\n }\n\n /**\n * Get the angle from this point to another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleTo(b: Point): number {\n return Math.atan2(this.y - b.y, this.x - b.x);\n }\n\n /**\n * Get the angle between this point and another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleWith(b: Point): number {\n return this.angleWithSep(b.x, b.y);\n }\n\n /*\n * Find the angle of the two vectors, solving the formula for\n * the cross product a x b = |a||b|sin(θ) for θ.\n * @param {Number} x the x-coordinate\n * @param {Number} y the y-coordinate\n * @return {Number} the angle in radians\n */\n angleWithSep(x: number, y: number): number {\n return Math.atan2(this.x * y - this.y * x, this.x * x + this.y * y);\n }\n\n /**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array<number> | Point} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\n static convert(a: Point | Array<number>) {\n if (a instanceof Point) {\n return a;\n }\n if (Array.isArray(a)) {\n return new Point(a[0], a[1]);\n }\n return a;\n }\n}\n","/**\n * Maplibre export first, then extensions can overload the exports.\n */\nexport * from \"maplibre-gl\";\n\n/**\n * To perform explicit named export so that they are included in the UMD bundle\n */\n// import * as ML from \"maplibre-gl\";\n\nimport maplibregl from \"maplibre-gl\";\n\nconst {\n supported,\n setRTLTextPlugin,\n getRTLTextPluginStatus,\n NavigationControl,\n GeolocateControl,\n AttributionControl,\n LogoControl,\n ScaleControl,\n FullscreenControl,\n TerrainControl,\n Popup,\n Marker,\n Style,\n LngLat,\n LngLatBounds,\n MercatorCoordinate,\n Evented,\n AJAXError,\n CanvasSource,\n GeoJSONSource,\n ImageSource,\n RasterDEMTileSource,\n RasterTileSource,\n VectorTileSource,\n VideoSource,\n prewarm,\n clearPrewarmedResources,\n version,\n workerCount,\n maxParallelImageRequests,\n clearStorage,\n workerUrl,\n addProtocol,\n removeProtocol,\n\n // isSafari,\n // getPerformanceMetrics,\n // config,\n // Point,\n} = maplibregl;\n\nexport {\n supported,\n setRTLTextPlugin,\n getRTLTextPluginStatus,\n // Map,\n NavigationControl,\n GeolocateControl,\n AttributionControl,\n LogoControl,\n ScaleControl,\n FullscreenControl,\n TerrainControl,\n Popup,\n Marker,\n Style,\n LngLat,\n LngLatBounds,\n // Point,\n MercatorCoordinate,\n Evented,\n AJAXError,\n // config,\n CanvasSource,\n GeoJSONSource,\n ImageSource,\n RasterDEMTileSource,\n RasterTileSource,\n VectorTileSource,\n VideoSource,\n prewarm,\n clearPrewarmedResources,\n version,\n workerCount,\n maxParallelImageRequests,\n clearStorage,\n workerUrl,\n addProtocol,\n removeProtocol,\n // isSafari,\n // getPerformanceMetrics\n};\n\nimport { Map, GeolocationType } from \"./Map\";\nimport type { MapOptions } from \"./Map\";\n\n// importing client functions to expose them as part of the SDK\nimport type {\n BBox,\n Position,\n GeocodingOptions,\n CoordinatesSearchOptions,\n CenteredStaticMapOptions,\n AutomaticStaticMapOptions,\n BoundedStaticMapOptions,\n} from \"@maptiler/client\";\n\nimport {\n geocoding,\n geolocation,\n coordinates,\n data,\n staticMaps,\n ServiceError,\n LanguageGeocoding,\n LanguageGeocodingString,\n ReferenceMapStyle,\n MapStyle,\n MapStyleVariant,\n} from \"@maptiler/client\";\n\nimport type { MapStyleType } from \"@maptiler/client\";\n\nimport { Point } from \"./Point\";\nimport type { Matrix2 } from \"./Point\";\n\n// Importing enums and configs\nimport { config, SdkConfig } from \"./config\";\nimport { Language, LanguageString, LanguageKey } from \"./language\";\nimport type { Unit } from \"./unit\";\n\n// Exporting types\nexport type {\n MapOptions,\n GeocodingOptions,\n BBox,\n Position,\n CoordinatesSearchOptions,\n CenteredStaticMapOptions,\n BoundedStaticMapOptions,\n AutomaticStaticMapOptions,\n LanguageString,\n LanguageKey,\n LanguageGeocodingString,\n Unit,\n MapStyleType,\n Matrix2,\n};\n\n// Exporting classes, objects, functions, etc.\nexport {\n Map,\n GeolocationType,\n SdkConfig,\n config,\n ServiceError,\n geocoding,\n geolocation,\n coordinates,\n data,\n staticMaps,\n MapStyle,\n Language,\n LanguageGeocoding,\n Point,\n ReferenceMapStyle,\n MapStyleVariant,\n};\n"],"names":["clientConfig","maplibregl","TerrainControl","GeolocateControl","Marker","LngLat","__spreadValues","uuidv4"],"mappings":"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"}
@@ -2445,9 +2445,16 @@
2445
2445
  }
2446
2446
  return a;
2447
2447
  };
2448
- class CustomGeolocateControl extends maplibreGl.exports.GeolocateControl {
2448
+ const GeolocateControl$1 = maplibregl.GeolocateControl;
2449
+ const Marker$1 = maplibregl.Marker;
2450
+ const LngLat$1 = maplibregl.LngLat;
2451
+ class CustomGeolocateControl extends GeolocateControl$1 {
2452
+ constructor() {
2453
+ super(...arguments);
2454
+ this.lastUpdatedCenter = new LngLat$1(0, 0);
2455
+ }
2449
2456
  _updateCamera(position) {
2450
- const center = new maplibreGl.exports.LngLat(
2457
+ const center = new LngLat$1(
2451
2458
  position.coords.longitude,
2452
2459
  position.coords.latitude
2453
2460
  );
@@ -2483,12 +2490,10 @@
2483
2490
  return;
2484
2491
  }
2485
2492
  this.lastUpdatedCenter = this._map.getCenter();
2486
- this.lastUpdatedZoom = this._map.getZoom();
2487
2493
  });
2488
2494
  }
2489
2495
  _setupUI(supported) {
2490
2496
  this.lastUpdatedCenter = this._map.getCenter();
2491
- this.lastUpdatedZoom = this._map.getZoom();
2492
2497
  this._container.addEventListener(
2493
2498
  "contextmenu",
2494
2499
  (e) => e.preventDefault()
@@ -2522,12 +2527,12 @@
2522
2527
  }
2523
2528
  if (this.options.showUserLocation) {
2524
2529
  this._dotElement = DOMcreate("div", "maplibregl-user-location-dot");
2525
- this._userLocationDotMarker = new maplibreGl.exports.Marker(this._dotElement);
2530
+ this._userLocationDotMarker = new Marker$1(this._dotElement);
2526
2531
  this._circleElement = DOMcreate(
2527
2532
  "div",
2528
2533
  "maplibregl-user-location-accuracy-circle"
2529
2534
  );
2530
- this._accuracyCircleMarker = new maplibreGl.exports.Marker({
2535
+ this._accuracyCircleMarker = new Marker$1({
2531
2536
  element: this._circleElement,
2532
2537
  pitchAlignment: "map"
2533
2538
  });