{"mappings":"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","names":["require_fast_deep_equal","__commonJSMin","exports","module","equal","a","b","length","i","keys","key","ARRAY_TYPES","VERSION","HEADER_SIZE","KDBush","_KDBush","data","magic","versionAndType","version","ArrayType","nodeSize","numItems","arrayTypeIndex","coordsByteSize","idsByteSize","padCoords","x","y","index","numAdded","sort","minX","minY","maxX","maxY","ids","coords","stack","result","axis","right","left","i","m","qx","qy","r","r2","sqDist","select","k","n","z","s","sd","newLeft","newRight","t","j","swapItem","swap","arr","tmp","ax","ay","bx","by","dx","dy","defaultOptions","props","fround","tmp","x","OFFSET_ZOOM","OFFSET_ID","OFFSET_PARENT","OFFSET_NUM","OFFSET_PROP","Supercluster","options","points","log","minZoom","maxZoom","timerId","data","p","lng","lat","lngX","y","latY","tree","z","now","bbox","zoom","minLng","minLat","maxLng","maxLat","easternHem","westernHem","ids","clusters","id","k","getClusterJSON","clusterId","originId","originZoom","errorMsg","r","children","limit","offset","leaves","z2","extent","radius","top","bottom","tile","expansionZoom","result","skipped","child","KDBush","i","isCluster","tags","px","py","getClusterProperties","f","reduce","minPoints","nextData","stride","neighborIds","numPointsOrigin","numPoints","neighborId","wx","wy","clusterProperties","clusterPropIndex","numPoints2","j","clone","original","clusterProps","xLng","yLat","count","abbrev","propIndex","properties","sin","y2","__rest","s","e","t","p","i","MarkerUtils","map","marker","Cluster","markers","position","bounds","m","filterMarkersToPaddedViewport","mapCanvasProjection","viewportPaddingPixels","extendedMapBounds","extendBoundsToPaddedViewport","projection","numPixels","northEast","southWest","latLngBoundsToPixelBounds","extendedPixelBounds","extendPixelBounds","pixelBoundsToLatLngBounds","getPaddedViewport","pixels","extended","ne","sw","distanceBetweenPoints","p1","p2","dLat","dLon","sinDLat","sinDLon","a","AbstractAlgorithm","maxZoom","noop","AbstractViewportAlgorithm","_a","viewportPadding","options","GridAlgorithm","maxDistance","gridSize","state","changed","equal","cluster","candidate","distance","NoopAlgorithm","input","SuperClusterAlgorithm","radius","Supercluster","points","feature","lng","lat","properties","leaf","SuperClusterViewportAlgorithm","ClusterStats","clusters","clusterMarkerCounts","clusterMarkerSum","b","DefaultRenderer","count","stats","svg","title","zIndex","svgEl","clusterOptions","extend","type1","type2","property","OverlayViewSafe","_OverlayViewSafe","MarkerClustererEvents","defaultOnClusterClickHandler","_","MarkerClusterer","algorithmOptions","algorithm","renderer","onClusterClick","noDraw","index","removed","singleMarker","groupMarkers","event"],"sources":["../esm/npm/@googlemaps/markerclusterer@2.5.3/node_modules/fast-deep-equal/index.js","../esm/npm/@googlemaps/markerclusterer@2.5.3/node_modules/kdbush/index.js","../esm/npm/@googlemaps/markerclusterer@2.5.3/node_modules/supercluster/index.js"],"sourcesContent":["'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a \u0026\u0026 b \u0026\u0026 typeof a == 'object' \u0026\u0026 typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source \u0026\u0026 a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a \u0026\u0026 b!==b;\n};\n","\nconst ARRAY_TYPES = [\n    Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n    Int32Array, Uint32Array, Float32Array, Float64Array\n];\n\n/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor} TypedArrayConstructor */\n\nconst VERSION = 1; // serialized format version\nconst HEADER_SIZE = 8;\n\nexport default class KDBush {\n\n    /**\n     * Creates an index from raw `ArrayBuffer` data.\n     * @param {ArrayBuffer} data\n     */\n    static from(data) {\n        if (!(data instanceof ArrayBuffer)) {\n            throw new Error('Data must be an instance of ArrayBuffer.');\n        }\n        const [magic, versionAndType] = new Uint8Array(data, 0, 2);\n        if (magic !== 0xdb) {\n            throw new Error('Data does not appear to be in a KDBush format.');\n        }\n        const version = versionAndType \u003e\u003e 4;\n        if (version !== VERSION) {\n            throw new Error(`Got v${version} data when expected v${VERSION}.`);\n        }\n        const ArrayType = ARRAY_TYPES[versionAndType \u0026 0x0f];\n        if (!ArrayType) {\n            throw new Error('Unrecognized array type.');\n        }\n        const [nodeSize] = new Uint16Array(data, 2, 1);\n        const [numItems] = new Uint32Array(data, 4, 1);\n\n        return new KDBush(numItems, nodeSize, ArrayType, data);\n    }\n\n    /**\n     * Creates an index that will hold a given number of items.\n     * @param {number} numItems\n     * @param {number} [nodeSize=64] Size of the KD-tree node (64 by default).\n     * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n     * @param {ArrayBuffer} [data] (For internal use only)\n     */\n    constructor(numItems, nodeSize = 64, ArrayType = Float64Array, data) {\n        if (isNaN(numItems) || numItems \u003c 0) throw new Error(`Unpexpected numItems value: ${numItems}.`);\n\n        this.numItems = +numItems;\n        this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n        this.ArrayType = ArrayType;\n        this.IndexArrayType = numItems \u003c 65536 ? Uint16Array : Uint32Array;\n\n        const arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n        const coordsByteSize = numItems * 2 * this.ArrayType.BYTES_PER_ELEMENT;\n        const idsByteSize = numItems * this.IndexArrayType.BYTES_PER_ELEMENT;\n        const padCoords = (8 - idsByteSize % 8) % 8;\n\n        if (arrayTypeIndex \u003c 0) {\n            throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n        }\n\n        if (data \u0026\u0026 (data instanceof ArrayBuffer)) { // reconstruct an index from a buffer\n            this.data = data;\n            this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n            this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n            this._pos = numItems * 2;\n            this._finished = true;\n        } else { // initialize a new index\n            this.data = new ArrayBuffer(HEADER_SIZE + coordsByteSize + idsByteSize + padCoords);\n            this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n            this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n            this._pos = 0;\n            this._finished = false;\n\n            // set header\n            new Uint8Array(this.data, 0, 2).set([0xdb, (VERSION \u003c\u003c 4) + arrayTypeIndex]);\n            new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n            new Uint32Array(this.data, 4, 1)[0] = numItems;\n        }\n    }\n\n    /**\n     * Add a point to the index.\n     * @param {number} x\n     * @param {number} y\n     * @returns {number} An incremental index associated with the added item (starting from `0`).\n     */\n    add(x, y) {\n        const index = this._pos \u003e\u003e 1;\n        this.ids[index] = index;\n        this.coords[this._pos++] = x;\n        this.coords[this._pos++] = y;\n        return index;\n    }\n\n    /**\n     * Perform indexing of the added points.\n     */\n    finish() {\n        const numAdded = this._pos \u003e\u003e 1;\n        if (numAdded !== this.numItems) {\n            throw new Error(`Added ${numAdded} items when expected ${this.numItems}.`);\n        }\n        // kd-sort both arrays for efficient search\n        sort(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0);\n\n        this._finished = true;\n        return this;\n    }\n\n    /**\n     * Search the index for items within a given bounding box.\n     * @param {number} minX\n     * @param {number} minY\n     * @param {number} maxX\n     * @param {number} maxY\n     * @returns {number[]} An array of indices correponding to the found items.\n     */\n    range(minX, minY, maxX, maxY) {\n        if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n        const {ids, coords, nodeSize} = this;\n        const stack = [0, ids.length - 1, 0];\n        const result = [];\n\n        // recursively search for items in range in the kd-sorted arrays\n        while (stack.length) {\n            const axis = stack.pop() || 0;\n            const right = stack.pop() || 0;\n            const left = stack.pop() || 0;\n\n            // if we reached \"tree node\", search linearly\n            if (right - left \u003c= nodeSize) {\n                for (let i = left; i \u003c= right; i++) {\n                    const x = coords[2 * i];\n                    const y = coords[2 * i + 1];\n                    if (x \u003e= minX \u0026\u0026 x \u003c= maxX \u0026\u0026 y \u003e= minY \u0026\u0026 y \u003c= maxY) result.push(ids[i]);\n                }\n                continue;\n            }\n\n            // otherwise find the middle index\n            const m = (left + right) \u003e\u003e 1;\n\n            // include the middle item if it's in range\n            const x = coords[2 * m];\n            const y = coords[2 * m + 1];\n            if (x \u003e= minX \u0026\u0026 x \u003c= maxX \u0026\u0026 y \u003e= minY \u0026\u0026 y \u003c= maxY) result.push(ids[m]);\n\n            // queue search in halves that intersect the query\n            if (axis === 0 ? minX \u003c= x : minY \u003c= y) {\n                stack.push(left);\n                stack.push(m - 1);\n                stack.push(1 - axis);\n            }\n            if (axis === 0 ? maxX \u003e= x : maxY \u003e= y) {\n                stack.push(m + 1);\n                stack.push(right);\n                stack.push(1 - axis);\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Search the index for items within a given radius.\n     * @param {number} qx\n     * @param {number} qy\n     * @param {number} r Query radius.\n     * @returns {number[]} An array of indices correponding to the found items.\n     */\n    within(qx, qy, r) {\n        if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n        const {ids, coords, nodeSize} = this;\n        const stack = [0, ids.length - 1, 0];\n        const result = [];\n        const r2 = r * r;\n\n        // recursively search for items within radius in the kd-sorted arrays\n        while (stack.length) {\n            const axis = stack.pop() || 0;\n            const right = stack.pop() || 0;\n            const left = stack.pop() || 0;\n\n            // if we reached \"tree node\", search linearly\n            if (right - left \u003c= nodeSize) {\n                for (let i = left; i \u003c= right; i++) {\n                    if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) \u003c= r2) result.push(ids[i]);\n                }\n                continue;\n            }\n\n            // otherwise find the middle index\n            const m = (left + right) \u003e\u003e 1;\n\n            // include the middle item if it's in range\n            const x = coords[2 * m];\n            const y = coords[2 * m + 1];\n            if (sqDist(x, y, qx, qy) \u003c= r2) result.push(ids[m]);\n\n            // queue search in halves that intersect the query\n            if (axis === 0 ? qx - r \u003c= x : qy - r \u003c= y) {\n                stack.push(left);\n                stack.push(m - 1);\n                stack.push(1 - axis);\n            }\n            if (axis === 0 ? qx + r \u003e= x : qy + r \u003e= y) {\n                stack.push(m + 1);\n                stack.push(right);\n                stack.push(1 - axis);\n            }\n        }\n\n        return result;\n    }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType\u003cTypedArrayConstructor\u003e} coords\n * @param {number} nodeSize\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction sort(ids, coords, nodeSize, left, right, axis) {\n    if (right - left \u003c= nodeSize) return;\n\n    const m = (left + right) \u003e\u003e 1; // middle index\n\n    // sort ids and coords around the middle index so that the halves lie\n    // either left/right or top/bottom correspondingly (taking turns)\n    select(ids, coords, m, left, right, axis);\n\n    // recursively kd-sort first half and second half on the opposite axis\n    sort(ids, coords, nodeSize, left, m - 1, 1 - axis);\n    sort(ids, coords, nodeSize, m + 1, right, 1 - axis);\n}\n\n/**\n * Custom Floyd-Rivest selection algorithm: sort ids and coords so that\n * [left..k-1] items are smaller than k-th item (on either x or y axis)\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType\u003cTypedArrayConstructor\u003e} coords\n * @param {number} k\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction select(ids, coords, k, left, right, axis) {\n\n    while (right \u003e left) {\n        if (right - left \u003e 600) {\n            const n = right - left + 1;\n            const m = k - left + 1;\n            const z = Math.log(n);\n            const s = 0.5 * Math.exp(2 * z / 3);\n            const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 \u003c 0 ? -1 : 1);\n            const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n            const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n            select(ids, coords, k, newLeft, newRight, axis);\n        }\n\n        const t = coords[2 * k + axis];\n        let i = left;\n        let j = right;\n\n        swapItem(ids, coords, left, k);\n        if (coords[2 * right + axis] \u003e t) swapItem(ids, coords, left, right);\n\n        while (i \u003c j) {\n            swapItem(ids, coords, i, j);\n            i++;\n            j--;\n            while (coords[2 * i + axis] \u003c t) i++;\n            while (coords[2 * j + axis] \u003e t) j--;\n        }\n\n        if (coords[2 * left + axis] === t) swapItem(ids, coords, left, j);\n        else {\n            j++;\n            swapItem(ids, coords, j, right);\n        }\n\n        if (j \u003c= k) left = j + 1;\n        if (k \u003c= j) right = j - 1;\n    }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType\u003cTypedArrayConstructor\u003e} coords\n * @param {number} i\n * @param {number} j\n */\nfunction swapItem(ids, coords, i, j) {\n    swap(ids, i, j);\n    swap(coords, 2 * i, 2 * j);\n    swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\n/**\n * @param {InstanceType\u003cTypedArrayConstructor\u003e} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n/**\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction sqDist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n","\nimport KDBush from 'kdbush';\n\nconst defaultOptions = {\n    minZoom: 0,   // min zoom to generate clusters on\n    maxZoom: 16,  // max zoom level to cluster the points on\n    minPoints: 2, // minimum points to form a cluster\n    radius: 40,   // cluster radius in pixels\n    extent: 512,  // tile extent (radius is calculated relative to it)\n    nodeSize: 64, // size of the KD-tree leaf node, affects performance\n    log: false,   // whether to log timing info\n\n    // whether to generate numeric ids for input features (in vector tiles)\n    generateId: false,\n\n    // a reduce function for calculating custom cluster properties\n    reduce: null, // (accumulated, props) =\u003e { accumulated.sum += props.sum; }\n\n    // properties to use for individual points when running the reducer\n    map: props =\u003e props // props =\u003e ({sum: props.my_value})\n};\n\nconst fround = Math.fround || (tmp =\u003e ((x) =\u003e { tmp[0] = +x; return tmp[0]; }))(new Float32Array(1));\n\nconst OFFSET_ZOOM = 2;\nconst OFFSET_ID = 3;\nconst OFFSET_PARENT = 4;\nconst OFFSET_NUM = 5;\nconst OFFSET_PROP = 6;\n\nexport default class Supercluster {\n    constructor(options) {\n        this.options = Object.assign(Object.create(defaultOptions), options);\n        this.trees = new Array(this.options.maxZoom + 1);\n        this.stride = this.options.reduce ? 7 : 6;\n        this.clusterProps = [];\n    }\n\n    load(points) {\n        const {log, minZoom, maxZoom} = this.options;\n\n        if (log) console.time('total time');\n\n        const timerId = `prepare ${  points.length  } points`;\n        if (log) console.time(timerId);\n\n        this.points = points;\n\n        // generate a cluster object for each point and index input points into a KD-tree\n        const data = [];\n\n        for (let i = 0; i \u003c points.length; i++) {\n            const p = points[i];\n            if (!p.geometry) continue;\n\n            const [lng, lat] = p.geometry.coordinates;\n            const x = fround(lngX(lng));\n            const y = fround(latY(lat));\n            // store internal point/cluster data in flat numeric arrays for performance\n            data.push(\n                x, y, // projected point coordinates\n                Infinity, // the last zoom the point was processed at\n                i, // index of the source feature in the original input array\n                -1, // parent cluster id\n                1 // number of points in a cluster\n            );\n            if (this.options.reduce) data.push(0); // noop\n        }\n        let tree = this.trees[maxZoom + 1] = this._createTree(data);\n\n        if (log) console.timeEnd(timerId);\n\n        // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n        // results in a cluster hierarchy across zoom levels\n        for (let z = maxZoom; z \u003e= minZoom; z--) {\n            const now = +Date.now();\n\n            // create a new set of clusters for the zoom and index them with a KD-tree\n            tree = this.trees[z] = this._createTree(this._cluster(tree, z));\n\n            if (log) console.log('z%d: %d clusters in %dms', z, tree.numItems, +Date.now() - now);\n        }\n\n        if (log) console.timeEnd('total time');\n\n        return this;\n    }\n\n    getClusters(bbox, zoom) {\n        let minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n        const minLat = Math.max(-90, Math.min(90, bbox[1]));\n        let maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n        const maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n        if (bbox[2] - bbox[0] \u003e= 360) {\n            minLng = -180;\n            maxLng = 180;\n        } else if (minLng \u003e maxLng) {\n            const easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n            const westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n            return easternHem.concat(westernHem);\n        }\n\n        const tree = this.trees[this._limitZoom(zoom)];\n        const ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n        const data = tree.data;\n        const clusters = [];\n        for (const id of ids) {\n            const k = this.stride * id;\n            clusters.push(data[k + OFFSET_NUM] \u003e 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n        }\n        return clusters;\n    }\n\n    getChildren(clusterId) {\n        const originId = this._getOriginId(clusterId);\n        const originZoom = this._getOriginZoom(clusterId);\n        const errorMsg = 'No cluster with the specified id.';\n\n        const tree = this.trees[originZoom];\n        if (!tree) throw new Error(errorMsg);\n\n        const data = tree.data;\n        if (originId * this.stride \u003e= data.length) throw new Error(errorMsg);\n\n        const r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n        const x = data[originId * this.stride];\n        const y = data[originId * this.stride + 1];\n        const ids = tree.within(x, y, r);\n        const children = [];\n        for (const id of ids) {\n            const k = id * this.stride;\n            if (data[k + OFFSET_PARENT] === clusterId) {\n                children.push(data[k + OFFSET_NUM] \u003e 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n            }\n        }\n\n        if (children.length === 0) throw new Error(errorMsg);\n\n        return children;\n    }\n\n    getLeaves(clusterId, limit, offset) {\n        limit = limit || 10;\n        offset = offset || 0;\n\n        const leaves = [];\n        this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n        return leaves;\n    }\n\n    getTile(z, x, y) {\n        const tree = this.trees[this._limitZoom(z)];\n        const z2 = Math.pow(2, z);\n        const {extent, radius} = this.options;\n        const p = radius / extent;\n        const top = (y - p) / z2;\n        const bottom = (y + 1 + p) / z2;\n\n        const tile = {\n            features: []\n        };\n\n        this._addTileFeatures(\n            tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n            tree.data, x, y, z2, tile);\n\n        if (x === 0) {\n            this._addTileFeatures(\n                tree.range(1 - p / z2, top, 1, bottom),\n                tree.data, z2, y, z2, tile);\n        }\n        if (x === z2 - 1) {\n            this._addTileFeatures(\n                tree.range(0, top, p / z2, bottom),\n                tree.data, -1, y, z2, tile);\n        }\n\n        return tile.features.length ? tile : null;\n    }\n\n    getClusterExpansionZoom(clusterId) {\n        let expansionZoom = this._getOriginZoom(clusterId) - 1;\n        while (expansionZoom \u003c= this.options.maxZoom) {\n            const children = this.getChildren(clusterId);\n            expansionZoom++;\n            if (children.length !== 1) break;\n            clusterId = children[0].properties.cluster_id;\n        }\n        return expansionZoom;\n    }\n\n    _appendLeaves(result, clusterId, limit, offset, skipped) {\n        const children = this.getChildren(clusterId);\n\n        for (const child of children) {\n            const props = child.properties;\n\n            if (props \u0026\u0026 props.cluster) {\n                if (skipped + props.point_count \u003c= offset) {\n                    // skip the whole cluster\n                    skipped += props.point_count;\n                } else {\n                    // enter the cluster\n                    skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n                    // exit the cluster\n                }\n            } else if (skipped \u003c offset) {\n                // skip a single point\n                skipped++;\n            } else {\n                // add a single point\n                result.push(child);\n            }\n            if (result.length === limit) break;\n        }\n\n        return skipped;\n    }\n\n    _createTree(data) {\n        const tree = new KDBush(data.length / this.stride | 0, this.options.nodeSize, Float32Array);\n        for (let i = 0; i \u003c data.length; i += this.stride) tree.add(data[i], data[i + 1]);\n        tree.finish();\n        tree.data = data;\n        return tree;\n    }\n\n    _addTileFeatures(ids, data, x, y, z2, tile) {\n        for (const i of ids) {\n            const k = i * this.stride;\n            const isCluster = data[k + OFFSET_NUM] \u003e 1;\n\n            let tags, px, py;\n            if (isCluster) {\n                tags = getClusterProperties(data, k, this.clusterProps);\n                px = data[k];\n                py = data[k + 1];\n            } else {\n                const p = this.points[data[k + OFFSET_ID]];\n                tags = p.properties;\n                const [lng, lat] = p.geometry.coordinates;\n                px = lngX(lng);\n                py = latY(lat);\n            }\n\n            const f = {\n                type: 1,\n                geometry: [[\n                    Math.round(this.options.extent * (px * z2 - x)),\n                    Math.round(this.options.extent * (py * z2 - y))\n                ]],\n                tags\n            };\n\n            // assign id\n            let id;\n            if (isCluster || this.options.generateId) {\n                // optionally generate id for points\n                id = data[k + OFFSET_ID];\n            } else {\n                // keep id if already assigned\n                id = this.points[data[k + OFFSET_ID]].id;\n            }\n\n            if (id !== undefined) f.id = id;\n\n            tile.features.push(f);\n        }\n    }\n\n    _limitZoom(z) {\n        return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n    }\n\n    _cluster(tree, zoom) {\n        const {radius, extent, reduce, minPoints} = this.options;\n        const r = radius / (extent * Math.pow(2, zoom));\n        const data = tree.data;\n        const nextData = [];\n        const stride = this.stride;\n\n        // loop through each point\n        for (let i = 0; i \u003c data.length; i += stride) {\n            // if we've already visited the point at this zoom level, skip it\n            if (data[i + OFFSET_ZOOM] \u003c= zoom) continue;\n            data[i + OFFSET_ZOOM] = zoom;\n\n            // find all nearby points\n            const x = data[i];\n            const y = data[i + 1];\n            const neighborIds = tree.within(data[i], data[i + 1], r);\n\n            const numPointsOrigin = data[i + OFFSET_NUM];\n            let numPoints = numPointsOrigin;\n\n            // count the number of points in a potential cluster\n            for (const neighborId of neighborIds) {\n                const k = neighborId * stride;\n                // filter out neighbors that are already processed\n                if (data[k + OFFSET_ZOOM] \u003e zoom) numPoints += data[k + OFFSET_NUM];\n            }\n\n            // if there were neighbors to merge, and there are enough points to form a cluster\n            if (numPoints \u003e numPointsOrigin \u0026\u0026 numPoints \u003e= minPoints) {\n                let wx = x * numPointsOrigin;\n                let wy = y * numPointsOrigin;\n\n                let clusterProperties;\n                let clusterPropIndex = -1;\n\n                // encode both zoom and point index on which the cluster originated -- offset by total length of features\n                const id = ((i / stride | 0) \u003c\u003c 5) + (zoom + 1) + this.points.length;\n\n                for (const neighborId of neighborIds) {\n                    const k = neighborId * stride;\n\n                    if (data[k + OFFSET_ZOOM] \u003c= zoom) continue;\n                    data[k + OFFSET_ZOOM] = zoom; // save the zoom (so it doesn't get processed twice)\n\n                    const numPoints2 = data[k + OFFSET_NUM];\n                    wx += data[k] * numPoints2; // accumulate coordinates for calculating weighted center\n                    wy += data[k + 1] * numPoints2;\n\n                    data[k + OFFSET_PARENT] = id;\n\n                    if (reduce) {\n                        if (!clusterProperties) {\n                            clusterProperties = this._map(data, i, true);\n                            clusterPropIndex = this.clusterProps.length;\n                            this.clusterProps.push(clusterProperties);\n                        }\n                        reduce(clusterProperties, this._map(data, k));\n                    }\n                }\n\n                data[i + OFFSET_PARENT] = id;\n                nextData.push(wx / numPoints, wy / numPoints, Infinity, id, -1, numPoints);\n                if (reduce) nextData.push(clusterPropIndex);\n\n            } else { // left points as unclustered\n                for (let j = 0; j \u003c stride; j++) nextData.push(data[i + j]);\n\n                if (numPoints \u003e 1) {\n                    for (const neighborId of neighborIds) {\n                        const k = neighborId * stride;\n                        if (data[k + OFFSET_ZOOM] \u003c= zoom) continue;\n                        data[k + OFFSET_ZOOM] = zoom;\n                        for (let j = 0; j \u003c stride; j++) nextData.push(data[k + j]);\n                    }\n                }\n            }\n        }\n\n        return nextData;\n    }\n\n    // get index of the point from which the cluster originated\n    _getOriginId(clusterId) {\n        return (clusterId - this.points.length) \u003e\u003e 5;\n    }\n\n    // get zoom of the point from which the cluster originated\n    _getOriginZoom(clusterId) {\n        return (clusterId - this.points.length) % 32;\n    }\n\n    _map(data, i, clone) {\n        if (data[i + OFFSET_NUM] \u003e 1) {\n            const props = this.clusterProps[data[i + OFFSET_PROP]];\n            return clone ? Object.assign({}, props) : props;\n        }\n        const original = this.points[data[i + OFFSET_ID]].properties;\n        const result = this.options.map(original);\n        return clone \u0026\u0026 result === original ? Object.assign({}, result) : result;\n    }\n}\n\nfunction getClusterJSON(data, i, clusterProps) {\n    return {\n        type: 'Feature',\n        id: data[i + OFFSET_ID],\n        properties: getClusterProperties(data, i, clusterProps),\n        geometry: {\n            type: 'Point',\n            coordinates: [xLng(data[i]), yLat(data[i + 1])]\n        }\n    };\n}\n\nfunction getClusterProperties(data, i, clusterProps) {\n    const count = data[i + OFFSET_NUM];\n    const abbrev =\n        count \u003e= 10000 ? `${Math.round(count / 1000)  }k` :\n        count \u003e= 1000 ? `${Math.round(count / 100) / 10  }k` : count;\n    const propIndex = data[i + OFFSET_PROP];\n    const properties = propIndex === -1 ? {} : Object.assign({}, clusterProps[propIndex]);\n    return Object.assign(properties, {\n        cluster: true,\n        cluster_id: data[i + OFFSET_ID],\n        point_count: count,\n        point_count_abbreviated: abbrev\n    });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n    return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n    const sin = Math.sin(lat * Math.PI / 180);\n    const y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n    return y \u003c 0 ? 0 : y \u003e 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n    return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n    const y2 = (180 - y * 360) * Math.PI / 180;\n    return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n"],"version":3}
