diff --git a/dist/maplibre-gl-indoorequal.cjs.js b/dist/maplibre-gl-indoorequal.cjs.js index 6f2a568..e3f77d4 100644 --- a/dist/maplibre-gl-indoorequal.cjs.js +++ b/dist/maplibre-gl-indoorequal.cjs.js @@ -805,3 +805,4 @@ class IndoorEqual { */ module.exports = IndoorEqual; +//# sourceMappingURL=maplibre-gl-indoorequal.cjs.js.map diff --git a/dist/maplibre-gl-indoorequal.cjs.js.map b/dist/maplibre-gl-indoorequal.cjs.js.map new file mode 100644 index 0000000..3f29d5f --- /dev/null +++ b/dist/maplibre-gl-indoorequal.cjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"maplibre-gl-indoorequal.cjs.js","sources":["../src/levels.js","../src/level_control.js","../src/layers.js","../src/image.js","../src/sprite.js","../src/index.js"],"sourcesContent":["export default function findAllLevels(features) {\n const levels = [];\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n if (feature.properties.class === 'level') {\n continue;\n }\n const level = feature.properties.level;\n if (!levels.includes(level)) {\n levels.push(level);\n }\n }\n return levels.sort((a, b) => a - b).reverse();\n}\n","export default class LevelControl {\n constructor(indoorequal) {\n this.indoorequal = indoorequal;\n this._cbRefresh = () => this._refresh();\n this.indoorequal.on('levelschange', this._cbRefresh);\n this.indoorequal.on('levelchange', this._cbRefresh);\n\n this.$el = document.createElement('div');\n this.$el.classList.add('maplibregl-ctrl', 'maplibregl-ctrl-group', 'maplibregl-ctrl-indoorequal');\n this._refresh();\n }\n\n destroy() {\n this.$el.remove();\n this.indoorequal.off('levelschange', this._cbRefresh);\n this.indoorequal.off('levelchange', this._cbRefresh);\n }\n\n _refresh() {\n this.$el.innerHTML = '';\n this.indoorequal.levels.forEach((level) => {\n const button = document.createElement('button');\n const strong = document.createElement('strong');\n strong.textContent = level;\n button.appendChild(strong);\n if (level == this.indoorequal.level) {\n button.classList.add('maplibregl-ctrl-active');\n }\n button.addEventListener('click', () => { this.indoorequal.setLevel(level); })\n this.$el.appendChild(button);\n });\n }\n}\n","const commonPoi = {\n \"type\": \"symbol\",\n \"source-layer\": \"poi\",\n \"layout\": {\n \"icon-image\": [\n \"coalesce\",\n [\n \"image\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"subclass\"\n ]\n ],\n ],\n [\n \"image\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"class\"\n ]\n ]\n ]\n ],\n \"text-anchor\": \"top\",\n \"text-field\": [\n \"concat\",\n [\"get\", \"name:latin\"],\n \"\\n\",\n [\"get\", \"name:nonlatin\"],\n ],\n \"text-max-width\": 9,\n \"text-offset\": [\n 0,\n 0.6\n ],\n \"text-padding\": 2,\n \"text-size\": 12\n },\n \"paint\": {\n \"text-color\": \"#666\",\n \"text-halo-blur\": 0.5,\n \"text-halo-color\": \"#ffffff\",\n \"text-halo-width\": 1\n }\n};\n\nconst rank2Class = [\"waste_basket\", \"information\", \"vending_machine\", \"bench\", \"photo_booth\", \"ticket_validator\"];\n\nexport const layers = [\n {\n id: \"indoor-polygon\",\n type: \"fill\",\n \"source-layer\": \"area\",\n filter: [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Polygon\"\n ],\n [\n \"!=\",\n \"class\",\n \"level\"\n ]\n ],\n paint: {\n \"fill-color\": [\n \"case\",\n // if private\n [\"all\", [\"has\", \"access\"], [\"in\", [\"get\", \"access\"], [\"literal\", [\"no\", \"private\"]]]],\n \"#F2F1F0\",\n // if POI\n [\"any\",\n [\"all\", [\"==\", [\"get\", \"is_poi\"], true], [\"!=\", [\"get\", \"class\"], \"corridor\"]],\n [\n \"in\",\n [\"get\", \"subclass\"],\n [\"literal\", [\"class\", \"laboratory\", \"office\", \"auditorium\", \"amphitheatre\", \"reception\"]]]\n ],\n \"#D4EDFF\",\n // if is a room\n [\"==\", [\"get\", \"class\"], \"room\"],\n \"#fefee2\",\n // default\n \"#fdfcfa\"\n ]\n }\n },\n {\n id: \"indoor-area\",\n \"type\": \"line\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"class\",\n \"area\",\n \"corridor\",\n \"platform\"\n ]\n ],\n \"paint\": {\n \"line-color\": \"#bfbfbf\",\n \"line-width\": 1\n }\n },\n {\n id: \"indoor-column\",\n \"type\": \"fill\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"class\",\n \"column\"\n ]\n ],\n \"paint\": {\n \"fill-color\": \"#bfbfbf\"\n }\n },\n {\n id: \"indoor-lines\",\n \"type\": \"line\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"class\",\n \"room\",\n \"wall\"\n ]\n ],\n \"paint\": {\n \"line-color\": \"gray\",\n \"line-width\": 2\n }\n },\n {\n id: \"indoor-transportation\",\n \"type\": \"line\",\n \"source-layer\": \"transportation\",\n \"filter\": [\n \"all\"\n ],\n \"paint\": {\n \"line-color\": \"gray\",\n \"line-dasharray\": [\n 0.4,\n 0.75\n ],\n \"line-width\": {\n \"base\": 1.4,\n \"stops\": [\n [\n 17,\n 2\n ],\n [\n 20,\n 10\n ]\n ]\n }\n }\n },\n {\n id: \"indoor-transportation-poi\",\n \"type\": \"symbol\",\n \"source-layer\": \"transportation\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"$type\",\n \"Point\",\n \"LineString\"\n ],\n [\n \"in\",\n \"class\",\n \"steps\",\n \"elevator\",\n \"escalator\"\n ]\n ],\n \"layout\": {\n \"icon-image\": [\n \"case\",\n [\n \"has\",\n \"conveying\"\n ],\n \"indoorequal-escalator\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"class\"\n ]\n ]\n ],\n \"symbol-placement\": \"line-center\",\n \"icon-rotation-alignment\": \"viewport\"\n }\n },\n {\n id: \"indoor-poi-rank1\",\n ...commonPoi,\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Point\"\n ],\n [\n \"!in\",\n \"class\",\n ...rank2Class\n ]\n ]\n },\n {\n id: \"indoor-poi-rank2\",\n ...commonPoi,\n minzoom: 19,\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Point\"\n ],\n [\n \"in\",\n \"class\",\n ...rank2Class\n ]\n ]\n },\n {\n id: \"indoor-heat\",\n \"type\": \"heatmap\",\n \"source-layer\": \"heat\",\n \"filter\": [ \"all\" ],\n \"paint\": {\n \"heatmap-color\": [\"interpolate\", [\"linear\"], [\"heatmap-density\"],\n 0, \"rgba(102, 103, 173, 0)\",\n 0.1, \"rgba(102, 103, 173, 0.2)\",\n 1, \"rgba(102, 103, 173, 0.7)\"\n ],\n \"heatmap-radius\": [\n \"interpolate\", [\"linear\"], [\"zoom\"],\n 0, 3,\n 13, 20,\n 17, 40\n ],\n \"heatmap-intensity\": 1,\n \"heatmap-opacity\": [\n \"interpolate\", [\"linear\"], [\"zoom\"],\n 16, 1,\n 17.1, 0\n ]\n }\n },\n {\n id: \"indoor-name\",\n \"type\": \"symbol\",\n \"source-layer\": \"area_name\",\n \"filter\": [\n \"all\"\n ],\n \"layout\": {\n \"text-field\": [\n \"concat\",\n [\"coalesce\",\n [\"get\", \"name:latin\"],\n [\"get\", \"ref\"],\n ],\n \"\\n\",\n [\"get\", \"name:nonlatin\"],\n ],\n \"text-max-width\": 5,\n \"text-size\": 14\n },\n \"paint\": {\n \"text-color\": \"#666\",\n \"text-halo-color\": \"#ffffff\",\n \"text-halo-width\": 1\n }\n }\n];\n","function createImage(image, {width, height}, channels, data) {\n if (!data) {\n data = new Uint8Array(width * height * channels);\n } else if (data instanceof Uint8ClampedArray) {\n data = new Uint8Array(data.buffer);\n } else if (data.length !== width * height * channels) {\n throw new RangeError('mismatched image size');\n }\n image.width = width;\n image.height = height;\n image.data = data;\n return image;\n}\n\nfunction resizeImage(image, {width, height}, channels) {\n if (width === image.width && height === image.height) {\n return;\n }\n\n const newImage = createImage({}, {width, height}, channels);\n\n copyImage(image, newImage, {x: 0, y: 0}, {x: 0, y: 0}, {\n width: Math.min(image.width, width),\n height: Math.min(image.height, height)\n }, channels);\n\n image.width = width;\n image.height = height;\n image.data = newImage.data;\n}\n\nfunction copyImage(srcImg, dstImg, srcPt, dstPt, size, channels) {\n if (size.width === 0 || size.height === 0) {\n return dstImg;\n }\n\n if (size.width > srcImg.width ||\n size.height > srcImg.height ||\n srcPt.x > srcImg.width - size.width ||\n srcPt.y > srcImg.height - size.height) {\n throw new RangeError('out of range source coordinates for image copy');\n }\n\n if (size.width > dstImg.width ||\n size.height > dstImg.height ||\n dstPt.x > dstImg.width - size.width ||\n dstPt.y > dstImg.height - size.height) {\n throw new RangeError('out of range destination coordinates for image copy');\n }\n\n const srcData = srcImg.data;\n const dstData = dstImg.data;\n\n for (let y = 0; y < size.height; y++) {\n const srcOffset = ((srcPt.y + y) * srcImg.width + srcPt.x) * channels;\n const dstOffset = ((dstPt.y + y) * dstImg.width + dstPt.x) * channels;\n for (let i = 0; i < size.width * channels; i++) {\n dstData[dstOffset + i] = srcData[srcOffset + i];\n }\n }\n return dstImg;\n}\n\n// Not premultiplied, because ImageData is not premultiplied.\n// UNPACK_PREMULTIPLY_ALPHA_WEBGL must be used when uploading to a texture.\nexport class RGBAImage {\n constructor(size, data) {\n createImage(this, size, 4, data);\n }\n\n resize(size) {\n resizeImage(this, size, 4);\n }\n\n replace(data, copy) {\n if (copy) {\n this.data.set(data);\n } else if (data instanceof Uint8ClampedArray) {\n this.data = new Uint8Array(data.buffer);\n } else {\n this.data = data;\n }\n }\n\n clone() {\n return new RGBAImage({width: this.width, height: this.height}, new Uint8Array(this.data));\n }\n\n static copy(srcImg, dstImg, srcPt, dstPt, size) {\n copyImage(srcImg, dstImg, srcPt, dstPt, size, 4);\n }\n}\n","import {RGBAImage} from './image';\n\nfunction getImageData(img, padding) {\n const canvas = window.document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n throw new Error('failed to create canvas 2d context');\n }\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0, img.width, img.height);\n return context.getImageData(0, 0, img.width, img.height);\n}\n\nexport default function(baseUrl) {\n const format = window.devicePixelRatio > 1 ? '@2x' : '';\n let json, image;\n\n const jsonRequest = fetch(`${baseUrl}${format}.json`)\n .then(r => r.json())\n .then(r => json = r)\n\n const imageRequest = fetch(`${baseUrl}${format}.png`)\n .then(r => r.blob())\n .then(r => {\n image = new Image();\n image.src = URL.createObjectURL(r);\n return new Promise((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = () => reject();\n });\n });\n\n return Promise.all([jsonRequest, imageRequest])\n .then(() => {\n const imageData = getImageData(image);\n const result = {};\n\n for (const id in json) {\n const {width, height, x, y, sdf, pixelRatio, stretchX, stretchY, content} = json[id];\n const data = new RGBAImage({width, height});\n RGBAImage.copy(imageData, data, {x, y}, {x: 0, y: 0}, {width, height});\n result[id] = {data, pixelRatio, sdf, stretchX, stretchY, content};\n }\n return result;\n });\n}\n","import debounce from 'debounce';\nimport arrayEqual from 'array-equal';\nimport findAllLevels from './levels';\nimport LevelControl from './level_control';\nimport { layers } from './layers';\nimport loadSprite from './sprite';\n\nclass GeoJSONSource {\n constructor(map, options = {}) {\n const defaultOpts = { layers, geojson: {} };\n const opts = { ...defaultOpts, ...options };\n this.map = map;\n this.geojson = opts.geojson;\n this.layers = opts.layers;\n this.baseSourceId = 'indoorequal';\n this.sourceId = `${this.baseSourceId}_area`;\n }\n\n addSource() {\n Object.keys(this.geojson).forEach((layerName) => {\n this.map.addSource(`${this.baseSourceId}_${layerName}`, {\n type: 'geojson',\n data: this.geojson[layerName]\n });\n });\n }\n\n addLayers() {\n const sourceLayers = Object.keys(this.geojson);\n const layers = this.layers;\n this.layers = layers.filter((layer) => {\n return sourceLayers.includes(layer['source-layer']);\n });\n this.layers.forEach((layer) => {\n this.map.addLayer({\n source: `${this.baseSourceId}_${layer['source-layer']}`,\n ...layer,\n 'source-layer': ''\n });\n });\n }\n\n remove() {\n this.layers.forEach((layer) => {\n this.map.removeLayer(layer.id);\n });\n Object.keys(this.geojson).forEach((layerName) => {\n this.map.removeSource(`${this.baseSourceId}_${layerName}`);\n });\n }\n}\n\nclass VectorTileSource {\n constructor(map, options = {}) {\n const defaultOpts = { url: 'https://tiles.indoorequal.org/', layers };\n const opts = { ...defaultOpts, ...options };\n if (opts.url === defaultOpts.url && !opts.apiKey) {\n throw 'You must register your apiKey at https://indoorequal.com before and set it as apiKey param.';\n }\n this.map = map;\n this.url = opts.url;\n this.apiKey = opts.apiKey;\n this.layers = opts.layers;\n this.sourceId = 'indoorequal';\n }\n\n addSource() {\n const queryParams = this.apiKey ? `?key=${this.apiKey}` : '';\n this.map.addSource(this.sourceId, {\n type: 'vector',\n url: `${this.url}${queryParams}`\n });\n }\n\n addLayers() {\n this.layers.forEach((layer) => {\n this.map.addLayer({\n source: this.sourceId,\n ...layer\n });\n });\n }\n\n remove() {\n this.layers.forEach((layer) => {\n this.map.removeLayer(layer.id);\n });\n this.map.removeSource(this.sourceId);\n }\n}\n\n/**\n * Load the indoor= source and layers in your map.\n * @param {object} map the maplibre-gl instance of the map\n * @param {object} options\n * @param {string} [options.url] Override the default tiles URL (https://tiles.indoorequal.org/).\n * @param {object} [options.geojson] GeoJSON data with with key as layer name and value with geojson features\n * @param {string} [options.apiKey] The API key if you use the default tile URL (get your free key at [indoorequal.com](https://indoorequal.com)).\n * @param {array} [options.layers] The layers to be used to style indoor= tiles. Take a look a the [layers.js file](https://github.com/indoorequal/maplibre-gl-indoorequal/blob/master/src/layers.js) file and the [vector schema](https://indoorequal.com/schema)\n * @param {boolean} [options.heatmap] Should the heatmap layer be visible at start (true : visible, false : hidden). Defaults to true/visible.\n * @property {string} level The current level displayed\n * @property {array} levels The levels that can be displayed in the current view\n * @fires IndoorEqual#levelschange\n * @fires IndoorEqual#levelchange\n * @return {IndoorEqual} `this`\n */\nexport default class IndoorEqual {\n constructor(map, options = {}) {\n const SourceKlass = options.geojson ? GeoJSONSource : VectorTileSource;\n const defaultOpts = { heatmap: true };\n const opts = { ...defaultOpts, ...options };\n this.source = new SourceKlass(map, options);\n this.map = map;\n this.levels = [];\n this.level = '0';\n this.events = {};\n\n if (this.map.isStyleLoaded()) {\n this._init();\n this.setHeatmapVisible(opts.heatmap);\n } else {\n this.map.once('load', () => {\n this._init();\n this.setHeatmapVisible(opts.heatmap);\n });\n }\n }\n\n /**\n * Remove any layers, source and listeners and controls\n */\n remove() {\n this.source.remove();\n this._updateLevelsDebounce.clear();\n this.map.off('load', this._updateLevelsDebounce);\n this.map.off('data', this._updateLevelsDebounce);\n this.map.off('move', this._updateLevelsDebounce);\n if (this._control) {\n this.onRemove();\n }\n }\n\n /**\n * Add an event listener\n * @param {string} name the name of the event\n * @param {function} fn the function to be called when the event is emitted\n */\n on(name, fn) {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(fn);\n }\n\n /**\n * Remove an event listener.\n * @param {string} name the name of the event\n * @param {function} fn the same function when on() was called\n */\n off(name, fn) {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name] = this.events[name].filter(cb => cb !== fn);\n }\n\n /**\n * Add the level control to the map\n * Used when adding the control via the map instance: map.addControl(indoorEqual)\n */\n onAdd() {\n this._control = new LevelControl(this);\n return this._control.$el;\n }\n\n /**\n * Remove the level control\n * Used when removing the control via the map instance: map.removeControl(indoorEqual)\n */\n onRemove() {\n this._control.destroy();\n this._control = null;\n }\n\n /**\n * Set the displayed level.\n * @param {string} level the level to be displayed\n * @fires IndoorEqual#levelchange\n */\n setLevel(level) {\n this.level = level;\n this._updateFilters();\n this._emitLevelChange();\n }\n\n /**\n * Set the displayed level.\n * @deprecated Use setLevel instead\n * @param {string} level the level to be displayed\n * @fires IndoorEqual#levelchange\n */\n updateLevel(level) {\n console.log('The updateLevel method is deprecated. Please use setLevel instead.');\n this.setLevel(level);\n }\n\n /**\n * Load a sprite and add all images to the map\n * @param {string} baseUrl the baseUrl where to load the sprite\n * @param {object} options\n * @param {boolean} [options.update] Update existing image (default false)\n * @return {Promise} It resolves an hash of images.\n */\n loadSprite(baseUrl, options = {}) {\n const opts = { update: false, ...options };\n return loadSprite(baseUrl)\n .then((sprite) => {\n for (const id in sprite) {\n const { data, ...options } = sprite[id];\n if (!this.map.hasImage(id)) {\n this.map.addImage(id, data, options);\n } else if (opts.update) {\n this.map.updateImage(id, data);\n }\n }\n return sprite;\n });\n }\n\n /**\n * Change the heatmap layer visibility\n * @param {boolean} visible True to make it visible, false to hide it\n */\n setHeatmapVisible(visible) {\n if (this.map.getLayer('indoor-heat')) {\n this.map.setLayoutProperty('indoor-heat', 'visibility', visible ? 'visible' : 'none');\n }\n }\n\n _init() {\n this.source.addSource();\n this.source.addLayers();\n this._updateFilters();\n this._updateLevelsDebounce = debounce(this._updateLevels.bind(this), 1000);\n\n this.map.on('load', this._updateLevelsDebounce);\n this.map.on('data', this._updateLevelsDebounce);\n this.map.on('move', this._updateLevelsDebounce);\n this.map.on('remove', () => {\n this.remove();\n });\n }\n\n _updateFilters() {\n this.source.layers\n .filter(layer => layer.type !== 'heatmap')\n .forEach((layer) => {\n this.map.setFilter(layer.id, [ ...layer.filter || ['all'], ['==', 'level', this.level]]);\n });\n }\n\n _refreshAfterLevelsUpdate() {\n if (!this.levels.includes(this.level)) {\n this.setLevel('0');\n }\n }\n\n _updateLevels() {\n if (this.map.isSourceLoaded(this.source.sourceId)) {\n const features = this.map.querySourceFeatures(this.source.sourceId, { sourceLayer: 'area' });\n const levels = findAllLevels(features);\n if (!arrayEqual(levels, this.levels)) {\n this.levels = levels;\n this._emitLevelsChange();\n this._refreshAfterLevelsUpdate();\n }\n }\n }\n\n _emitLevelsChange() {\n this._emitEvent('levelschange', this.levels);\n }\n\n _emitLevelChange() {\n this._emitEvent('levelchange', this.level);\n }\n\n _emitEvent(eventName, ...args) {\n (this.events[eventName] || []).forEach(fn => fn(...args));\n }\n}\n\n/**\n * Emitted when the list of available levels has been updated\n *\n * @event IndoorEqual#levelschange\n * @type {array}\n */\n\n/**\n * Emitted when the current level has been updated\n *\n * @event IndoorEqual#levelchange\n * @type {string} always emitted when the level displayed has changed\n */\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/maplibre-gl-indoorequal.esm.js b/dist/maplibre-gl-indoorequal.esm.js index 7b96160..71d61cc 100644 --- a/dist/maplibre-gl-indoorequal.esm.js +++ b/dist/maplibre-gl-indoorequal.esm.js @@ -803,3 +803,4 @@ class IndoorEqual { */ export { IndoorEqual as default }; +//# sourceMappingURL=maplibre-gl-indoorequal.esm.js.map diff --git a/dist/maplibre-gl-indoorequal.esm.js.map b/dist/maplibre-gl-indoorequal.esm.js.map new file mode 100644 index 0000000..64e85c3 --- /dev/null +++ b/dist/maplibre-gl-indoorequal.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"maplibre-gl-indoorequal.esm.js","sources":["../src/levels.js","../src/level_control.js","../src/layers.js","../src/image.js","../src/sprite.js","../src/index.js"],"sourcesContent":["export default function findAllLevels(features) {\n const levels = [];\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n if (feature.properties.class === 'level') {\n continue;\n }\n const level = feature.properties.level;\n if (!levels.includes(level)) {\n levels.push(level);\n }\n }\n return levels.sort((a, b) => a - b).reverse();\n}\n","export default class LevelControl {\n constructor(indoorequal) {\n this.indoorequal = indoorequal;\n this._cbRefresh = () => this._refresh();\n this.indoorequal.on('levelschange', this._cbRefresh);\n this.indoorequal.on('levelchange', this._cbRefresh);\n\n this.$el = document.createElement('div');\n this.$el.classList.add('maplibregl-ctrl', 'maplibregl-ctrl-group', 'maplibregl-ctrl-indoorequal');\n this._refresh();\n }\n\n destroy() {\n this.$el.remove();\n this.indoorequal.off('levelschange', this._cbRefresh);\n this.indoorequal.off('levelchange', this._cbRefresh);\n }\n\n _refresh() {\n this.$el.innerHTML = '';\n this.indoorequal.levels.forEach((level) => {\n const button = document.createElement('button');\n const strong = document.createElement('strong');\n strong.textContent = level;\n button.appendChild(strong);\n if (level == this.indoorequal.level) {\n button.classList.add('maplibregl-ctrl-active');\n }\n button.addEventListener('click', () => { this.indoorequal.setLevel(level); })\n this.$el.appendChild(button);\n });\n }\n}\n","const commonPoi = {\n \"type\": \"symbol\",\n \"source-layer\": \"poi\",\n \"layout\": {\n \"icon-image\": [\n \"coalesce\",\n [\n \"image\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"subclass\"\n ]\n ],\n ],\n [\n \"image\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"class\"\n ]\n ]\n ]\n ],\n \"text-anchor\": \"top\",\n \"text-field\": [\n \"concat\",\n [\"get\", \"name:latin\"],\n \"\\n\",\n [\"get\", \"name:nonlatin\"],\n ],\n \"text-max-width\": 9,\n \"text-offset\": [\n 0,\n 0.6\n ],\n \"text-padding\": 2,\n \"text-size\": 12\n },\n \"paint\": {\n \"text-color\": \"#666\",\n \"text-halo-blur\": 0.5,\n \"text-halo-color\": \"#ffffff\",\n \"text-halo-width\": 1\n }\n};\n\nconst rank2Class = [\"waste_basket\", \"information\", \"vending_machine\", \"bench\", \"photo_booth\", \"ticket_validator\"];\n\nexport const layers = [\n {\n id: \"indoor-polygon\",\n type: \"fill\",\n \"source-layer\": \"area\",\n filter: [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Polygon\"\n ],\n [\n \"!=\",\n \"class\",\n \"level\"\n ]\n ],\n paint: {\n \"fill-color\": [\n \"case\",\n // if private\n [\"all\", [\"has\", \"access\"], [\"in\", [\"get\", \"access\"], [\"literal\", [\"no\", \"private\"]]]],\n \"#F2F1F0\",\n // if POI\n [\"any\",\n [\"all\", [\"==\", [\"get\", \"is_poi\"], true], [\"!=\", [\"get\", \"class\"], \"corridor\"]],\n [\n \"in\",\n [\"get\", \"subclass\"],\n [\"literal\", [\"class\", \"laboratory\", \"office\", \"auditorium\", \"amphitheatre\", \"reception\"]]]\n ],\n \"#D4EDFF\",\n // if is a room\n [\"==\", [\"get\", \"class\"], \"room\"],\n \"#fefee2\",\n // default\n \"#fdfcfa\"\n ]\n }\n },\n {\n id: \"indoor-area\",\n \"type\": \"line\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"class\",\n \"area\",\n \"corridor\",\n \"platform\"\n ]\n ],\n \"paint\": {\n \"line-color\": \"#bfbfbf\",\n \"line-width\": 1\n }\n },\n {\n id: \"indoor-column\",\n \"type\": \"fill\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"class\",\n \"column\"\n ]\n ],\n \"paint\": {\n \"fill-color\": \"#bfbfbf\"\n }\n },\n {\n id: \"indoor-lines\",\n \"type\": \"line\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"class\",\n \"room\",\n \"wall\"\n ]\n ],\n \"paint\": {\n \"line-color\": \"gray\",\n \"line-width\": 2\n }\n },\n {\n id: \"indoor-transportation\",\n \"type\": \"line\",\n \"source-layer\": \"transportation\",\n \"filter\": [\n \"all\"\n ],\n \"paint\": {\n \"line-color\": \"gray\",\n \"line-dasharray\": [\n 0.4,\n 0.75\n ],\n \"line-width\": {\n \"base\": 1.4,\n \"stops\": [\n [\n 17,\n 2\n ],\n [\n 20,\n 10\n ]\n ]\n }\n }\n },\n {\n id: \"indoor-transportation-poi\",\n \"type\": \"symbol\",\n \"source-layer\": \"transportation\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"$type\",\n \"Point\",\n \"LineString\"\n ],\n [\n \"in\",\n \"class\",\n \"steps\",\n \"elevator\",\n \"escalator\"\n ]\n ],\n \"layout\": {\n \"icon-image\": [\n \"case\",\n [\n \"has\",\n \"conveying\"\n ],\n \"indoorequal-escalator\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"class\"\n ]\n ]\n ],\n \"symbol-placement\": \"line-center\",\n \"icon-rotation-alignment\": \"viewport\"\n }\n },\n {\n id: \"indoor-poi-rank1\",\n ...commonPoi,\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Point\"\n ],\n [\n \"!in\",\n \"class\",\n ...rank2Class\n ]\n ]\n },\n {\n id: \"indoor-poi-rank2\",\n ...commonPoi,\n minzoom: 19,\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Point\"\n ],\n [\n \"in\",\n \"class\",\n ...rank2Class\n ]\n ]\n },\n {\n id: \"indoor-heat\",\n \"type\": \"heatmap\",\n \"source-layer\": \"heat\",\n \"filter\": [ \"all\" ],\n \"paint\": {\n \"heatmap-color\": [\"interpolate\", [\"linear\"], [\"heatmap-density\"],\n 0, \"rgba(102, 103, 173, 0)\",\n 0.1, \"rgba(102, 103, 173, 0.2)\",\n 1, \"rgba(102, 103, 173, 0.7)\"\n ],\n \"heatmap-radius\": [\n \"interpolate\", [\"linear\"], [\"zoom\"],\n 0, 3,\n 13, 20,\n 17, 40\n ],\n \"heatmap-intensity\": 1,\n \"heatmap-opacity\": [\n \"interpolate\", [\"linear\"], [\"zoom\"],\n 16, 1,\n 17.1, 0\n ]\n }\n },\n {\n id: \"indoor-name\",\n \"type\": \"symbol\",\n \"source-layer\": \"area_name\",\n \"filter\": [\n \"all\"\n ],\n \"layout\": {\n \"text-field\": [\n \"concat\",\n [\"coalesce\",\n [\"get\", \"name:latin\"],\n [\"get\", \"ref\"],\n ],\n \"\\n\",\n [\"get\", \"name:nonlatin\"],\n ],\n \"text-max-width\": 5,\n \"text-size\": 14\n },\n \"paint\": {\n \"text-color\": \"#666\",\n \"text-halo-color\": \"#ffffff\",\n \"text-halo-width\": 1\n }\n }\n];\n","function createImage(image, {width, height}, channels, data) {\n if (!data) {\n data = new Uint8Array(width * height * channels);\n } else if (data instanceof Uint8ClampedArray) {\n data = new Uint8Array(data.buffer);\n } else if (data.length !== width * height * channels) {\n throw new RangeError('mismatched image size');\n }\n image.width = width;\n image.height = height;\n image.data = data;\n return image;\n}\n\nfunction resizeImage(image, {width, height}, channels) {\n if (width === image.width && height === image.height) {\n return;\n }\n\n const newImage = createImage({}, {width, height}, channels);\n\n copyImage(image, newImage, {x: 0, y: 0}, {x: 0, y: 0}, {\n width: Math.min(image.width, width),\n height: Math.min(image.height, height)\n }, channels);\n\n image.width = width;\n image.height = height;\n image.data = newImage.data;\n}\n\nfunction copyImage(srcImg, dstImg, srcPt, dstPt, size, channels) {\n if (size.width === 0 || size.height === 0) {\n return dstImg;\n }\n\n if (size.width > srcImg.width ||\n size.height > srcImg.height ||\n srcPt.x > srcImg.width - size.width ||\n srcPt.y > srcImg.height - size.height) {\n throw new RangeError('out of range source coordinates for image copy');\n }\n\n if (size.width > dstImg.width ||\n size.height > dstImg.height ||\n dstPt.x > dstImg.width - size.width ||\n dstPt.y > dstImg.height - size.height) {\n throw new RangeError('out of range destination coordinates for image copy');\n }\n\n const srcData = srcImg.data;\n const dstData = dstImg.data;\n\n for (let y = 0; y < size.height; y++) {\n const srcOffset = ((srcPt.y + y) * srcImg.width + srcPt.x) * channels;\n const dstOffset = ((dstPt.y + y) * dstImg.width + dstPt.x) * channels;\n for (let i = 0; i < size.width * channels; i++) {\n dstData[dstOffset + i] = srcData[srcOffset + i];\n }\n }\n return dstImg;\n}\n\n// Not premultiplied, because ImageData is not premultiplied.\n// UNPACK_PREMULTIPLY_ALPHA_WEBGL must be used when uploading to a texture.\nexport class RGBAImage {\n constructor(size, data) {\n createImage(this, size, 4, data);\n }\n\n resize(size) {\n resizeImage(this, size, 4);\n }\n\n replace(data, copy) {\n if (copy) {\n this.data.set(data);\n } else if (data instanceof Uint8ClampedArray) {\n this.data = new Uint8Array(data.buffer);\n } else {\n this.data = data;\n }\n }\n\n clone() {\n return new RGBAImage({width: this.width, height: this.height}, new Uint8Array(this.data));\n }\n\n static copy(srcImg, dstImg, srcPt, dstPt, size) {\n copyImage(srcImg, dstImg, srcPt, dstPt, size, 4);\n }\n}\n","import {RGBAImage} from './image';\n\nfunction getImageData(img, padding) {\n const canvas = window.document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n throw new Error('failed to create canvas 2d context');\n }\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0, img.width, img.height);\n return context.getImageData(0, 0, img.width, img.height);\n}\n\nexport default function(baseUrl) {\n const format = window.devicePixelRatio > 1 ? '@2x' : '';\n let json, image;\n\n const jsonRequest = fetch(`${baseUrl}${format}.json`)\n .then(r => r.json())\n .then(r => json = r)\n\n const imageRequest = fetch(`${baseUrl}${format}.png`)\n .then(r => r.blob())\n .then(r => {\n image = new Image();\n image.src = URL.createObjectURL(r);\n return new Promise((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = () => reject();\n });\n });\n\n return Promise.all([jsonRequest, imageRequest])\n .then(() => {\n const imageData = getImageData(image);\n const result = {};\n\n for (const id in json) {\n const {width, height, x, y, sdf, pixelRatio, stretchX, stretchY, content} = json[id];\n const data = new RGBAImage({width, height});\n RGBAImage.copy(imageData, data, {x, y}, {x: 0, y: 0}, {width, height});\n result[id] = {data, pixelRatio, sdf, stretchX, stretchY, content};\n }\n return result;\n });\n}\n","import debounce from 'debounce';\nimport arrayEqual from 'array-equal';\nimport findAllLevels from './levels';\nimport LevelControl from './level_control';\nimport { layers } from './layers';\nimport loadSprite from './sprite';\n\nclass GeoJSONSource {\n constructor(map, options = {}) {\n const defaultOpts = { layers, geojson: {} };\n const opts = { ...defaultOpts, ...options };\n this.map = map;\n this.geojson = opts.geojson;\n this.layers = opts.layers;\n this.baseSourceId = 'indoorequal';\n this.sourceId = `${this.baseSourceId}_area`;\n }\n\n addSource() {\n Object.keys(this.geojson).forEach((layerName) => {\n this.map.addSource(`${this.baseSourceId}_${layerName}`, {\n type: 'geojson',\n data: this.geojson[layerName]\n });\n });\n }\n\n addLayers() {\n const sourceLayers = Object.keys(this.geojson);\n const layers = this.layers;\n this.layers = layers.filter((layer) => {\n return sourceLayers.includes(layer['source-layer']);\n });\n this.layers.forEach((layer) => {\n this.map.addLayer({\n source: `${this.baseSourceId}_${layer['source-layer']}`,\n ...layer,\n 'source-layer': ''\n });\n });\n }\n\n remove() {\n this.layers.forEach((layer) => {\n this.map.removeLayer(layer.id);\n });\n Object.keys(this.geojson).forEach((layerName) => {\n this.map.removeSource(`${this.baseSourceId}_${layerName}`);\n });\n }\n}\n\nclass VectorTileSource {\n constructor(map, options = {}) {\n const defaultOpts = { url: 'https://tiles.indoorequal.org/', layers };\n const opts = { ...defaultOpts, ...options };\n if (opts.url === defaultOpts.url && !opts.apiKey) {\n throw 'You must register your apiKey at https://indoorequal.com before and set it as apiKey param.';\n }\n this.map = map;\n this.url = opts.url;\n this.apiKey = opts.apiKey;\n this.layers = opts.layers;\n this.sourceId = 'indoorequal';\n }\n\n addSource() {\n const queryParams = this.apiKey ? `?key=${this.apiKey}` : '';\n this.map.addSource(this.sourceId, {\n type: 'vector',\n url: `${this.url}${queryParams}`\n });\n }\n\n addLayers() {\n this.layers.forEach((layer) => {\n this.map.addLayer({\n source: this.sourceId,\n ...layer\n });\n });\n }\n\n remove() {\n this.layers.forEach((layer) => {\n this.map.removeLayer(layer.id);\n });\n this.map.removeSource(this.sourceId);\n }\n}\n\n/**\n * Load the indoor= source and layers in your map.\n * @param {object} map the maplibre-gl instance of the map\n * @param {object} options\n * @param {string} [options.url] Override the default tiles URL (https://tiles.indoorequal.org/).\n * @param {object} [options.geojson] GeoJSON data with with key as layer name and value with geojson features\n * @param {string} [options.apiKey] The API key if you use the default tile URL (get your free key at [indoorequal.com](https://indoorequal.com)).\n * @param {array} [options.layers] The layers to be used to style indoor= tiles. Take a look a the [layers.js file](https://github.com/indoorequal/maplibre-gl-indoorequal/blob/master/src/layers.js) file and the [vector schema](https://indoorequal.com/schema)\n * @param {boolean} [options.heatmap] Should the heatmap layer be visible at start (true : visible, false : hidden). Defaults to true/visible.\n * @property {string} level The current level displayed\n * @property {array} levels The levels that can be displayed in the current view\n * @fires IndoorEqual#levelschange\n * @fires IndoorEqual#levelchange\n * @return {IndoorEqual} `this`\n */\nexport default class IndoorEqual {\n constructor(map, options = {}) {\n const SourceKlass = options.geojson ? GeoJSONSource : VectorTileSource;\n const defaultOpts = { heatmap: true };\n const opts = { ...defaultOpts, ...options };\n this.source = new SourceKlass(map, options);\n this.map = map;\n this.levels = [];\n this.level = '0';\n this.events = {};\n\n if (this.map.isStyleLoaded()) {\n this._init();\n this.setHeatmapVisible(opts.heatmap);\n } else {\n this.map.once('load', () => {\n this._init();\n this.setHeatmapVisible(opts.heatmap);\n });\n }\n }\n\n /**\n * Remove any layers, source and listeners and controls\n */\n remove() {\n this.source.remove();\n this._updateLevelsDebounce.clear();\n this.map.off('load', this._updateLevelsDebounce);\n this.map.off('data', this._updateLevelsDebounce);\n this.map.off('move', this._updateLevelsDebounce);\n if (this._control) {\n this.onRemove();\n }\n }\n\n /**\n * Add an event listener\n * @param {string} name the name of the event\n * @param {function} fn the function to be called when the event is emitted\n */\n on(name, fn) {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(fn);\n }\n\n /**\n * Remove an event listener.\n * @param {string} name the name of the event\n * @param {function} fn the same function when on() was called\n */\n off(name, fn) {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name] = this.events[name].filter(cb => cb !== fn);\n }\n\n /**\n * Add the level control to the map\n * Used when adding the control via the map instance: map.addControl(indoorEqual)\n */\n onAdd() {\n this._control = new LevelControl(this);\n return this._control.$el;\n }\n\n /**\n * Remove the level control\n * Used when removing the control via the map instance: map.removeControl(indoorEqual)\n */\n onRemove() {\n this._control.destroy();\n this._control = null;\n }\n\n /**\n * Set the displayed level.\n * @param {string} level the level to be displayed\n * @fires IndoorEqual#levelchange\n */\n setLevel(level) {\n this.level = level;\n this._updateFilters();\n this._emitLevelChange();\n }\n\n /**\n * Set the displayed level.\n * @deprecated Use setLevel instead\n * @param {string} level the level to be displayed\n * @fires IndoorEqual#levelchange\n */\n updateLevel(level) {\n console.log('The updateLevel method is deprecated. Please use setLevel instead.');\n this.setLevel(level);\n }\n\n /**\n * Load a sprite and add all images to the map\n * @param {string} baseUrl the baseUrl where to load the sprite\n * @param {object} options\n * @param {boolean} [options.update] Update existing image (default false)\n * @return {Promise} It resolves an hash of images.\n */\n loadSprite(baseUrl, options = {}) {\n const opts = { update: false, ...options };\n return loadSprite(baseUrl)\n .then((sprite) => {\n for (const id in sprite) {\n const { data, ...options } = sprite[id];\n if (!this.map.hasImage(id)) {\n this.map.addImage(id, data, options);\n } else if (opts.update) {\n this.map.updateImage(id, data);\n }\n }\n return sprite;\n });\n }\n\n /**\n * Change the heatmap layer visibility\n * @param {boolean} visible True to make it visible, false to hide it\n */\n setHeatmapVisible(visible) {\n if (this.map.getLayer('indoor-heat')) {\n this.map.setLayoutProperty('indoor-heat', 'visibility', visible ? 'visible' : 'none');\n }\n }\n\n _init() {\n this.source.addSource();\n this.source.addLayers();\n this._updateFilters();\n this._updateLevelsDebounce = debounce(this._updateLevels.bind(this), 1000);\n\n this.map.on('load', this._updateLevelsDebounce);\n this.map.on('data', this._updateLevelsDebounce);\n this.map.on('move', this._updateLevelsDebounce);\n this.map.on('remove', () => {\n this.remove();\n });\n }\n\n _updateFilters() {\n this.source.layers\n .filter(layer => layer.type !== 'heatmap')\n .forEach((layer) => {\n this.map.setFilter(layer.id, [ ...layer.filter || ['all'], ['==', 'level', this.level]]);\n });\n }\n\n _refreshAfterLevelsUpdate() {\n if (!this.levels.includes(this.level)) {\n this.setLevel('0');\n }\n }\n\n _updateLevels() {\n if (this.map.isSourceLoaded(this.source.sourceId)) {\n const features = this.map.querySourceFeatures(this.source.sourceId, { sourceLayer: 'area' });\n const levels = findAllLevels(features);\n if (!arrayEqual(levels, this.levels)) {\n this.levels = levels;\n this._emitLevelsChange();\n this._refreshAfterLevelsUpdate();\n }\n }\n }\n\n _emitLevelsChange() {\n this._emitEvent('levelschange', this.levels);\n }\n\n _emitLevelChange() {\n this._emitEvent('levelchange', this.level);\n }\n\n _emitEvent(eventName, ...args) {\n (this.events[eventName] || []).forEach(fn => fn(...args));\n }\n}\n\n/**\n * Emitted when the list of available levels has been updated\n *\n * @event IndoorEqual#levelschange\n * @type {array}\n */\n\n/**\n * Emitted when the current level has been updated\n *\n * @event IndoorEqual#levelchange\n * @type {string} always emitted when the level displayed has changed\n */\n"],"names":[],"mappings":";;;AAAe,SAAS,aAAa,CAAC,QAAQ,EAAE;AAChD,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChC,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO,EAAE;AAC9C,MAAM,SAAS;AACf,KAAK;AACL,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjC,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAChD;;ACbe,MAAM,YAAY,CAAC;AAClC,EAAE,WAAW,CAAC,WAAW,EAAE;AAC3B,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AACnC,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACzD,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACxD;AACA,IAAI,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,6BAA6B,CAAC,CAAC;AACtG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpB,GAAG;AACH;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;AACtB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1D,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACzD,GAAG;AACH;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;AAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC/C,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACtD,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACtD,MAAM,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;AACjC,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC3C,QAAQ,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACvD,OAAO;AACP,MAAM,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAC;AACpF,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACnC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;AChCA,MAAM,SAAS,GAAG;AAClB,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,cAAc,EAAE,KAAK;AACvB,EAAE,QAAQ,EAAE;AACZ,IAAI,YAAY,EAAE;AAClB,MAAM,UAAU;AAChB,MAAM;AACN,QAAQ,OAAO;AACf,QAAQ;AACR,UAAU,QAAQ;AAClB,UAAU;AACV,YAAY,SAAS;AACrB,YAAY,cAAc;AAC1B,WAAW;AACX,UAAU;AACV,YAAY,KAAK;AACjB,YAAY,UAAU;AACtB,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM;AACN,QAAQ,OAAO;AACf,QAAQ;AACR,UAAU,QAAQ;AAClB,UAAU;AACV,YAAY,SAAS;AACrB,YAAY,cAAc;AAC1B,WAAW;AACX,UAAU;AACV,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAI,aAAa,EAAE,KAAK;AACxB,IAAI,YAAY,EAAE;AAClB,MAAM,QAAQ;AACd,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC;AAC3B,MAAM,IAAI;AACV,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC;AAC9B,KAAK;AACL,IAAI,gBAAgB,EAAE,CAAC;AACvB,IAAI,aAAa,EAAE;AACnB,MAAM,CAAC;AACP,MAAM,GAAG;AACT,KAAK;AACL,IAAI,cAAc,EAAE,CAAC;AACrB,IAAI,WAAW,EAAE,EAAE;AACnB,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,YAAY,EAAE,MAAM;AACxB,IAAI,gBAAgB,EAAE,GAAG;AACzB,IAAI,iBAAiB,EAAE,SAAS;AAChC,IAAI,iBAAiB,EAAE,CAAC;AACxB,GAAG;AACH,CAAC,CAAC;AACF;AACA,MAAM,UAAU,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAClH;AACO,MAAM,MAAM,GAAG;AACtB,EAAE;AACF,IAAI,EAAE,EAAE,gBAAgB;AACxB,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,cAAc,EAAE,MAAM;AAC1B,IAAI,MAAM,EAAE;AACZ,MAAM,KAAK;AACX,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,SAAS;AACjB,OAAO;AACP,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,OAAO;AACP,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM,YAAY,EAAE;AACpB,QAAQ,MAAM;AACd;AACA,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7F,QAAQ,SAAS;AACjB;AACA,QAAQ,CAAC,KAAK;AACd,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;AACvF,SAAS;AACT,WAAW,IAAI;AACf,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;AAC9B,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;AACrG,SAAS;AACT,QAAQ,SAAS;AACjB;AACA,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC;AACxC,QAAQ,SAAS;AACjB;AACA,QAAQ,SAAS;AACjB,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,aAAa;AACrB,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,cAAc,EAAE,MAAM;AAC1B,IAAI,QAAQ,EAAE;AACd,MAAM,KAAK;AACX,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,MAAM;AACd,QAAQ,UAAU;AAClB,QAAQ,UAAU;AAClB,OAAO;AACP,KAAK;AACL,IAAI,OAAO,EAAE;AACb,MAAM,YAAY,EAAE,SAAS;AAC7B,MAAM,YAAY,EAAE,CAAC;AACrB,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,eAAe;AACvB,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,cAAc,EAAE,MAAM;AAC1B,IAAI,QAAQ,EAAE;AACd,MAAM,KAAK;AACX,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,QAAQ;AAChB,OAAO;AACP,KAAK;AACL,IAAI,OAAO,EAAE;AACb,MAAM,YAAY,EAAE,SAAS;AAC7B,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,cAAc;AACtB,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,cAAc,EAAE,MAAM;AAC1B,IAAI,QAAQ,EAAE;AACd,MAAM,KAAK;AACX,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,MAAM;AACd,QAAQ,MAAM;AACd,OAAO;AACP,KAAK;AACL,IAAI,OAAO,EAAE;AACb,MAAM,YAAY,EAAE,MAAM;AAC1B,MAAM,YAAY,EAAE,CAAC;AACrB,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,uBAAuB;AAC/B,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,cAAc,EAAE,gBAAgB;AACpC,IAAI,QAAQ,EAAE;AACd,MAAM,KAAK;AACX,KAAK;AACL,IAAI,OAAO,EAAE;AACb,MAAM,YAAY,EAAE,MAAM;AAC1B,MAAM,gBAAgB,EAAE;AACxB,QAAQ,GAAG;AACX,QAAQ,IAAI;AACZ,OAAO;AACP,MAAM,YAAY,EAAE;AACpB,QAAQ,MAAM,EAAE,GAAG;AACnB,QAAQ,OAAO,EAAE;AACjB,UAAU;AACV,YAAY,EAAE;AACd,YAAY,CAAC;AACb,WAAW;AACX,UAAU;AACV,YAAY,EAAE;AACd,YAAY,EAAE;AACd,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,2BAA2B;AACnC,IAAI,MAAM,EAAE,QAAQ;AACpB,IAAI,cAAc,EAAE,gBAAgB;AACpC,IAAI,QAAQ,EAAE;AACd,MAAM,KAAK;AACX,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,QAAQ,YAAY;AACpB,OAAO;AACP,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,QAAQ,UAAU;AAClB,QAAQ,WAAW;AACnB,OAAO;AACP,KAAK;AACL,IAAI,QAAQ,EAAE;AACd,MAAM,YAAY,EAAE;AACpB,QAAQ,MAAM;AACd,QAAQ;AACR,UAAU,KAAK;AACf,UAAU,WAAW;AACrB,SAAS;AACT,QAAQ,uBAAuB;AAC/B,QAAQ;AACR,UAAU,QAAQ;AAClB,UAAU;AACV,YAAY,SAAS;AACrB,YAAY,cAAc;AAC1B,WAAW;AACX,UAAU;AACV,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM,kBAAkB,EAAE,aAAa;AACvC,MAAM,yBAAyB,EAAE,UAAU;AAC3C,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,kBAAkB;AAC1B,IAAI,GAAG,SAAS;AAChB,IAAI,QAAQ,EAAE;AACd,MAAM,KAAK;AACX,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,OAAO;AACP,MAAM;AACN,QAAQ,KAAK;AACb,QAAQ,OAAO;AACf,QAAQ,GAAG,UAAU;AACrB,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,kBAAkB;AAC1B,IAAI,GAAG,SAAS;AAChB,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,QAAQ,EAAE;AACd,MAAM,KAAK;AACX,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,OAAO;AACP,MAAM;AACN,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,GAAG,UAAU;AACrB,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,aAAa;AACrB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,cAAc,EAAE,MAAM;AAC1B,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE;AACvB,IAAI,OAAO,EAAE;AACb,MAAM,eAAe,EAAE,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC;AACtE,QAAQ,CAAC,EAAE,wBAAwB;AACnC,QAAQ,GAAG,EAAE,0BAA0B;AACvC,QAAQ,CAAC,EAAE,0BAA0B;AACrC,OAAO;AACP,MAAM,gBAAgB,EAAE;AACxB,QAAQ,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;AAC3C,QAAQ,CAAC,EAAE,CAAC;AACZ,QAAQ,EAAE,EAAE,EAAE;AACd,QAAQ,EAAE,EAAE,EAAE;AACd,OAAO;AACP,MAAM,mBAAmB,EAAE,CAAC;AAC5B,MAAM,iBAAiB,EAAE;AACzB,QAAQ,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;AAC3C,QAAQ,EAAE,EAAE,CAAC;AACb,QAAQ,IAAI,EAAE,CAAC;AACf,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE;AACF,IAAI,EAAE,EAAE,aAAa;AACrB,IAAI,MAAM,EAAE,QAAQ;AACpB,IAAI,cAAc,EAAE,WAAW;AAC/B,IAAI,QAAQ,EAAE;AACd,MAAM,KAAK;AACX,KAAK;AACL,IAAI,QAAQ,EAAE;AACd,MAAM,YAAY,EAAE;AACpB,QAAQ,QAAQ;AAChB,QAAQ,CAAC,UAAU;AACnB,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;AAC9B,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;AACvB,SAAS;AACT,QAAQ,IAAI;AACZ,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;AAChC,OAAO;AACP,MAAM,gBAAgB,EAAE,CAAC;AACzB,MAAM,WAAW,EAAE,EAAE;AACrB,KAAK;AACL,IAAI,OAAO,EAAE;AACb,MAAM,YAAY,EAAE,MAAM;AAC1B,MAAM,iBAAiB,EAAE,SAAS;AAClC,MAAM,iBAAiB,EAAE,CAAC;AAC1B,KAAK;AACL,GAAG;AACH,CAAC;;ACxTD,SAAS,WAAW,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC7D,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;AACzD,KAAK,MAAM,IAAI,IAAI,YAAY,iBAAiB,EAAE;AAClD,QAAQ,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3C,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,GAAG,MAAM,GAAG,QAAQ,EAAE;AAC1D,QAAQ,MAAM,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAC;AACtD,KAAK;AACL,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1B,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB,IAAI,OAAO,KAAK,CAAC;AACjB,CAAC;AACD;AACA,SAAS,WAAW,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE;AACvD,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AAC1D,QAAQ,OAAO;AACf,KAAK;AACL;AACA,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChE;AACA,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC3D,QAAQ,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;AAC3C,QAAQ,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;AAC9C,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjB;AACA,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1B,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC/B,CAAC;AACD;AACA,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;AACjE,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AACnC,QAAQ,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAC3C,QAAQ,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC/C,QAAQ,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC,CAAC;AAC/E,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AACnC,QAAQ,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAC3C,QAAQ,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC/C,QAAQ,MAAM,IAAI,UAAU,CAAC,qDAAqD,CAAC,CAAC;AACpF,KAAK;AACL;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AAChC,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AAChC;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,QAAQ,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC;AAC9E,QAAQ,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC;AAC9E,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACxD,YAAY,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAC5D,SAAS;AACT,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC;AACD;AACA;AACA;AACO,MAAM,SAAS,CAAC;AACvB,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE;AAC5B,QAAQ,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACzC,KAAK;AACL;AACA,IAAI,MAAM,CAAC,IAAI,EAAE;AACjB,QAAQ,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACnC,KAAK;AACL;AACA,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE;AACxB,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,SAAS,MAAM,IAAI,IAAI,YAAY,iBAAiB,EAAE;AACtD,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpD,SAAS,MAAM;AACf,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,SAAS;AACT,KAAK;AACL;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,OAAO,IAAI,SAAS,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClG,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;AACpD,QAAQ,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzD,KAAK;AACL;;ACzFA,SAAS,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE;AACpC,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACzD,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAC1D,GAAG;AACH,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AAC3B,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC7B,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACtD,EAAE,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AACD;AACe,mBAAQ,CAAC,OAAO,EAAE;AACjC,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AAC1D,EAAE,IAAI,IAAI,EAAE,KAAK,CAAC;AAClB;AACA,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACvD,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5B,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,EAAC;AAC5B;AACA,EAAE,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACvD,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5B,SAAS,IAAI,CAAC,CAAC,IAAI;AACnB,UAAU,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC9B,UAAU,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC7C,UAAU,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAClD,YAAY,KAAK,CAAC,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;AAC3C,YAAY,KAAK,CAAC,OAAO,GAAG,MAAM,MAAM,EAAE,CAAC;AAC3C,WAAW,CAAC,CAAC;AACb,SAAS,CAAC,CAAC;AACX;AACA,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACjD,KAAK,IAAI,CAAC,MAAM;AAChB,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5C,MAAM,MAAM,MAAM,GAAG,EAAE,CAAC;AACxB;AACA,MAAM,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;AAC7B,QAAQ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7F,QAAQ,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACpD,QAAQ,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/E,QAAQ,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC1E,OAAO;AACP,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK,CAAC,CAAC;AACP;;ACvCA,MAAM,aAAa,CAAC;AACpB,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE;AACjC,IAAI,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAChD,IAAI,MAAM,IAAI,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;AAChD,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACnB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAChC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B,IAAI,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC;AACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAChD,GAAG;AACH;AACA,EAAE,SAAS,GAAG;AACd,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK;AACrD,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE;AAC9D,QAAQ,IAAI,EAAE,SAAS;AACvB,QAAQ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACrC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,SAAS,GAAG;AACd,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnD,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC/B,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK;AAC3C,MAAM,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AAC1D,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACnC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAQ,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AAC/D,QAAQ,GAAG,KAAK;AAChB,QAAQ,cAAc,EAAE,EAAE;AAC1B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,MAAM,GAAG;AACX,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACnC,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK;AACrD,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACjE,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD;AACA,MAAM,gBAAgB,CAAC;AACvB,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE;AACjC,IAAI,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC;AAC1E,IAAI,MAAM,IAAI,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;AAChD,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtD,MAAM,MAAM,6FAA6F,CAAC;AAC1G,KAAK;AACL,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACnB,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACxB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B,IAAI,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;AAClC,GAAG;AACH;AACA,EAAE,SAAS,GAAG;AACd,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;AACjE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtC,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;AACtC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACnC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAQ,MAAM,EAAE,IAAI,CAAC,QAAQ;AAC7B,QAAQ,GAAG,KAAK;AAChB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,MAAM,GAAG;AACX,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACnC,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,WAAW,CAAC;AACjC,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE;AACjC,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAC3E,IAAI,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1C,IAAI,MAAM,IAAI,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;AAChD,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACnB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACrB,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACrB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACrB;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE;AAClC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACnB,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;AAClC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;AACrB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG;AACX,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACrD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACrD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACrD,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtB,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE;AACf,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE;AAChB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;AAC3C,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC5B,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,EAAE;AAClB,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;AACtF,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AACpC,IAAI,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;AAC/C,IAAI,OAAO,UAAU,CAAC,OAAO,CAAC;AAC9B,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK;AACxB,QAAQ,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;AACjC,UAAU,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAClD,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACtC,YAAY,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD,WAAW,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;AAClC,YAAY,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3C,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO,CAAC,CAAC;AACT,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,OAAO,EAAE;AAC7B,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC1C,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;AAC5F,KAAK;AACL,GAAG;AACH;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;AAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;AAC5B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1B,IAAI,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/E;AACA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM;AAChC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;AACtB,KAAK,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AAC9C,KAAK,OAAO,CAAC,CAAC,KAAK,KAAK;AACxB,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/F,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,yBAAyB,GAAG;AAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzB,KAAK;AACL,GAAG;AACH;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AACvD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;AACnG,MAAM,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AAC5C,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC,QAAQ,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACzC,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACjD,GAAG;AACH;AACA,EAAE,gBAAgB,GAAG;AACrB,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,GAAG;AACH;AACA,EAAE,UAAU,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE;AACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;"} \ No newline at end of file diff --git a/dist/maplibre-gl-indoorequal.umd.min.js b/dist/maplibre-gl-indoorequal.umd.min.js index 7929198..b110531 100644 --- a/dist/maplibre-gl-indoorequal.umd.min.js +++ b/dist/maplibre-gl-indoorequal.umd.min.js @@ -1 +1,2 @@ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).IndoorEqual=t()}(this,(function(){"use strict";function e(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function t(t){for(var i=1;i=0)continue;i[r]=e[r]}return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}function l(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return c(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,r=new Array(t);i=0)a=setTimeout(c,t-i);else if(a=void 0,!r){const t=n,i=o;n=void 0,o=void 0,l=e.apply(t,i)}}const u=function(...i){if(n&&this!==n)throw new Error("Debounced method called with different contexts.");n=this,o=i,s=Date.now();const u=r&&!a;if(a||(a=setTimeout(c,t)),u){const t=n,i=o;n=void 0,o=void 0,l=e.apply(t,i)}return l};return u.clear=()=>{a&&(clearTimeout(a),a=void 0)},u.flush=()=>{if(!a)return;const t=n,i=o;n=void 0,o=void 0,l=e.apply(t,i),clearTimeout(a),a=void 0},u}h.exports.debounce=f,h.exports=f;var d=u(h.exports),p=u((function(e,t){var i=e.length;if(e===t)return!0;if(i!==t.length)return!1;for(var r=0;re.width||n.height>e.height||i.x>e.width-n.width||i.y>e.height-n.height)throw new RangeError("out of range source coordinates for image copy");if(n.width>t.width||n.height>t.height||r.x>t.width-n.width||r.y>t.height-n.height)throw new RangeError("out of range destination coordinates for image copy");for(var a=e.data,s=t.data,l=0;l1?"@2x":"",n=fetch("".concat(e).concat(r,".json")).then((function(e){return e.json()})).then((function(e){return t=e})),o=fetch("".concat(e).concat(r,".png")).then((function(e){return e.blob()})).then((function(e){return(i=new Image).src=URL.createObjectURL(e),new Promise((function(e,t){i.onload=function(){return e()},i.onerror=function(){return t()}}))}));return Promise.all([n,o]).then((function(){var e=function(e,t){var i=window.document.createElement("canvas"),r=i.getContext("2d");if(!r)throw new Error("failed to create canvas 2d context");return i.width=e.width,i.height=e.height,r.drawImage(e,0,0,e.width,e.height),r.getImageData(0,0,e.width,e.height)}(i),r={};for(var n in t){var o=t[n],a=o.width,s=o.height,l=o.x,c=o.y,u=o.sdf,h=o.pixelRatio,f=o.stretchX,d=o.stretchY,p=o.content,v=new _({width:a,height:s});_.copy(e,v,{x:l,y:c},{x:0,y:0},{width:a,height:s}),r[n]={data:v,pixelRatio:h,sdf:u,stretchX:f,stretchY:d,content:p}}return r}))}var L=["data"],j=function(){return o((function e(i){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,e);var o=t(t({},{layers:g,geojson:{}}),n);this.map=i,this.geojson=o.geojson,this.layers=o.layers,this.baseSourceId="indoorequal",this.sourceId="".concat(this.baseSourceId,"_area")}),[{key:"addSource",value:function(){var e=this;Object.keys(this.geojson).forEach((function(t){e.map.addSource("".concat(e.baseSourceId,"_").concat(t),{type:"geojson",data:e.geojson[t]})}))}},{key:"addLayers",value:function(){var e=this,i=Object.keys(this.geojson),r=this.layers;this.layers=r.filter((function(e){return i.includes(e["source-layer"])})),this.layers.forEach((function(i){e.map.addLayer(t(t({source:"".concat(e.baseSourceId,"_").concat(i["source-layer"])},i),{},{"source-layer":""}))}))}},{key:"remove",value:function(){var e=this;this.layers.forEach((function(t){e.map.removeLayer(t.id)})),Object.keys(this.geojson).forEach((function(t){e.map.removeSource("".concat(e.baseSourceId,"_").concat(t))}))}}])}(),k=function(){return o((function e(i){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,e);var o={url:"https://tiles.indoorequal.org/",layers:g},a=t(t({},o),n);if(a.url===o.url&&!a.apiKey)throw"You must register your apiKey at https://indoorequal.com before and set it as apiKey param.";this.map=i,this.url=a.url,this.apiKey=a.apiKey,this.layers=a.layers,this.sourceId="indoorequal"}),[{key:"addSource",value:function(){var e=this.apiKey?"?key=".concat(this.apiKey):"";this.map.addSource(this.sourceId,{type:"vector",url:"".concat(this.url).concat(e)})}},{key:"addLayers",value:function(){var e=this;this.layers.forEach((function(i){e.map.addLayer(t({source:e.sourceId},i))}))}},{key:"remove",value:function(){var e=this;this.layers.forEach((function(t){e.map.removeLayer(t.id)})),this.map.removeSource(this.sourceId)}}])}(),O=function(){return o((function e(i){var n=this,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,e);var a=o.geojson?j:k,s=t(t({},{heatmap:!0}),o);this.source=new a(i,o),this.map=i,this.levels=[],this.level="0",this.events={},this.map.isStyleLoaded()?(this._init(),this.setHeatmapVisible(s.heatmap)):this.map.once("load",(function(){n._init(),n.setHeatmapVisible(s.heatmap)}))}),[{key:"remove",value:function(){this.source.remove(),this._updateLevelsDebounce.clear(),this.map.off("load",this._updateLevelsDebounce),this.map.off("data",this._updateLevelsDebounce),this.map.off("move",this._updateLevelsDebounce),this._control&&this.onRemove()}},{key:"on",value:function(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t)}},{key:"off",value:function(e,t){this.events[e]||(this.events[e]=[]),this.events[e]=this.events[e].filter((function(e){return e!==t}))}},{key:"onAdd",value:function(){return this._control=new v(this),this._control.$el}},{key:"onRemove",value:function(){this._control.destroy(),this._control=null}},{key:"setLevel",value:function(e){this.level=e,this._updateFilters(),this._emitLevelChange()}},{key:"updateLevel",value:function(e){console.log("The updateLevel method is deprecated. Please use setLevel instead."),this.setLevel(e)}},{key:"loadSprite",value:function(e){var i=this,r=t({update:!1},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});return x(e).then((function(e){for(var t in e){var n=e[t],o=n.data,a=s(n,L);i.map.hasImage(t)?r.update&&i.map.updateImage(t,o):i.map.addImage(t,o,a)}return e}))}},{key:"setHeatmapVisible",value:function(e){this.map.getLayer("indoor-heat")&&this.map.setLayoutProperty("indoor-heat","visibility",e?"visible":"none")}},{key:"_init",value:function(){var e=this;this.source.addSource(),this.source.addLayers(),this._updateFilters(),this._updateLevelsDebounce=d(this._updateLevels.bind(this),1e3),this.map.on("load",this._updateLevelsDebounce),this.map.on("data",this._updateLevelsDebounce),this.map.on("move",this._updateLevelsDebounce),this.map.on("remove",(function(){e.remove()}))}},{key:"_updateFilters",value:function(){var e=this;this.source.layers.filter((function(e){return"heatmap"!==e.type})).forEach((function(t){e.map.setFilter(t.id,[].concat(l(t.filter||["all"]),[["==","level",e.level]]))}))}},{key:"_refreshAfterLevelsUpdate",value:function(){this.levels.includes(this.level)||this.setLevel("0")}},{key:"_updateLevels",value:function(){if(this.map.isSourceLoaded(this.source.sourceId)){var e=function(e){for(var t=[],i=0;i1?t-1:0),r=1;r= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tconst callContext = storedContext;\n\t\t\t\tconst callArguments = storedArguments;\n\t\t\t\tstoredContext = undefined;\n\t\t\t\tstoredArguments = undefined;\n\t\t\t\tresult = function_.apply(callContext, callArguments);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (storedContext && this !== storedContext) {\n\t\t\tthrow new Error('Debounced method called with different contexts.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tconst callContext = storedContext;\n\t\t\tconst callArguments = storedArguments;\n\t\t\tstoredContext = undefined;\n\t\t\tstoredArguments = undefined;\n\t\t\tresult = function_.apply(callContext, callArguments);\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\treturn debounced;\n}\n\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\n","/**\n * Compare arrays\n *\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Boolean} - Arrays are equals\n */\nmodule.exports = function equal(arr1, arr2) {\n var length = arr1.length\n if (arr1 === arr2) return true\n if (length !== arr2.length) return false\n for (var i = 0; i < length; i++)\n if (arr1[i] !== arr2[i])\n return false\n return true\n}\n","export default class LevelControl {\n constructor(indoorequal) {\n this.indoorequal = indoorequal;\n this._cbRefresh = () => this._refresh();\n this.indoorequal.on('levelschange', this._cbRefresh);\n this.indoorequal.on('levelchange', this._cbRefresh);\n\n this.$el = document.createElement('div');\n this.$el.classList.add('maplibregl-ctrl', 'maplibregl-ctrl-group', 'maplibregl-ctrl-indoorequal');\n this._refresh();\n }\n\n destroy() {\n this.$el.remove();\n this.indoorequal.off('levelschange', this._cbRefresh);\n this.indoorequal.off('levelchange', this._cbRefresh);\n }\n\n _refresh() {\n this.$el.innerHTML = '';\n this.indoorequal.levels.forEach((level) => {\n const button = document.createElement('button');\n const strong = document.createElement('strong');\n strong.textContent = level;\n button.appendChild(strong);\n if (level == this.indoorequal.level) {\n button.classList.add('maplibregl-ctrl-active');\n }\n button.addEventListener('click', () => { this.indoorequal.setLevel(level); })\n this.$el.appendChild(button);\n });\n }\n}\n","const commonPoi = {\n \"type\": \"symbol\",\n \"source-layer\": \"poi\",\n \"layout\": {\n \"icon-image\": [\n \"coalesce\",\n [\n \"image\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"subclass\"\n ]\n ],\n ],\n [\n \"image\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"class\"\n ]\n ]\n ]\n ],\n \"text-anchor\": \"top\",\n \"text-field\": [\n \"concat\",\n [\"get\", \"name:latin\"],\n \"\\n\",\n [\"get\", \"name:nonlatin\"],\n ],\n \"text-max-width\": 9,\n \"text-offset\": [\n 0,\n 0.6\n ],\n \"text-padding\": 2,\n \"text-size\": 12\n },\n \"paint\": {\n \"text-color\": \"#666\",\n \"text-halo-blur\": 0.5,\n \"text-halo-color\": \"#ffffff\",\n \"text-halo-width\": 1\n }\n};\n\nconst rank2Class = [\"waste_basket\", \"information\", \"vending_machine\", \"bench\", \"photo_booth\", \"ticket_validator\"];\n\nexport const layers = [\n {\n id: \"indoor-polygon\",\n type: \"fill\",\n \"source-layer\": \"area\",\n filter: [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Polygon\"\n ],\n [\n \"!=\",\n \"class\",\n \"level\"\n ]\n ],\n paint: {\n \"fill-color\": [\n \"case\",\n // if private\n [\"all\", [\"has\", \"access\"], [\"in\", [\"get\", \"access\"], [\"literal\", [\"no\", \"private\"]]]],\n \"#F2F1F0\",\n // if POI\n [\"any\",\n [\"all\", [\"==\", [\"get\", \"is_poi\"], true], [\"!=\", [\"get\", \"class\"], \"corridor\"]],\n [\n \"in\",\n [\"get\", \"subclass\"],\n [\"literal\", [\"class\", \"laboratory\", \"office\", \"auditorium\", \"amphitheatre\", \"reception\"]]]\n ],\n \"#D4EDFF\",\n // if is a room\n [\"==\", [\"get\", \"class\"], \"room\"],\n \"#fefee2\",\n // default\n \"#fdfcfa\"\n ]\n }\n },\n {\n id: \"indoor-area\",\n \"type\": \"line\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"class\",\n \"area\",\n \"corridor\",\n \"platform\"\n ]\n ],\n \"paint\": {\n \"line-color\": \"#bfbfbf\",\n \"line-width\": 1\n }\n },\n {\n id: \"indoor-column\",\n \"type\": \"fill\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"class\",\n \"column\"\n ]\n ],\n \"paint\": {\n \"fill-color\": \"#bfbfbf\"\n }\n },\n {\n id: \"indoor-lines\",\n \"type\": \"line\",\n \"source-layer\": \"area\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"class\",\n \"room\",\n \"wall\"\n ]\n ],\n \"paint\": {\n \"line-color\": \"gray\",\n \"line-width\": 2\n }\n },\n {\n id: \"indoor-transportation\",\n \"type\": \"line\",\n \"source-layer\": \"transportation\",\n \"filter\": [\n \"all\"\n ],\n \"paint\": {\n \"line-color\": \"gray\",\n \"line-dasharray\": [\n 0.4,\n 0.75\n ],\n \"line-width\": {\n \"base\": 1.4,\n \"stops\": [\n [\n 17,\n 2\n ],\n [\n 20,\n 10\n ]\n ]\n }\n }\n },\n {\n id: \"indoor-transportation-poi\",\n \"type\": \"symbol\",\n \"source-layer\": \"transportation\",\n \"filter\": [\n \"all\",\n [\n \"in\",\n \"$type\",\n \"Point\",\n \"LineString\"\n ],\n [\n \"in\",\n \"class\",\n \"steps\",\n \"elevator\",\n \"escalator\"\n ]\n ],\n \"layout\": {\n \"icon-image\": [\n \"case\",\n [\n \"has\",\n \"conveying\"\n ],\n \"indoorequal-escalator\",\n [\n \"concat\",\n [\n \"literal\",\n \"indoorequal-\"\n ],\n [\n \"get\",\n \"class\"\n ]\n ]\n ],\n \"symbol-placement\": \"line-center\",\n \"icon-rotation-alignment\": \"viewport\"\n }\n },\n {\n id: \"indoor-poi-rank1\",\n ...commonPoi,\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Point\"\n ],\n [\n \"!in\",\n \"class\",\n ...rank2Class\n ]\n ]\n },\n {\n id: \"indoor-poi-rank2\",\n ...commonPoi,\n minzoom: 19,\n \"filter\": [\n \"all\",\n [\n \"==\",\n \"$type\",\n \"Point\"\n ],\n [\n \"in\",\n \"class\",\n ...rank2Class\n ]\n ]\n },\n {\n id: \"indoor-heat\",\n \"type\": \"heatmap\",\n \"source-layer\": \"heat\",\n \"filter\": [ \"all\" ],\n \"paint\": {\n \"heatmap-color\": [\"interpolate\", [\"linear\"], [\"heatmap-density\"],\n 0, \"rgba(102, 103, 173, 0)\",\n 0.1, \"rgba(102, 103, 173, 0.2)\",\n 1, \"rgba(102, 103, 173, 0.7)\"\n ],\n \"heatmap-radius\": [\n \"interpolate\", [\"linear\"], [\"zoom\"],\n 0, 3,\n 13, 20,\n 17, 40\n ],\n \"heatmap-intensity\": 1,\n \"heatmap-opacity\": [\n \"interpolate\", [\"linear\"], [\"zoom\"],\n 16, 1,\n 17.1, 0\n ]\n }\n },\n {\n id: \"indoor-name\",\n \"type\": \"symbol\",\n \"source-layer\": \"area_name\",\n \"filter\": [\n \"all\"\n ],\n \"layout\": {\n \"text-field\": [\n \"concat\",\n [\"coalesce\",\n [\"get\", \"name:latin\"],\n [\"get\", \"ref\"],\n ],\n \"\\n\",\n [\"get\", \"name:nonlatin\"],\n ],\n \"text-max-width\": 5,\n \"text-size\": 14\n },\n \"paint\": {\n \"text-color\": \"#666\",\n \"text-halo-color\": \"#ffffff\",\n \"text-halo-width\": 1\n }\n }\n];\n","function createImage(image, {width, height}, channels, data) {\n if (!data) {\n data = new Uint8Array(width * height * channels);\n } else if (data instanceof Uint8ClampedArray) {\n data = new Uint8Array(data.buffer);\n } else if (data.length !== width * height * channels) {\n throw new RangeError('mismatched image size');\n }\n image.width = width;\n image.height = height;\n image.data = data;\n return image;\n}\n\nfunction resizeImage(image, {width, height}, channels) {\n if (width === image.width && height === image.height) {\n return;\n }\n\n const newImage = createImage({}, {width, height}, channels);\n\n copyImage(image, newImage, {x: 0, y: 0}, {x: 0, y: 0}, {\n width: Math.min(image.width, width),\n height: Math.min(image.height, height)\n }, channels);\n\n image.width = width;\n image.height = height;\n image.data = newImage.data;\n}\n\nfunction copyImage(srcImg, dstImg, srcPt, dstPt, size, channels) {\n if (size.width === 0 || size.height === 0) {\n return dstImg;\n }\n\n if (size.width > srcImg.width ||\n size.height > srcImg.height ||\n srcPt.x > srcImg.width - size.width ||\n srcPt.y > srcImg.height - size.height) {\n throw new RangeError('out of range source coordinates for image copy');\n }\n\n if (size.width > dstImg.width ||\n size.height > dstImg.height ||\n dstPt.x > dstImg.width - size.width ||\n dstPt.y > dstImg.height - size.height) {\n throw new RangeError('out of range destination coordinates for image copy');\n }\n\n const srcData = srcImg.data;\n const dstData = dstImg.data;\n\n for (let y = 0; y < size.height; y++) {\n const srcOffset = ((srcPt.y + y) * srcImg.width + srcPt.x) * channels;\n const dstOffset = ((dstPt.y + y) * dstImg.width + dstPt.x) * channels;\n for (let i = 0; i < size.width * channels; i++) {\n dstData[dstOffset + i] = srcData[srcOffset + i];\n }\n }\n return dstImg;\n}\n\n// Not premultiplied, because ImageData is not premultiplied.\n// UNPACK_PREMULTIPLY_ALPHA_WEBGL must be used when uploading to a texture.\nexport class RGBAImage {\n constructor(size, data) {\n createImage(this, size, 4, data);\n }\n\n resize(size) {\n resizeImage(this, size, 4);\n }\n\n replace(data, copy) {\n if (copy) {\n this.data.set(data);\n } else if (data instanceof Uint8ClampedArray) {\n this.data = new Uint8Array(data.buffer);\n } else {\n this.data = data;\n }\n }\n\n clone() {\n return new RGBAImage({width: this.width, height: this.height}, new Uint8Array(this.data));\n }\n\n static copy(srcImg, dstImg, srcPt, dstPt, size) {\n copyImage(srcImg, dstImg, srcPt, dstPt, size, 4);\n }\n}\n","import {RGBAImage} from './image';\n\nfunction getImageData(img, padding) {\n const canvas = window.document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n throw new Error('failed to create canvas 2d context');\n }\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0, img.width, img.height);\n return context.getImageData(0, 0, img.width, img.height);\n}\n\nexport default function(baseUrl) {\n const format = window.devicePixelRatio > 1 ? '@2x' : '';\n let json, image;\n\n const jsonRequest = fetch(`${baseUrl}${format}.json`)\n .then(r => r.json())\n .then(r => json = r)\n\n const imageRequest = fetch(`${baseUrl}${format}.png`)\n .then(r => r.blob())\n .then(r => {\n image = new Image();\n image.src = URL.createObjectURL(r);\n return new Promise((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = () => reject();\n });\n });\n\n return Promise.all([jsonRequest, imageRequest])\n .then(() => {\n const imageData = getImageData(image);\n const result = {};\n\n for (const id in json) {\n const {width, height, x, y, sdf, pixelRatio, stretchX, stretchY, content} = json[id];\n const data = new RGBAImage({width, height});\n RGBAImage.copy(imageData, data, {x, y}, {x: 0, y: 0}, {width, height});\n result[id] = {data, pixelRatio, sdf, stretchX, stretchY, content};\n }\n return result;\n });\n}\n","import debounce from 'debounce';\nimport arrayEqual from 'array-equal';\nimport findAllLevels from './levels';\nimport LevelControl from './level_control';\nimport { layers } from './layers';\nimport loadSprite from './sprite';\n\nclass GeoJSONSource {\n constructor(map, options = {}) {\n const defaultOpts = { layers, geojson: {} };\n const opts = { ...defaultOpts, ...options };\n this.map = map;\n this.geojson = opts.geojson;\n this.layers = opts.layers;\n this.baseSourceId = 'indoorequal';\n this.sourceId = `${this.baseSourceId}_area`;\n }\n\n addSource() {\n Object.keys(this.geojson).forEach((layerName) => {\n this.map.addSource(`${this.baseSourceId}_${layerName}`, {\n type: 'geojson',\n data: this.geojson[layerName]\n });\n });\n }\n\n addLayers() {\n const sourceLayers = Object.keys(this.geojson);\n const layers = this.layers;\n this.layers = layers.filter((layer) => {\n return sourceLayers.includes(layer['source-layer']);\n });\n this.layers.forEach((layer) => {\n this.map.addLayer({\n source: `${this.baseSourceId}_${layer['source-layer']}`,\n ...layer,\n 'source-layer': ''\n });\n });\n }\n\n remove() {\n this.layers.forEach((layer) => {\n this.map.removeLayer(layer.id);\n });\n Object.keys(this.geojson).forEach((layerName) => {\n this.map.removeSource(`${this.baseSourceId}_${layerName}`);\n });\n }\n}\n\nclass VectorTileSource {\n constructor(map, options = {}) {\n const defaultOpts = { url: 'https://tiles.indoorequal.org/', layers };\n const opts = { ...defaultOpts, ...options };\n if (opts.url === defaultOpts.url && !opts.apiKey) {\n throw 'You must register your apiKey at https://indoorequal.com before and set it as apiKey param.';\n }\n this.map = map;\n this.url = opts.url;\n this.apiKey = opts.apiKey;\n this.layers = opts.layers;\n this.sourceId = 'indoorequal';\n }\n\n addSource() {\n const queryParams = this.apiKey ? `?key=${this.apiKey}` : '';\n this.map.addSource(this.sourceId, {\n type: 'vector',\n url: `${this.url}${queryParams}`\n });\n }\n\n addLayers() {\n this.layers.forEach((layer) => {\n this.map.addLayer({\n source: this.sourceId,\n ...layer\n });\n });\n }\n\n remove() {\n this.layers.forEach((layer) => {\n this.map.removeLayer(layer.id);\n });\n this.map.removeSource(this.sourceId);\n }\n}\n\n/**\n * Load the indoor= source and layers in your map.\n * @param {object} map the maplibre-gl instance of the map\n * @param {object} options\n * @param {string} [options.url] Override the default tiles URL (https://tiles.indoorequal.org/).\n * @param {object} [options.geojson] GeoJSON data with with key as layer name and value with geojson features\n * @param {string} [options.apiKey] The API key if you use the default tile URL (get your free key at [indoorequal.com](https://indoorequal.com)).\n * @param {array} [options.layers] The layers to be used to style indoor= tiles. Take a look a the [layers.js file](https://github.com/indoorequal/maplibre-gl-indoorequal/blob/master/src/layers.js) file and the [vector schema](https://indoorequal.com/schema)\n * @param {boolean} [options.heatmap] Should the heatmap layer be visible at start (true : visible, false : hidden). Defaults to true/visible.\n * @property {string} level The current level displayed\n * @property {array} levels The levels that can be displayed in the current view\n * @fires IndoorEqual#levelschange\n * @fires IndoorEqual#levelchange\n * @return {IndoorEqual} `this`\n */\nexport default class IndoorEqual {\n constructor(map, options = {}) {\n const SourceKlass = options.geojson ? GeoJSONSource : VectorTileSource;\n const defaultOpts = { heatmap: true };\n const opts = { ...defaultOpts, ...options };\n this.source = new SourceKlass(map, options);\n this.map = map;\n this.levels = [];\n this.level = '0';\n this.events = {};\n\n if (this.map.isStyleLoaded()) {\n this._init();\n this.setHeatmapVisible(opts.heatmap);\n } else {\n this.map.once('load', () => {\n this._init();\n this.setHeatmapVisible(opts.heatmap);\n });\n }\n }\n\n /**\n * Remove any layers, source and listeners and controls\n */\n remove() {\n this.source.remove();\n this._updateLevelsDebounce.clear();\n this.map.off('load', this._updateLevelsDebounce);\n this.map.off('data', this._updateLevelsDebounce);\n this.map.off('move', this._updateLevelsDebounce);\n if (this._control) {\n this.onRemove();\n }\n }\n\n /**\n * Add an event listener\n * @param {string} name the name of the event\n * @param {function} fn the function to be called when the event is emitted\n */\n on(name, fn) {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(fn);\n }\n\n /**\n * Remove an event listener.\n * @param {string} name the name of the event\n * @param {function} fn the same function when on() was called\n */\n off(name, fn) {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name] = this.events[name].filter(cb => cb !== fn);\n }\n\n /**\n * Add the level control to the map\n * Used when adding the control via the map instance: map.addControl(indoorEqual)\n */\n onAdd() {\n this._control = new LevelControl(this);\n return this._control.$el;\n }\n\n /**\n * Remove the level control\n * Used when removing the control via the map instance: map.removeControl(indoorEqual)\n */\n onRemove() {\n this._control.destroy();\n this._control = null;\n }\n\n /**\n * Set the displayed level.\n * @param {string} level the level to be displayed\n * @fires IndoorEqual#levelchange\n */\n setLevel(level) {\n this.level = level;\n this._updateFilters();\n this._emitLevelChange();\n }\n\n /**\n * Set the displayed level.\n * @deprecated Use setLevel instead\n * @param {string} level the level to be displayed\n * @fires IndoorEqual#levelchange\n */\n updateLevel(level) {\n console.log('The updateLevel method is deprecated. Please use setLevel instead.');\n this.setLevel(level);\n }\n\n /**\n * Load a sprite and add all images to the map\n * @param {string} baseUrl the baseUrl where to load the sprite\n * @param {object} options\n * @param {boolean} [options.update] Update existing image (default false)\n * @return {Promise} It resolves an hash of images.\n */\n loadSprite(baseUrl, options = {}) {\n const opts = { update: false, ...options };\n return loadSprite(baseUrl)\n .then((sprite) => {\n for (const id in sprite) {\n const { data, ...options } = sprite[id];\n if (!this.map.hasImage(id)) {\n this.map.addImage(id, data, options);\n } else if (opts.update) {\n this.map.updateImage(id, data);\n }\n }\n return sprite;\n });\n }\n\n /**\n * Change the heatmap layer visibility\n * @param {boolean} visible True to make it visible, false to hide it\n */\n setHeatmapVisible(visible) {\n if (this.map.getLayer('indoor-heat')) {\n this.map.setLayoutProperty('indoor-heat', 'visibility', visible ? 'visible' : 'none');\n }\n }\n\n _init() {\n this.source.addSource();\n this.source.addLayers();\n this._updateFilters();\n this._updateLevelsDebounce = debounce(this._updateLevels.bind(this), 1000);\n\n this.map.on('load', this._updateLevelsDebounce);\n this.map.on('data', this._updateLevelsDebounce);\n this.map.on('move', this._updateLevelsDebounce);\n this.map.on('remove', () => {\n this.remove();\n });\n }\n\n _updateFilters() {\n this.source.layers\n .filter(layer => layer.type !== 'heatmap')\n .forEach((layer) => {\n this.map.setFilter(layer.id, [ ...layer.filter || ['all'], ['==', 'level', this.level]]);\n });\n }\n\n _refreshAfterLevelsUpdate() {\n if (!this.levels.includes(this.level)) {\n this.setLevel('0');\n }\n }\n\n _updateLevels() {\n if (this.map.isSourceLoaded(this.source.sourceId)) {\n const features = this.map.querySourceFeatures(this.source.sourceId, { sourceLayer: 'area' });\n const levels = findAllLevels(features);\n if (!arrayEqual(levels, this.levels)) {\n this.levels = levels;\n this._emitLevelsChange();\n this._refreshAfterLevelsUpdate();\n }\n }\n }\n\n _emitLevelsChange() {\n this._emitEvent('levelschange', this.levels);\n }\n\n _emitLevelChange() {\n this._emitEvent('levelchange', this.level);\n }\n\n _emitEvent(eventName, ...args) {\n (this.events[eventName] || []).forEach(fn => fn(...args));\n }\n}\n\n/**\n * Emitted when the list of available levels has been updated\n *\n * @event IndoorEqual#levelschange\n * @type {array}\n */\n\n/**\n * Emitted when the current level has been updated\n *\n * @event IndoorEqual#levelchange\n * @type {string} always emitted when the level displayed has changed\n */\n","export default function findAllLevels(features) {\n const levels = [];\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n if (feature.properties.class === 'level') {\n continue;\n }\n const level = feature.properties.level;\n if (!levels.includes(level)) {\n levels.push(level);\n }\n }\n return levels.sort((a, b) => a - b).reverse();\n}\n"],"names":["debounce","function_","wait","options","TypeError","RangeError","immediate","storedContext","storedArguments","timeoutId","timestamp","result","later","last","Date","now","setTimeout","undefined","callContext","callArguments","apply","debounced","arguments_","this","Error","callNow","clear","clearTimeout","flush","debounceModule","exports","arr1","arr2","length","i","LevelControl","_createClass","indoorequal","_this","_classCallCheck","_cbRefresh","_refresh","on","$el","document","createElement","classList","add","key","value","remove","off","_this2","innerHTML","levels","forEach","level","button","strong","textContent","appendChild","addEventListener","setLevel","commonPoi","type","layout","paint","rank2Class","layers","id","filter","base","stops","_objectSpread","concat","minzoom","createImage","image","_ref","channels","data","width","height","Uint8ClampedArray","Uint8Array","buffer","copyImage","srcImg","dstImg","srcPt","dstPt","size","x","y","srcData","dstData","srcOffset","dstOffset","RGBAImage","_ref2","newImage","Math","min","resizeImage","copy","set","_loadSprite","baseUrl","json","format","window","devicePixelRatio","jsonRequest","fetch","then","r","imageRequest","blob","Image","src","URL","createObjectURL","Promise","resolve","reject","onload","onerror","all","imageData","img","padding","canvas","context","getContext","drawImage","getImageData","_json$id","sdf","pixelRatio","stretchX","stretchY","content","GeoJSONSource","map","arguments","opts","defaultOpts","geojson","baseSourceId","sourceId","Object","keys","layerName","addSource","sourceLayers","layer","includes","addLayer","source","_this3","removeLayer","removeSource","VectorTileSource","url","apiKey","queryParams","_this4","_this5","IndoorEqual","_this6","SourceKlass","heatmap","events","isStyleLoaded","_init","setHeatmapVisible","once","_updateLevelsDebounce","_control","onRemove","name","fn","push","cb","destroy","_updateFilters","_emitLevelChange","console","log","_this7","update","loadSprite","sprite","_sprite$id","_objectWithoutProperties","_excluded","hasImage","updateImage","addImage","visible","getLayer","setLayoutProperty","_this8","addLayers","_updateLevels","bind","_this9","setFilter","_toConsumableArray","isSourceLoaded","features","feature","properties","sort","a","b","reverse","findAllLevels","querySourceFeatures","sourceLayer","arrayEqual","_emitLevelsChange","_refreshAfterLevelsUpdate","_emitEvent","eventName","_len","args","Array","_key"],"mappings":"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","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/package.json b/package.json index ea49c7b..0cde6f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "maplibre-gl-indoorequal", - "version": "1.0.0", + "version": "1.1.0", "description": "Integrate indoor= into your maplibre-gl.js map.", "keywords": [ "maplibre",