@deck.gl/geo-layers 9.2.2 → 9.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/geo-cell-layer/GeoCellLayer.ts", "../src/a5-layer/a5-layer.ts", "../src/h3-layers/h3-utils.ts", "../src/wms-layer/wms-layer.ts", "../src/wms-layer/utils.ts", "../src/great-circle-layer/great-circle-layer.ts", "../src/s2-layer/s2-geometry.ts", "../src/s2-layer/s2-utils.ts", "../src/s2-layer/s2-layer.ts", "../src/quadkey-layer/quadkey-utils.ts", "../src/quadkey-layer/quadkey-layer.ts", "../src/tile-layer/tile-layer.ts", "../src/tileset-2d/tileset-2d.ts", "../src/tileset-2d/tile-2d-header.ts", "../src/tileset-2d/tile-2d-traversal.ts", "../src/tileset-2d/utils.ts", "../src/tileset-2d/memoize.ts", "../src/trips-layer/trips-layer.ts", "../src/trips-layer/trips-layer-uniforms.ts", "../src/h3-layers/h3-cluster-layer.ts", "../src/h3-layers/h3-hexagon-layer.ts", "../src/tile-3d-layer/tile-3d-layer.ts", "../src/mesh-layer/mesh-layer.ts", "../src/mesh-layer/mesh-layer-uniforms.ts", "../src/mesh-layer/mesh-layer-vertex.glsl.ts", "../src/mesh-layer/mesh-layer-fragment.glsl.ts", "../src/terrain-layer/terrain-layer.ts", "../src/mvt-layer/mvt-layer.ts", "../src/mvt-layer/coordinate-transform.ts", "../src/mvt-layer/find-index-binary.ts", "../src/geohash-layer/geohash-utils.ts", "../src/geohash-layer/geohash-layer.ts"],
4
- "sourcesContent": ["// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable max-len */\n\nexport {default as A5Layer} from './a5-layer/a5-layer';\nexport {WMSLayer as _WMSLayer} from './wms-layer/wms-layer';\nexport {default as GreatCircleLayer} from './great-circle-layer/great-circle-layer';\nexport {default as S2Layer} from './s2-layer/s2-layer';\nexport {default as QuadkeyLayer} from './quadkey-layer/quadkey-layer';\nexport {default as TileLayer} from './tile-layer/tile-layer';\nexport {default as TripsLayer} from './trips-layer/trips-layer';\nexport {default as H3ClusterLayer} from './h3-layers/h3-cluster-layer';\nexport {default as H3HexagonLayer} from './h3-layers/h3-hexagon-layer';\nexport {default as Tile3DLayer} from './tile-3d-layer/tile-3d-layer';\nexport {default as TerrainLayer} from './terrain-layer/terrain-layer';\nexport {default as MVTLayer} from './mvt-layer/mvt-layer';\nexport {default as GeohashLayer} from './geohash-layer/geohash-layer';\n\nexport {default as _GeoCellLayer} from './geo-cell-layer/GeoCellLayer';\n\n// Types\nexport type {A5LayerProps} from './a5-layer/a5-layer';\nexport type {WMSLayerProps} from './wms-layer/wms-layer';\nexport type {H3ClusterLayerProps} from './h3-layers/h3-cluster-layer';\nexport type {H3HexagonLayerProps} from './h3-layers/h3-hexagon-layer';\nexport type {GreatCircleLayerProps} from './great-circle-layer/great-circle-layer';\nexport type {S2LayerProps} from './s2-layer/s2-layer';\nexport type {TileLayerProps, TileLayerPickingInfo} from './tile-layer/tile-layer';\nexport type {TripsLayerProps} from './trips-layer/trips-layer';\nexport type {QuadkeyLayerProps} from './quadkey-layer/quadkey-layer';\nexport type {TerrainLayerProps} from './terrain-layer/terrain-layer';\nexport type {Tile3DLayerProps} from './tile-3d-layer/tile-3d-layer';\nexport type {MVTLayerProps, MVTLayerPickingInfo} from './mvt-layer/mvt-layer';\nexport type {GeoCellLayerProps as _GeoCellLayerProps} from './geo-cell-layer/GeoCellLayer';\nexport type {GeohashLayerProps} from './geohash-layer/geohash-layer';\n\n// Tileset2D\n\nexport type {GeoBoundingBox, NonGeoBoundingBox} from './tileset-2d/index';\nexport type {TileLoadProps as _TileLoadProps} from './tileset-2d/index';\n\nexport {getURLFromTemplate as _getURLFromTemplate} from './tileset-2d/index';\nexport {Tileset2D as _Tileset2D} from './tileset-2d/index';\nexport {Tile2DHeader as _Tile2DHeader} from './tileset-2d/index';\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, Layer, LayersList, DefaultProps} from '@deck.gl/core';\nimport {PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps<GeoCellLayerProps> = {\n ...PolygonLayer.defaultProps\n};\n\n/** All properties supported by GeoCellLayer. */\nexport type GeoCellLayerProps<DataT = unknown> = PolygonLayerProps<DataT>;\n\nexport default class GeoCellLayer<DataT = any, ExtraProps extends {} = {}> extends CompositeLayer<\n Required<GeoCellLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'GeoCellLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n /** Implement to generate props to create geometry. */\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n return null;\n }\n\n renderLayers(): Layer | null | LayersList {\n // Rendering props underlying layer\n const {\n elevationScale,\n extruded,\n wireframe,\n filled,\n stroked,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth\n } = this.props;\n\n // Accessor props for underlying layers\n const {updateTriggers, material, transitions} = this.props;\n\n // Filled Polygon Layer\n const CellLayer = this.getSubLayerClass('cell', PolygonLayer);\n const {updateTriggers: boundsUpdateTriggers, ...boundsProps} = this.indexToBounds() || {};\n return new CellLayer(\n {\n filled,\n wireframe,\n\n extruded,\n elevationScale,\n\n stroked,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified,\n\n material,\n transitions,\n\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth\n },\n this.getSubLayerProps({\n id: 'cell',\n updateTriggers: updateTriggers && {\n ...boundsUpdateTriggers,\n getElevation: updateTriggers.getElevation,\n getFillColor: updateTriggers.getFillColor,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n }\n }),\n boundsProps\n );\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {cellToBoundary, hexToU64} from 'a5-js';\nimport {flattenPolygon} from '../h3-layers/h3-utils';\n\nconst defaultProps: DefaultProps<A5LayerProps> = {\n getPentagon: {type: 'accessor', value: (d: any) => d.pentagon}\n};\n\n/** All properties supported by A5Layer. */\nexport type A5LayerProps<DataT = unknown> = _A5LayerProps<DataT> & GeoCellLayerProps<DataT>;\n\n/** Properties added by A5Layer. */\ntype _A5LayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the A5 pentagonal cell identifier.\n *\n * By default, it reads `pentagon` property of data object.\n */\n getPentagon?: AccessorFunction<DataT, string | bigint>;\n};\n\n/** Render filled and/or stroked polygons based on the [A5](https://a5geo.org) geospatial indexing system. */\nexport default class A5Layer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_A5LayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'A5Layer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getPentagon} = this.props;\n\n return {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => {\n const pentagon = getPentagon(x, objectInfo);\n const boundary = cellToBoundary(\n typeof pentagon === 'string' ? hexToU64(pentagon) : pentagon,\n {closedRing: true, segments: 'auto'}\n );\n return flattenPolygon(boundary);\n }\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CoordPair, H3IndexInput, cellToBoundary, cellToLatLng} from 'h3-js';\nimport {lerp} from '@math.gl/core';\n\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: CoordPair[], refLng?: number): void {\n refLng = refLng === undefined ? vertices[0][0] : refLng;\n for (const pt of vertices) {\n const deltaLng = pt[0] - refLng;\n if (deltaLng > 180) {\n pt[0] -= 360;\n } else if (deltaLng < -180) {\n pt[0] += 360;\n }\n }\n}\n\n// scale polygon vertices w.r.t center (hexId)\nexport function scalePolygon(hexId: H3IndexInput, vertices: CoordPair[], factor: number): void {\n const [lat, lng] = cellToLatLng(hexId);\n const actualCount = vertices.length;\n\n // normalize with respect to center\n normalizeLongitudes(vertices, lng);\n\n // `cellToBoundary` returns same array object for first and last vertex (closed polygon),\n // if so skip scaling the last vertex\n const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;\n for (let i = 0; i < vertexCount; i++) {\n vertices[i][0] = lerp(lng, vertices[i][0], factor);\n vertices[i][1] = lerp(lat, vertices[i][1], factor);\n }\n}\n\n// gets hexagon centroid\nexport function getHexagonCentroid(getHexagon, object, objectInfo) {\n const hexagonId = getHexagon(object, objectInfo);\n const [lat, lng] = cellToLatLng(hexagonId);\n return [lng, lat];\n}\n\nexport function h3ToPolygon(hexId: H3IndexInput, coverage: number = 1): number[][] {\n const vertices = cellToBoundary(hexId, true);\n\n if (coverage !== 1) {\n // scale and normalize vertices w.r.t to center\n scalePolygon(hexId, vertices, coverage);\n } else {\n // normalize w.r.t to start vertex\n normalizeLongitudes(vertices);\n }\n\n return vertices;\n}\n\nexport function flattenPolygon(vertices: number[][]): Float64Array {\n const positions = new Float64Array(vertices.length * 2);\n let i = 0;\n for (const pt of vertices) {\n positions[i++] = pt[0];\n positions[i++] = pt[1];\n }\n return positions;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// deck.gl, MIT license\n// Attributions:\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* eslint-disable camelcase */ // Some WMS parameters are not in camel case\n/* global setTimeout, clearTimeout */\n\nimport {\n Layer,\n CompositeLayer,\n CompositeLayerProps,\n UpdateParameters,\n DefaultProps,\n Viewport,\n COORDINATE_SYSTEM,\n _deepEqual as deepEqual\n} from '@deck.gl/core';\nimport {BitmapLayer} from '@deck.gl/layers';\nimport type {GetImageParameters, ImageSourceMetadata, ImageType} from '@loaders.gl/loader-utils';\nimport type {ImageServiceType} from '@loaders.gl/wms';\nimport {ImageSource, createImageSource} from '@loaders.gl/wms';\nimport {WGS84ToPseudoMercator} from './utils';\n\n/** All props supported by the TileLayer */\nexport type WMSLayerProps = CompositeLayerProps & _WMSLayerProps;\n\n/** Props added by the TileLayer */\ntype _WMSLayerProps = {\n data: string | ImageSource;\n serviceType?: ImageServiceType | 'auto';\n layers?: string[];\n srs?: 'EPSG:4326' | 'EPSG:3857' | 'auto';\n onMetadataLoad?: (metadata: ImageSourceMetadata) => void;\n onMetadataLoadError?: (error: Error) => void;\n onImageLoadStart?: (requestId: unknown) => void;\n onImageLoad?: (requestId: unknown) => void;\n onImageLoadError?: (requestId: unknown, error: Error) => void;\n};\n\nconst defaultProps: DefaultProps<WMSLayerProps> = {\n id: 'imagery-layer',\n data: '',\n serviceType: 'auto',\n srs: 'auto',\n layers: {type: 'array', compare: true, value: []},\n onMetadataLoad: {type: 'function', value: () => {}},\n // eslint-disable-next-line\n onMetadataLoadError: {type: 'function', value: console.error},\n onImageLoadStart: {type: 'function', value: () => {}},\n onImageLoad: {type: 'function', value: () => {}},\n onImageLoadError: {\n type: 'function',\n compare: false,\n // eslint-disable-next-line\n value: (requestId: unknown, error: Error) => console.error(error, requestId)\n }\n};\n\n/**\n * The layer is used in Hex Tile layer in order to properly discard invisible elements during animation\n */\nexport class WMSLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_WMSLayerProps>\n> {\n static layerName = 'WMSLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n state!: {\n imageSource: ImageSource;\n image: ImageType;\n bounds: [number, number, number, number];\n lastRequestParameters: {\n bbox: [number, number, number, number];\n layers: string[];\n srs: 'EPSG:4326' | 'EPSG:3857';\n width: number;\n height: number;\n };\n lastRequestId: number;\n _nextRequestId: number;\n /** TODO: Change any => setTimeout return type. Different between Node and browser... */\n _timeoutId: any;\n loadCounter: number;\n };\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n // Track the explicit loading done by this layer\n return this.state?.loadCounter === 0 && super.isLoaded;\n }\n\n /** Lets deck.gl know that we want viewport change events */\n override shouldUpdateState(): boolean {\n return true;\n }\n\n override initializeState(): void {\n // intentionally empty, initialization is done in updateState\n this.state._nextRequestId = 0;\n this.state.lastRequestId = -1;\n this.state.loadCounter = 0;\n }\n\n override updateState({changeFlags, props, oldProps}: UpdateParameters<this>): void {\n const {viewport} = this.context;\n\n // Check if data source has changed\n if (changeFlags.dataChanged || props.serviceType !== oldProps.serviceType) {\n this.state.imageSource = this._createImageSource(props);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadMetadata();\n this.debounce(() => this.loadImage(viewport, 'image source changed'), 0);\n } else if (!deepEqual(props.layers, oldProps.layers, 1)) {\n this.debounce(() => this.loadImage(viewport, 'layers changed'), 0);\n } else if (changeFlags.viewportChanged) {\n this.debounce(() => this.loadImage(viewport, 'viewport changed'));\n }\n }\n\n override finalizeState(): void {\n // TODO - we could cancel outstanding requests\n }\n\n override renderLayers(): Layer {\n // TODO - which bitmap layer is rendered should depend on the current viewport\n // Currently Studio only uses one viewport\n const {bounds, image, lastRequestParameters} = this.state;\n\n return (\n image &&\n new BitmapLayer({\n ...this.getSubLayerProps({id: 'bitmap'}),\n _imageCoordinateSystem:\n lastRequestParameters.srs === 'EPSG:4326'\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n bounds,\n image\n })\n );\n }\n\n async getFeatureInfoText(x: number, y: number): Promise<string | null> {\n const {lastRequestParameters} = this.state;\n if (lastRequestParameters) {\n // @ts-expect-error Undocumented method\n const featureInfo = await this.state.imageSource.getFeatureInfoText?.({\n ...lastRequestParameters,\n query_layers: lastRequestParameters.layers,\n x,\n y,\n info_format: 'application/vnd.ogc.gml'\n });\n return featureInfo;\n }\n return '';\n }\n\n _createImageSource(props: WMSLayerProps): ImageSource {\n if (props.data instanceof ImageSource) {\n return props.data;\n }\n\n if (typeof props.data === 'string') {\n return createImageSource({\n url: props.data,\n loadOptions: props.loadOptions,\n type: props.serviceType\n });\n }\n\n throw new Error('invalid image source in props.data');\n }\n\n /** Run a getMetadata on the image service */\n async _loadMetadata(): Promise<void> {\n const {imageSource} = this.state;\n try {\n this.state.loadCounter++;\n const metadata = await imageSource.getMetadata();\n\n // If a request takes a long time, it may no longer be expected\n if (this.state.imageSource === imageSource) {\n this.getCurrentLayer()?.props.onMetadataLoad(metadata);\n }\n } catch (error) {\n this.getCurrentLayer()?.props.onMetadataLoadError(error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n /** Load an image */\n async loadImage(viewport: Viewport, reason: string): Promise<void> {\n const {layers, serviceType} = this.props;\n\n // TODO - move to ImageSource?\n if (serviceType === 'wms' && layers.length === 0) {\n return;\n }\n\n const bounds = viewport.getBounds();\n const {width, height} = viewport;\n const requestId = this.getRequestId();\n let {srs} = this.props;\n if (srs === 'auto') {\n // BitmapLayer only supports LNGLAT or CARTESIAN (Web-Mercator)\n srs = viewport.resolution ? 'EPSG:4326' : 'EPSG:3857';\n }\n const requestParams: GetImageParameters = {\n width,\n height,\n boundingBox: [\n [bounds[0], bounds[1]],\n [bounds[2], bounds[3]]\n ],\n layers,\n crs: srs\n };\n if (srs === 'EPSG:3857') {\n const min = WGS84ToPseudoMercator([bounds[0], bounds[1]]);\n const max = WGS84ToPseudoMercator([bounds[2], bounds[3]]);\n requestParams.boundingBox = [min, max];\n }\n\n try {\n this.state.loadCounter++;\n this.props.onImageLoadStart(requestId);\n\n const image = await this.state.imageSource.getImage(requestParams);\n\n // If a request takes a long time, later requests may have already loaded.\n if (this.state.lastRequestId < requestId) {\n this.getCurrentLayer()?.props.onImageLoad(requestId);\n // Not type safe...\n this.setState({\n image,\n bounds,\n lastRequestParameters: requestParams,\n lastRequestId: requestId\n });\n }\n } catch (error) {\n this.raiseError(error as Error, 'Load image');\n this.getCurrentLayer()?.props.onImageLoadError(requestId, error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n // HELPERS\n\n /** Global counter for issuing unique request ids */\n private getRequestId(): number {\n return this.state._nextRequestId++;\n }\n\n /** Runs an action in the future, cancels it if the new action is issued before it executes */\n private debounce(fn: Function, ms = 500): void {\n clearTimeout(this.state._timeoutId);\n this.state._timeoutId = setTimeout(() => fn(), ms);\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {lngLatToWorld} from '@math.gl/web-mercator';\n\n// https://epsg.io/3857\n// +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs\nconst HALF_EARTH_CIRCUMFERENCE = 6378137 * Math.PI;\n\n/** Projects EPSG:4326 to EPSG:3857\n * This is a lightweight replacement of proj4. Use tests to ensure conformance.\n */\nexport function WGS84ToPseudoMercator(coord: [number, number]): [number, number] {\n const mercator = lngLatToWorld(coord);\n mercator[0] = (mercator[0] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;\n mercator[1] = (mercator[1] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;\n return mercator;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {DefaultProps} from '@deck.gl/core';\nimport {ArcLayer, ArcLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps<ArcLayerProps> = {\n getHeight: {type: 'accessor', value: 0},\n greatCircle: true\n};\n\n/** All properties supported by GreatCircleLayer. */\nexport type GreatCircleLayerProps<DataT = unknown> = ArcLayerProps<DataT>;\n\n// This layer has been merged into the core ArcLayer\n// Keeping for backward-compatibility\n/** @deprecated Use ArcLayer with `greatCircle: true` instead */\nexport default class GreatCircleLayer<DataT = any, ExtraProps extends {} = {}> extends ArcLayer<\n DataT,\n ExtraProps\n> {\n static layerName = 'GreatCircleLayer';\n static defaultProps = defaultProps;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/*\nAdapted from s2-geometry\n\nISC License (ISC)\n\nCopyright (c) 2012-2016, Jon Atkins <github@jonatkins.com>\nCopyright (c) 2016, AJ ONeal <aj@daplie.com>\n\nPermission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\nimport Long from 'long';\n\n//\n// Functional Style\n//\nconst FACE_BITS = 3;\nconst MAX_LEVEL = 30;\nconst POS_BITS = 2 * MAX_LEVEL + 1; // 61 (60 bits of data, 1 bit lsb marker)\nconst RADIAN_TO_DEGREE = 180 / Math.PI;\n\nexport function IJToST(\n ij: [number, number],\n order: number,\n offsets: [number, number]\n): [number, number] {\n const maxSize = 1 << order;\n\n return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];\n}\n\nfunction singleSTtoUV(st: number): number {\n if (st >= 0.5) {\n return (1 / 3.0) * (4 * st * st - 1);\n }\n return (1 / 3.0) * (1 - 4 * (1 - st) * (1 - st));\n}\n\nexport function STToUV(st: [number, number]): [number, number] {\n return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];\n}\n\nexport function FaceUVToXYZ(face: number, [u, v]: [number, number]): [number, number, number] {\n switch (face) {\n case 0:\n return [1, u, v];\n case 1:\n return [-u, 1, v];\n case 2:\n return [-u, -v, 1];\n case 3:\n return [-1, -v, -u];\n case 4:\n return [v, -1, -u];\n case 5:\n return [v, u, -1];\n default:\n throw new Error('Invalid face');\n }\n}\n\nexport function XYZToLngLat([x, y, z]: [number, number, number]): [number, number] {\n const lat = Math.atan2(z, Math.sqrt(x * x + y * y));\n const lng = Math.atan2(y, x);\n\n return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];\n}\n\nexport function toHilbertQuadkey(idS: string): string {\n let bin = Long.fromString(idS, true, 10).toString(2);\n\n while (bin.length < FACE_BITS + POS_BITS) {\n // eslint-disable-next-line prefer-template\n bin = '0' + bin;\n }\n\n // MUST come AFTER binstr has been left-padded with '0's\n const lsbIndex = bin.lastIndexOf('1');\n // substr(start, len)\n // substring(start, end) // includes start, does not include end\n const faceB = bin.substring(0, 3);\n // posB will always be a multiple of 2 (or it's invalid)\n const posB = bin.substring(3, lsbIndex);\n const levelN = posB.length / 2;\n\n const faceS = Long.fromString(faceB, true, 2).toString(10);\n let posS = Long.fromString(posB, true, 2).toString(4);\n\n while (posS.length < levelN) {\n // eslint-disable-next-line prefer-template\n posS = '0' + posS;\n }\n\n return `${faceS}/${posS}`;\n}\n\nfunction rotateAndFlipQuadrant(n: number, point: [number, number], rx: number, ry: number): void {\n if (ry === 0) {\n if (rx === 1) {\n point[0] = n - 1 - point[0];\n point[1] = n - 1 - point[1];\n }\n\n const x = point[0];\n point[0] = point[1];\n point[1] = x;\n }\n}\n\nexport function FromHilbertQuadKey(hilbertQuadkey: string): {\n face: number;\n ij: [number, number];\n level: number;\n} {\n const parts = hilbertQuadkey.split('/');\n const face = parseInt(parts[0], 10);\n const position = parts[1];\n const maxLevel = position.length;\n const point = [0, 0] as [number, number];\n let level;\n\n for (let i = maxLevel - 1; i >= 0; i--) {\n level = maxLevel - i;\n const bit = position[i];\n let rx = 0;\n let ry = 0;\n if (bit === '1') {\n ry = 1;\n } else if (bit === '2') {\n rx = 1;\n ry = 1;\n } else if (bit === '3') {\n rx = 1;\n }\n\n const val = Math.pow(2, level - 1);\n rotateAndFlipQuadrant(val, point, rx, ry);\n\n point[0] += val * rx;\n point[1] += val * ry;\n }\n\n if (face % 2 === 1) {\n const t = point[0];\n point[0] = point[1];\n point[1] = t;\n }\n\n return {face, ij: point, level};\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// s2-geometry is a pure JavaScript port of Google/Niantic's S2 Geometry library\n// which is perfect since it works in the browser.\nimport {\n toHilbertQuadkey,\n FromHilbertQuadKey,\n IJToST,\n STToUV,\n FaceUVToXYZ,\n XYZToLngLat\n} from './s2-geometry';\nimport Long from 'long';\n\n/**\n * Given an S2 token this function convert the token to 64 bit id\n https://github.com/google/s2-geometry-library-java/blob/c04b68bf3197a9c34082327eeb3aec7ab7c85da1/src/com/google/common/geometry/S2CellId.java#L439\n * */\nfunction getIdFromToken(token: string): number {\n // pad token with zeros to make the length 16\n const paddedToken = token.padEnd(16, '0');\n return Long.fromString(paddedToken, 16);\n}\n\nconst MAX_RESOLUTION = 100;\n\n/* Adapted from s2-geometry's S2Cell.getCornerLatLngs */\n/* eslint-disable max-statements */\nfunction getGeoBounds({\n face,\n ij,\n level\n}: {\n face: number;\n ij: [number, number];\n level: number;\n}): Float64Array {\n const offsets = [\n [0, 0],\n [0, 1],\n [1, 1],\n [1, 0],\n [0, 0]\n ];\n\n // The S2 cell edge is curved: http://s2geometry.io/\n // This is more prominent at lower levels\n // resolution is the number of segments to generate per edge.\n // We exponentially reduce resolution as level increases so it doesn't affect perf\n // when there are a large number of cells\n const resolution = Math.max(1, Math.ceil(MAX_RESOLUTION * Math.pow(2, -level)));\n const result = new Float64Array(4 * resolution * 2 + 2);\n let ptIndex = 0;\n let prevLng = 0;\n\n for (let i = 0; i < 4; i++) {\n const offset = offsets[i].slice(0) as [number, number];\n const nextOffset = offsets[i + 1];\n const stepI = (nextOffset[0] - offset[0]) / resolution;\n const stepJ = (nextOffset[1] - offset[1]) / resolution;\n\n for (let j = 0; j < resolution; j++) {\n offset[0] += stepI;\n offset[1] += stepJ;\n // Cell can be represented by coordinates IJ, ST, UV, XYZ\n // http://s2geometry.io/devguide/s2cell_hierarchy#coordinate-systems\n const st = IJToST(ij, level, offset);\n const uv = STToUV(st);\n const xyz = FaceUVToXYZ(face, uv);\n const lngLat = XYZToLngLat(xyz);\n\n // Adjust longitude for Web Mercator projection\n if (Math.abs(lngLat[1]) > 89.999) {\n lngLat[0] = prevLng;\n }\n const deltaLng = lngLat[0] - prevLng;\n lngLat[0] += deltaLng > 180 ? -360 : deltaLng < -180 ? 360 : 0;\n\n result[ptIndex++] = lngLat[0];\n result[ptIndex++] = lngLat[1];\n prevLng = lngLat[0];\n }\n }\n // close the loop\n result[ptIndex++] = result[0];\n result[ptIndex++] = result[1];\n return result;\n}\n/* eslint-enable max-statements */\n\nexport function getS2QuadKey(token: string | number): string {\n if (typeof token === 'string') {\n if (token.indexOf('/') > 0) {\n // is Hilbert quad key\n return token;\n }\n // is S2 token\n token = getIdFromToken(token);\n }\n // is Long id\n return toHilbertQuadkey(token.toString());\n}\n\n/**\n * Get a polygon with corner coordinates for an s2 cell\n * @param {*} cell - This can be an S2 key or token\n * @return {Float64Array} - a simple polygon in flat array format: [lng0, lat0, lng1, lat1, ...]\n * - the polygon is closed, i.e. last coordinate is a copy of the first coordinate\n */\nexport function getS2Polygon(token: string | number): Float64Array {\n const key = getS2QuadKey(token);\n const s2cell = FromHilbertQuadKey(key);\n\n return getGeoBounds(s2cell);\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getS2Polygon} from './s2-utils';\n\nconst defaultProps: DefaultProps<S2LayerProps> = {\n getS2Token: {type: 'accessor', value: (d: any) => d.token}\n};\n\n/** All properties supported by S2Layer. */\nexport type S2LayerProps<DataT = unknown> = _S2LayerProps<DataT> & GeoCellLayerProps<DataT>;\n\n/** Properties added by S2Layer. */\ntype _S2LayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `token` property of data object.\n */\n getS2Token?: AccessorFunction<DataT, string>;\n};\n\n/** Render filled and/or stroked polygons based on the [S2](http://s2geometry.io/) geospatial indexing system. */\nexport default class S2Layer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_S2LayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'S2Layer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getS2Token} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => getS2Polygon(getS2Token(x, objectInfo))\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nexport function quadkeyToWorldBounds(quadkey: string, coverage: number): [number[], number[]] {\n let x = 0;\n let y = 0;\n let mask = 1 << quadkey.length;\n const scale = mask / TILE_SIZE;\n\n for (let i = 0; i < quadkey.length; i++) {\n mask >>= 1;\n const q = parseInt(quadkey[i]);\n if (q % 2) x |= mask;\n if (q > 1) y |= mask;\n }\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + coverage) / scale, TILE_SIZE - (y + coverage) / scale]\n ];\n}\n\nexport function getQuadkeyPolygon(quadkey: string, coverage = 1): number[] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey, coverage);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getQuadkeyPolygon} from './quadkey-utils';\n\nconst defaultProps: DefaultProps<QuadkeyLayerProps> = {\n getQuadkey: {type: 'accessor', value: (d: any) => d.quadkey}\n};\n\n/** All properties supported by QuadkeyLayer. */\nexport type QuadkeyLayerProps<DataT = unknown> = _QuadkeyLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by QuadkeyLayer. */\ntype _QuadkeyLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `quadkey` property of data object.\n */\n getQuadkey?: AccessorFunction<DataT, string>;\n};\n\n/** Render filled and/or stroked polygons based on the [Quadkey](https://towardsdatascience.com/geospatial-indexing-with-quadkeys-d933dff01496) geospatial indexing system. */\nexport default class QuadkeyLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_QuadkeyLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'QuadkeyLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, extruded, getQuadkey} = this.props;\n // To avoid z-fighting reduce polygon footprint when extruding\n const coverage = extruded ? 0.99 : 1;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo), coverage),\n updateTriggers: {getPolygon: coverage}\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\n\nimport type {TileLoadProps, ZRange} from '../tileset-2d/index';\nimport {\n Tileset2D,\n Tile2DHeader,\n RefinementStrategy,\n STRATEGY_DEFAULT,\n Tileset2DProps\n} from '../tileset-2d/index';\nimport {urlType, URLTemplate, getURLFromTemplate} from '../tileset-2d/index';\nimport {Matrix4} from '@math.gl/core';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equal,\n renderSubLayers: {type: 'function', value: (props: any) => new GeoJsonLayer(props)},\n getTileData: {type: 'function', optional: true, value: null},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null},\n onTileLoad: {type: 'function', value: tile => {}},\n onTileUnload: {type: 'function', value: tile => {}},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err)},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n debounceTime: 0,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT = unknown> = CompositeLayerProps & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n data: URLTemplate;\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass?: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile?) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * Queue tile requests until no new tiles have been requested for at least `debounceTime` milliseconds.\n *\n * @default 0\n */\n debounceTime?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TileLayerPickingInfo<\n DataT = any,\n SubLayerPickingInfo = PickingInfo\n> = SubLayerPickingInfo & {\n /** The picked tile */\n tile?: Tile2DHeader<DataT>;\n /** the tile that emitted the picking event */\n sourceTile: Tile2DHeader<DataT>;\n /** a layer created by props.renderSubLayer() that emitted the picking event */\n sourceTileSubLayer: Layer;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps: DefaultProps = defaultProps;\n static layerName = 'TileLayer';\n\n state!: {\n tileset: Tileset2D | null;\n isLoaded: boolean;\n frameNumber?: number;\n };\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n return Boolean(\n this.state?.tileset?.selectedTiles?.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n )\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters<this>) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n debounceTime,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n debounceTime,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const tileset = this.state.tileset!;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n // This method can only be called when tileset is defined and updated\n onViewportLoad(tileset!.selectedTiles!);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader<DataT>): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader<DataT>) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader<DataT>) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial<LayerProps> | null {\n return null;\n }\n\n getPickingInfo(params: GetPickingInfoParams): TileLayerPickingInfo<DataT> {\n // TileLayer does not directly render anything, sourceLayer cannot be null\n const sourceLayer = params.sourceLayer!;\n const sourceTile: Tile2DHeader<DataT> = (sourceLayer.props as any).tile;\n const info = params.info as TileLayerPickingInfo<DataT>;\n if (info.picked) {\n info.tile = sourceTile;\n }\n info.sourceTile = sourceTile;\n info.sourceTileSubLayer = sourceLayer;\n return info;\n }\n\n protected _updateAutoHighlight(info: TileLayerPickingInfo<DataT>): void {\n info.sourceTileSubLayer.updateAutoHighlight(info);\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset!.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n const {modelMatrix} = this.props;\n return this.state.tileset!.isTileVisible(\n tile,\n cullRect,\n modelMatrix ? new Matrix4(modelMatrix) : null\n );\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport} from '@deck.gl/core';\n\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4, equals, NumericArray} from '@math.gl/core';\n\nimport {Tile2DHeader} from './tile-2d-header';\n\nimport {getTileIndices, tileToBoundingBox, getCullBounds, transformBox} from './utils';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLoadProps} from './types';\nimport {memoize} from './memoize';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nexport type RefinementStrategyFunction = (tiles: Tile2DHeader[]) => void;\nexport type RefinementStrategy =\n | 'never'\n | 'no-overlap'\n | 'best-available'\n | RefinementStrategyFunction;\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\nexport type Tileset2DProps<DataT = any> = {\n /** `getTileData` is called to retrieve the data of each tile. */\n getTileData: (props: TileLoadProps) => Promise<DataT> | DataT;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n /** The max zoom level of the layer's data. @default null */\n maxZoom?: number | null;\n /** The min zoom level of the layer's data. @default 0 */\n minZoom?: number | null;\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n /** The maximum memory used for caching tiles. @default null */\n maxCacheByteSize?: number | null;\n /** How the tile layer refines the visibility of tiles. @default 'best-available' */\n refinementStrategy?: RefinementStrategy;\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n /** The maximum number of concurrent getTileData calls. @default 6 */\n maxRequests?: number;\n /** Queue tile requests until no new tiles have been requested for at least `debounceTime` milliseconds. @default 0 */\n debounceTime?: number;\n /** Changes the zoom level at which the tiles are fetched. Needs to be an integer. @default 0 */\n zoomOffset?: number;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile: Tile2DHeader<DataT>) => void;\n\n // onTileLoad: (tile: Tile2DHeader) => void;\n // onTileUnload: (tile: Tile2DHeader) => void;\n // onTileError: (error: any, tile: Tile2DHeader) => void;\n /** Called when all tiles in the current viewport are loaded. */\n // sonViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n};\n\nexport const DEFAULT_TILESET2D_PROPS: Omit<Required<Tileset2DProps>, 'getTileData'> = {\n extent: null,\n tileSize: 512,\n\n maxZoom: null,\n minZoom: null,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: 'best-available',\n zRange: null,\n maxRequests: 6,\n debounceTime: 0,\n zoomOffset: 0,\n\n // onTileLoad: (tile: Tile2DHeader) => void, // onTileUnload: (tile: Tile2DHeader) => void, // onTileError: (error: any, tile: Tile2DHeader) => void, /** Called when all tiles in the current viewport are loaded. */\n // onViewportLoad: ((tiles: Tile2DHeader<DataT>[]) => void) | null,\n onTileLoad: () => {},\n onTileUnload: () => {},\n onTileError: () => {}\n};\n\n/**\n * Manages loading and purging of tile data. This class caches recently visited tiles\n * and only creates new tiles if they are present.\n */\nexport class Tileset2D {\n protected opts: Required<Tileset2DProps>;\n private _requestScheduler: RequestScheduler;\n private _cache: Map<string, Tile2DHeader>;\n private _dirty: boolean;\n private _tiles: Tile2DHeader[];\n\n private _cacheByteSize: number;\n private _viewport: Viewport | null;\n private _zRange: ZRange | null;\n private _selectedTiles: Tile2DHeader[] | null;\n private _frameNumber: number;\n private _modelMatrix: Matrix4;\n private _modelMatrixInverse: Matrix4;\n\n private _maxZoom?: number;\n private _minZoom?: number;\n\n private onTileLoad: (tile: Tile2DHeader) => void;\n\n /**\n * Takes in a function that returns tile data, a cache size, and a max and a min zoom level.\n * Cache size defaults to 5 * number of tiles in the current viewport\n */\n constructor(opts: Tileset2DProps) {\n this.opts = {...DEFAULT_TILESET2D_PROPS, ...opts};\n this.setOptions(this.opts);\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad?.(tile);\n if (this.opts.maxCacheByteSize !== null) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n throttleRequests: this.opts.maxRequests > 0 || this.opts.debounceTime > 0,\n maxRequests: this.opts.maxRequests,\n debounceTime: this.opts.debounceTime\n });\n\n // Maps tile id in string {z}-{x}-{y} to a Tile object\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n\n // Cache the last processed viewport\n this._viewport = null;\n this._zRange = null;\n this._selectedTiles = null;\n this._frameNumber = 0;\n\n this._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles(): Tile2DHeader[] | null {\n return this._selectedTiles;\n }\n\n get isLoaded(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.some(tile => tile.needsReload);\n }\n\n setOptions(opts: Tileset2DProps): void {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom as number);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom as number);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize(): void {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._selectedTiles = null;\n }\n\n reloadAll(): void {\n for (const id of this._cache.keys()) {\n const tile = this._cache.get(id) as Tile2DHeader;\n if (!this._selectedTiles || !this._selectedTiles.includes(tile)) {\n this._cache.delete(id);\n } else {\n tile.setNeedsReload();\n }\n }\n }\n\n /**\n * Update the cache with the given viewport and model matrix and triggers callback onUpdate.\n */\n update(\n viewport: Viewport,\n {zRange, modelMatrix}: {zRange: ZRange | null; modelMatrix: NumericArray | null} = {\n zRange: null,\n modelMatrix: null\n }\n ): number {\n const modelMatrixAsMatrix4 = modelMatrix ? new Matrix4(modelMatrix) : new Matrix4();\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (\n !this._viewport ||\n !viewport.equals(this._viewport) ||\n !equals(this._zRange, zRange) ||\n isModelMatrixNew\n ) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n this._zRange = zRange;\n const tileIndices = this.getTileIndices({\n viewport,\n maxZoom: this._maxZoom,\n minZoom: this._minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map(index => this._getTile(index, true));\n\n if (this._dirty) {\n // Some new tiles are added\n this._rebuildTree();\n }\n // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles!.map(tile => this._getTile(tile.index, true));\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n // eslint-disable-next-line complexity\n isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number},\n modelMatrix?: Matrix4 | null\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const boundsArr = this._getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n let {bbox} = tile;\n for (const [minX, minY, maxX, maxY] of boundsArr) {\n let overlaps;\n if ('west' in bbox) {\n overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n } else {\n if (modelMatrix && !Matrix4.IDENTITY.equals(modelMatrix)) {\n const [left, top, right, bottom] = transformBox(\n [bbox.left, bbox.top, bbox.right, bbox.bottom],\n modelMatrix\n );\n bbox = {left, top, right, bottom};\n }\n // top/bottom could be swapped depending on the indexing system\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n if (overlaps) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n\n /* Public interface for subclassing */\n\n /** Returns array of tile indices in the current viewport */\n getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | null;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n }): TileIndex[] {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: extent as Bounds | undefined,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns unique string key for a tile index */\n getTileId(index: TileIndex) {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns a zoom level for a tile index */\n getTileZoom(index: TileIndex) {\n return index.z;\n }\n\n /** Returns additional metadata to add to tile, bbox by default */\n getTileMetadata(index: TileIndex): Record<string, any> {\n const {tileSize} = this.opts;\n return {bbox: tileToBoundingBox(this._viewport!, index.x, index.y, index.z, tileSize)};\n }\n\n /** Returns index of the parent tile */\n getParentIndex(index: TileIndex) {\n const x = Math.floor(index.x / 2);\n const y = Math.floor(index.y / 2);\n const z = index.z - 1;\n return {x, y, z};\n }\n\n // Returns true if any tile's visibility changed\n private updateTileStates() {\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n // @ts-expect-error called only when _selectedTiles is already defined\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n private _getCullBounds = memoize(getCullBounds);\n\n private _pruneRequests(): void {\n const {maxRequests = 0} = this.opts;\n\n const abortCandidates: Tile2DHeader[] = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift()!;\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n private _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n if (tile.children) {\n tile.children.length = 0;\n }\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile);\n tile.parent = parent;\n if (parent?.children) {\n parent.children.push(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n private _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ??\n // @ts-expect-error called only when selectedTiles is initialized\n (opts.maxCacheByteSize !== null ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);\n const maxCacheByteSize = opts.maxCacheByteSize ?? Infinity;\n\n const overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [id, tile] of _cache) {\n if (!tile.isVisible && !tile.isSelected) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize !== null ? tile.byteLength : 0;\n _cache.delete(id);\n this.opts.onTileUnload?.(tile);\n }\n if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._rebuildTree();\n this._dirty = true;\n }\n if (this._dirty) {\n // sort by zoom level so that smaller tiles are displayed on top\n this._tiles = Array.from(this._cache.values()).sort((t1, t2) => t1.zoom - t2.zoom);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n private _getTile(index: TileIndex, create: true): Tile2DHeader;\n private _getTile(index: TileIndex, create?: false): Tile2DHeader | undefined;\n private _getTile(index: TileIndex, create?: boolean): Tile2DHeader | undefined {\n const id = this.getTileId(index);\n let tile = this._cache.get(id);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader(index);\n Object.assign(tile, this.getTileMetadata(tile.index));\n Object.assign(tile, {id, zoom: this.getTileZoom(tile.index)});\n needsReload = true;\n this._cache.set(id, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (tile && needsReload) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tile.loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this.onTileLoad,\n onError: this.opts.onTileError\n });\n }\n\n return tile;\n }\n\n _getNearestAncestor(tile: Tile2DHeader): Tile2DHeader | null {\n const {_minZoom = 0} = this;\n\n let index = tile.index;\n while (this.getTileZoom(index) > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this._getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\n/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.zoom - t2.zoom);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n\n if (tile.children && (tile.isVisible || tile.state! & TILE_STATE_VISITED)) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(startTile: Tile2DHeader) {\n let tile: Tile2DHeader | null = startTile;\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state! |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-env browser */\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\nimport type {Layer} from '@deck.gl/core';\n\nexport type TileLoadDataProps<DataT = any> = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise<DataT>;\n onLoad: (tile: Tile2DHeader<DataT>) => void;\n onError: (error: any, tile: Tile2DHeader<DataT>) => void;\n};\n\nexport class Tile2DHeader<DataT = any> {\n index: TileIndex;\n isVisible: boolean;\n isSelected: boolean;\n parent: Tile2DHeader | null;\n children: Tile2DHeader[] | null;\n content: DataT | null;\n state?: number;\n layers?: Layer[] | null;\n\n id!: string; // assigned _always_ with result of `getTileId`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record<string, any>; // _may be_ assigned with result of `getTileMetadata`\n boundingBox!: [min: number[], max: number[]]; // assigned _always_ with bbox from `getTileMetadata`\n\n private _abortController: AbortController | null;\n private _loader: Promise<void> | undefined;\n private _loaderId: number;\n private _isLoaded: boolean;\n private _isCancelled: boolean;\n private _needsReload: boolean;\n private _bbox!: TileBoundingBox;\n\n constructor(index: TileIndex) {\n this.index = index;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loader = undefined;\n this._abortController = null;\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n /** @deprecated use `boundingBox` instead */\n get bbox(): TileBoundingBox {\n return this._bbox;\n }\n\n // TODO - remove in v9\n set bbox(value: TileBoundingBox) {\n // Only set once from `Tileset2D.getTileMetadata`\n if (this._bbox) return;\n\n this._bbox = value;\n if ('west' in value) {\n this.boundingBox = [\n [value.west, value.south],\n [value.east, value.north]\n ];\n } else {\n this.boundingBox = [\n [value.left, value.top],\n [value.right, value.bottom]\n ];\n }\n }\n\n get data(): Promise<DataT | null> | DataT | null {\n return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded(): boolean {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading(): boolean {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload(): boolean {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength(): number {\n const result = this.content ? (this.content as any).byteLength : 0;\n if (!Number.isFinite(result)) {\n // eslint-disable-next-line no-console\n console.error('byteLength not defined in tile data');\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n private async _loadData({\n getData,\n requestScheduler,\n onLoad,\n onError\n }: TileLoadDataProps<DataT>): Promise<void> {\n const {index, id, bbox, userData, zoom} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController();\n const {signal} = this._abortController;\n\n // @ts-expect-error (2345) Argument of type '(tile: any) => 1 | -1' is not assignable ...\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData: DataT | null = null;\n let error;\n try {\n tileData = await getData({index, id, bbox, userData, zoom, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n\n loadData(opts: TileLoadDataProps): Promise<void> {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload(): void {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort(): void {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController?.abort();\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | null,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport} from '@deck.gl/core';\nimport {Matrix4} from '@math.gl/core';\nimport {getOSMTileIndices} from './tile-2d-traversal';\nimport {Bounds, GeoBoundingBox, TileBoundingBox, TileIndex, ZRange} from './types';\n\nconst TILE_SIZE = 512;\nconst DEFAULT_EXTENT: Bounds = [-Infinity, -Infinity, Infinity, Infinity];\n\nexport type URLTemplate = string | string[] | null;\n\nexport const urlType = {\n type: 'object' as const,\n value: null as URLTemplate,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every(url => typeof url === 'string')),\n equal: (value1, value2) => {\n if (value1 === value2) {\n return true;\n }\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return false;\n }\n const len = value1.length;\n if (len !== value2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n};\n\nexport function transformBox(bbox: Bounds, modelMatrix: Matrix4): Bounds {\n const transformedCoords = [\n // top-left\n modelMatrix.transformAsPoint([bbox[0], bbox[1]]),\n // top-right\n modelMatrix.transformAsPoint([bbox[2], bbox[1]]),\n // bottom-left\n modelMatrix.transformAsPoint([bbox[0], bbox[3]]),\n // bottom-right\n modelMatrix.transformAsPoint([bbox[2], bbox[3]])\n ];\n const transformedBox: Bounds = [\n // Minimum x coord\n Math.min(...transformedCoords.map(i => i[0])),\n // Minimum y coord\n Math.min(...transformedCoords.map(i => i[1])),\n // Max x coord\n Math.max(...transformedCoords.map(i => i[0])),\n // Max y coord\n Math.max(...transformedCoords.map(i => i[1]))\n ];\n return transformedBox;\n}\n\nfunction stringHash(s: string): number {\n return Math.abs(s.split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0));\n}\n\nexport function getURLFromTemplate(\n template: URLTemplate,\n tile: {\n index: TileIndex;\n id: string;\n }\n): string | null {\n if (!template || !template.length) {\n return null;\n }\n const {index, id} = tile;\n\n if (Array.isArray(template)) {\n const i = stringHash(id) % template.length;\n template = template[i];\n }\n\n let url = template;\n for (const key of Object.keys(index)) {\n const regex = new RegExp(`{${key}}`, 'g');\n url = url.replace(regex, String(index[key]));\n }\n\n // Back-compatible support for {-y}\n if (Number.isInteger(index.y) && Number.isInteger(index.z)) {\n url = url.replace(/\\{-y\\}/g, String(Math.pow(2, index.z) - index.y - 1));\n }\n return url;\n}\n\n/**\n * gets the bounding box of a viewport\n */\nfunction getBoundingBox(viewport: Viewport, zRange: number[] | null, extent: Bounds): Bounds {\n let bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n bounds = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n bounds = viewport.getBounds();\n }\n if (!viewport.isGeospatial) {\n return [\n // Top corner should not be more then bottom corner in either direction\n Math.max(Math.min(bounds[0], extent[2]), extent[0]),\n Math.max(Math.min(bounds[1], extent[3]), extent[1]),\n // Bottom corner should not be less then top corner in either direction\n Math.min(Math.max(bounds[2], extent[0]), extent[2]),\n Math.min(Math.max(bounds[3], extent[1]), extent[3])\n ];\n }\n return [\n Math.max(bounds[0], extent[0]),\n Math.max(bounds[1], extent[1]),\n Math.min(bounds[2], extent[2]),\n Math.min(bounds[3], extent[3])\n ];\n}\n\n/** Get culling bounds in world space */\nexport function getCullBounds({\n viewport,\n z,\n cullRect\n}: {\n /** Current viewport */\n viewport: Viewport;\n /** Current z range */\n z: ZRange | number | null;\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number};\n}): [number, number, number, number][] {\n const subViewports = viewport.subViewports || [viewport];\n return subViewports.map(v => getCullBoundsInViewport(v, z || 0, cullRect));\n}\n\nfunction getCullBoundsInViewport(\n /** Current viewport */\n viewport: Viewport,\n /** At altitude */\n z: ZRange | number,\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number}\n): [number, number, number, number] {\n if (!Array.isArray(z)) {\n const x = cullRect.x - viewport.x;\n const y = cullRect.y - viewport.y;\n const {width, height} = cullRect;\n\n const unprojectOption = {targetZ: z};\n\n const topLeft = viewport.unproject([x, y], unprojectOption);\n const topRight = viewport.unproject([x + width, y], unprojectOption);\n const bottomLeft = viewport.unproject([x, y + height], unprojectOption);\n const bottomRight = viewport.unproject([x + width, y + height], unprojectOption);\n\n return [\n Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]),\n Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])\n ];\n }\n\n const bounds0 = getCullBoundsInViewport(viewport, z[0], cullRect);\n const bounds1 = getCullBoundsInViewport(viewport, z[1], cullRect);\n\n return [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n}\n\nfunction getIndexingCoords(bbox: Bounds, scale: number, modelMatrixInverse?: Matrix4): Bounds {\n if (modelMatrixInverse) {\n const transformedTileIndex = transformBox(bbox, modelMatrixInverse).map(\n i => (i * scale) / TILE_SIZE\n );\n return transformedTileIndex as Bounds;\n }\n return bbox.map(i => (i * scale) / TILE_SIZE) as Bounds;\n}\n\nfunction getScale(z: number, tileSize: number): number {\n return (Math.pow(2, z) * TILE_SIZE) / tileSize;\n}\n\n// https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2\nexport function osmTile2lngLat(x: number, y: number, z: number): [number, number] {\n const scale = getScale(z, TILE_SIZE);\n const lng = (x / scale) * 360 - 180;\n const n = Math.PI - (2 * Math.PI * y) / scale;\n const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lng, lat];\n}\n\nfunction tile2XY(x: number, y: number, z: number, tileSize: number): [number, number] {\n const scale = getScale(z, tileSize);\n return [(x / scale) * TILE_SIZE, (y / scale) * TILE_SIZE];\n}\nexport function tileToBoundingBox(\n viewport: Viewport,\n x: number,\n y: number,\n z: number,\n tileSize: number = TILE_SIZE\n): TileBoundingBox {\n if (viewport.isGeospatial) {\n const [west, north] = osmTile2lngLat(x, y, z);\n const [east, south] = osmTile2lngLat(x + 1, y + 1, z);\n return {west, north, east, south};\n }\n const [left, top] = tile2XY(x, y, z, tileSize);\n const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);\n return {left, top, right, bottom};\n}\n\nfunction getIdentityTileIndices(\n viewport: Viewport,\n z: number,\n tileSize: number,\n extent: Bounds,\n modelMatrixInverse?: Matrix4\n) {\n const bbox = getBoundingBox(viewport, null, extent);\n const scale = getScale(z, tileSize);\n const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);\n const indices: TileIndex[] = [];\n\n /*\n | TILE | TILE | TILE |\n |(minX) |(maxX)\n */\n for (let x = Math.floor(minX); x < maxX; x++) {\n for (let y = Math.floor(minY); y < maxY; y++) {\n indices.push({x, y, z});\n }\n }\n return indices;\n}\n\n/**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n// eslint-disable-next-line complexity\nexport function getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n extent,\n tileSize = TILE_SIZE,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset = 0\n}: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | null;\n extent?: Bounds;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n}) {\n let z = viewport.isGeospatial\n ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset\n : Math.ceil(viewport.zoom) + zoomOffset;\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n if (!extent) {\n return [];\n }\n z = minZoom;\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n let transformedExtent = extent;\n if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {\n transformedExtent = transformBox(extent, modelMatrix);\n }\n return viewport.isGeospatial\n ? getOSMTileIndices(viewport, z, zRange, extent)\n : getIdentityTileIndices(\n viewport,\n z,\n tileSize,\n transformedExtent || DEFAULT_EXTENT,\n modelMatrixInverse\n );\n}\n\n/**\n * Returns true if s is a valid URL template\n */\nexport function isURLTemplate(s: string): boolean {\n return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);\n}\n\nexport function isGeoBoundingBox(v: any): v is GeoBoundingBox {\n return (\n Number.isFinite(v.west) &&\n Number.isFinite(v.north) &&\n Number.isFinite(v.east) &&\n Number.isFinite(v.south)\n );\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// deck.gl, MIT license\n// @note - this is a duplicate of the deck.gl core export (because Tileset2D should be deck.gl independent)\n\n/**\n * Speed up consecutive function calls by caching the result of calls with identical input\n * https://en.wikipedia.org/wiki/Memoization\n * @param compute - the function to be memoized\n */\nexport function memoize<In, Out>(compute: (args: In) => Out): (args: In) => Out {\n let cachedArgs: any = {};\n let cachedResult: Out;\n\n return (args: In) => {\n for (const key in args) {\n if (!isEqual(args[key], cachedArgs[key])) {\n cachedResult = compute(args);\n cachedArgs = args;\n break;\n }\n }\n return cachedResult;\n };\n}\n\nfunction isEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (Array.isArray(a)) {\n // Special treatment for arrays: compare 1-level deep\n // This is to support equality of matrix/coordinate props\n const len = a.length;\n if (!b || b.length !== len) {\n return false;\n }\n\n for (let i = 0; i < len; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NumericArray} from '@math.gl/core';\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {PathLayer, PathLayerProps} from '@deck.gl/layers';\n\nimport {tripsUniforms, TripsProps} from './trips-layer-uniforms';\n\nconst defaultProps: DefaultProps<TripsLayerProps> = {\n fadeTrail: true,\n trailLength: {type: 'number', value: 120, min: 0},\n currentTime: {type: 'number', value: 0, min: 0},\n getTimestamps: {type: 'accessor', value: (d: any) => d.timestamps}\n};\n\n/** All properties supported by TripsLayer. */\nexport type TripsLayerProps<DataT = unknown> = _TripsLayerProps<DataT> & PathLayerProps<DataT>;\n\n/** Properties added by TripsLayer. */\ntype _TripsLayerProps<DataT = unknown> = {\n /**\n * Whether or not the path fades out.\n * @default true\n */\n fadeTrail?: boolean;\n /**\n * Trail length.\n * @default 120\n */\n trailLength?: number;\n /**\n * The current time of the frame.\n * @default 0\n */\n currentTime?: number;\n /**\n * Timestamp accessor.\n */\n getTimestamps?: AccessorFunction<DataT, NumericArray>;\n};\n\n/** Render animated paths that represent vehicle trips. */\nexport default class TripsLayer<DataT = any, ExtraProps extends {} = {}> extends PathLayer<\n DataT,\n Required<_TripsLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'TripsLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n shaders.inject = {\n 'vs:#decl': `\\\nin float instanceTimestamps;\nin float instanceNextTimestamps;\nout float vTime;\n`,\n // Timestamp of the vertex\n 'vs:#main-end': `\\\nvTime = instanceTimestamps + (instanceNextTimestamps - instanceTimestamps) * vPathPosition.y / vPathLength;\n`,\n 'fs:#decl': `\\\nin float vTime;\n`,\n // Drop the segments outside of the time window\n 'fs:#main-start': `\\\nif(vTime > trips.currentTime || (trips.fadeTrail && (vTime < trips.currentTime - trips.trailLength))) {\n discard;\n}\n`,\n // Fade the color (currentTime - 100%, end of trail - 0%)\n 'fs:DECKGL_FILTER_COLOR': `\\\nif(trips.fadeTrail) {\n color.a *= 1.0 - (trips.currentTime - vTime) / trips.trailLength;\n}\n`\n };\n shaders.modules = [...shaders.modules, tripsUniforms];\n return shaders;\n }\n\n initializeState() {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n attributeManager!.addInstanced({\n timestamps: {\n size: 1,\n accessor: 'getTimestamps',\n shaderAttributes: {\n instanceTimestamps: {\n vertexOffset: 0\n },\n instanceNextTimestamps: {\n vertexOffset: 1\n }\n }\n }\n });\n }\n\n draw(params) {\n const {fadeTrail, trailLength, currentTime} = this.props;\n const tripsProps: TripsProps = {fadeTrail, trailLength, currentTime};\n\n const model = this.state.model!;\n model.shaderInputs.setProps({trips: tripsProps});\n super.draw(params);\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ShaderModule} from '@luma.gl/shadertools';\n\nconst uniformBlock = `\\\nuniform tripsUniforms {\n bool fadeTrail;\n float trailLength;\n float currentTime;\n} trips;\n`;\n\nexport type TripsProps = {\n fadeTrail: boolean;\n trailLength: number;\n currentTime: number;\n};\n\nexport const tripsUniforms = {\n name: 'trips',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n fadeTrail: 'f32',\n trailLength: 'f32',\n currentTime: 'f32'\n }\n} as const satisfies ShaderModule<TripsProps>;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {cellsToMultiPolygon, H3IndexInput} from 'h3-js';\n\nimport {AccessorFunction, createIterable, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {default as H3HexagonLayer} from './h3-hexagon-layer';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {normalizeLongitudes} from './h3-utils';\n\nconst defaultProps: DefaultProps<H3ClusterLayerProps> = {\n getHexagons: {type: 'accessor', value: (d: any) => d.hexagons}\n};\n\n/** All properties supported by H3ClusterLayer. */\nexport type H3ClusterLayerProps<DataT = unknown> = _H3ClusterLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by H3ClusterLayer. */\ntype _H3ClusterLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the hexagon identifiers.\n *\n * By default, it reads `hexagons` property of data object.\n */\n getHexagons?: AccessorFunction<DataT, H3IndexInput[]>;\n};\n\nexport default class H3ClusterLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_H3ClusterLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'H3ClusterLayer';\n static defaultProps = defaultProps;\n\n state!: {\n polygons: {polygon: number[][][]}[];\n };\n\n initializeState(): void {\n H3HexagonLayer._checkH3Lib();\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagons)\n ) {\n const {data, getHexagons} = props;\n const polygons: {polygon: number[][][]}[] = [];\n\n const {iterable, objectInfo} = createIterable(data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexagons = getHexagons(object, objectInfo);\n const multiPolygon = cellsToMultiPolygon(hexagons, true);\n\n for (const polygon of multiPolygon) {\n // Normalize polygons to prevent wrapping over the anti-meridian\n for (const ring of polygon) {\n normalizeLongitudes(ring);\n }\n polygons.push(this.getSubLayerRow({polygon}, object, objectInfo.index));\n }\n }\n\n this.setState({polygons});\n }\n }\n\n indexToBounds(): Partial<GeoCellLayer['props']> {\n const {getElevation, getFillColor, getLineColor, getLineWidth} = this.props;\n\n return {\n data: this.state.polygons,\n getPolygon: d => d.polygon,\n\n getElevation: this.getSubLayerAccessor(getElevation),\n getFillColor: this.getSubLayerAccessor(getFillColor),\n getLineColor: this.getSubLayerAccessor(getLineColor),\n getLineWidth: this.getSubLayerAccessor(getLineWidth)\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n getResolution,\n cellToLatLng,\n latLngToCell,\n isPentagon,\n gridDistance,\n getHexagonEdgeLengthAvg,\n H3Index\n} from 'h3-js';\nimport {\n AccessorFunction,\n CompositeLayer,\n createIterable,\n Layer,\n LayersList,\n UpdateParameters,\n WebMercatorViewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {ColumnLayer, PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\nimport {flattenPolygon, getHexagonCentroid, h3ToPolygon} from './h3-utils';\n\n// There is a cost to updating the instanced geometries when using highPrecision: false\n// This constant defines the distance between two hexagons that leads to \"significant\n// distortion.\" Smaller value makes the column layer more sensitive to viewport change.\nconst UPDATE_THRESHOLD_KM = 10;\n\nfunction mergeTriggers(getHexagon, coverage) {\n let trigger;\n if (getHexagon === undefined || getHexagon === null) {\n trigger = coverage;\n } else if (typeof getHexagon === 'object') {\n trigger = {...getHexagon, coverage};\n } else {\n trigger = {getHexagon, coverage};\n }\n return trigger;\n}\n\nconst defaultProps: DefaultProps<H3HexagonLayerProps> = {\n ...PolygonLayer.defaultProps,\n highPrecision: 'auto',\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n centerHexagon: null,\n getHexagon: {type: 'accessor', value: (x: any) => x.hexagon},\n extruded: true\n};\n\n/** All properties supported by H3HexagonLayer */\nexport type H3HexagonLayerProps<DataT = unknown> = _H3HexagonLayerProps<DataT> &\n PolygonLayerProps<DataT>;\n\n/** Props added by the H3HexagonLayer */\ntype _H3HexagonLayerProps<DataT> = {\n /**\n * Whether or not draw hexagons with high precision.\n * @default 'auto'\n */\n highPrecision?: boolean | 'auto';\n /**\n * Coverage of hexagon in cell.\n * @default 1\n */\n coverage?: number;\n /**\n * Center hexagon that best represents the shape of the set. If not specified, the hexagon closest to the center of the viewport is used.\n */\n centerHexagon?: H3Index | null;\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `hexagon` property of data object.\n */\n getHexagon?: AccessorFunction<DataT, string>;\n /**\n * Whether to extrude polygons.\n * @default true\n */\n extruded?: boolean;\n};\n\n/**\n * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.\n */\nexport default class H3HexagonLayer<\n DataT = any,\n ExtraPropsT extends {} = {}\n> extends CompositeLayer<ExtraPropsT & Required<H3HexagonLayerProps<DataT>>> {\n static defaultProps = defaultProps;\n static layerName = 'H3HexagonLayer';\n\n // See `main/bundle.ts`\n static _checkH3Lib = () => {};\n\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n this.state = {\n edgeLengthKM: 0,\n resolution: -1\n };\n }\n\n state!: {\n centerHex?: H3Index;\n edgeLengthKM: number;\n hasMultipleRes?: boolean;\n hasPentagon?: boolean;\n resolution: number;\n vertices?: number[][];\n };\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return this._shouldUseHighPrecision()\n ? changeFlags.propsOrDataChanged\n : changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n props.highPrecision !== true &&\n (changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))\n ) {\n const dataProps = this._calculateH3DataProps();\n this.setState(dataProps);\n }\n\n this._updateVertices(this.context.viewport as WebMercatorViewport);\n }\n\n private _calculateH3DataProps() {\n let resolution = -1;\n let hasPentagon = false;\n let hasMultipleRes = false;\n\n const {iterable, objectInfo} = createIterable(this.props.data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexId = this.props.getHexagon(object, objectInfo);\n // Take the resolution of the first hex\n const hexResolution = getResolution(hexId);\n if (resolution < 0) {\n resolution = hexResolution;\n if (!this.props.highPrecision) break;\n } else if (resolution !== hexResolution) {\n hasMultipleRes = true;\n break;\n }\n if (isPentagon(hexId)) {\n hasPentagon = true;\n break;\n }\n }\n\n return {\n resolution,\n edgeLengthKM: resolution >= 0 ? getHexagonEdgeLengthAvg(resolution, 'km') : 0,\n hasMultipleRes,\n hasPentagon\n };\n }\n\n private _shouldUseHighPrecision(): boolean {\n if (this.props.highPrecision === 'auto') {\n const {resolution, hasPentagon, hasMultipleRes} = this.state;\n const {viewport} = this.context;\n return (\n Boolean(viewport?.resolution) ||\n hasMultipleRes ||\n hasPentagon ||\n (resolution >= 0 && resolution <= 5)\n );\n }\n\n return this.props.highPrecision;\n }\n\n private _updateVertices(viewport: WebMercatorViewport): void {\n if (this._shouldUseHighPrecision()) {\n return;\n }\n const {resolution, edgeLengthKM, centerHex} = this.state;\n if (resolution < 0) {\n return;\n }\n const hex =\n this.props.centerHexagon || latLngToCell(viewport.latitude, viewport.longitude, resolution);\n if (centerHex === hex) {\n return;\n }\n if (centerHex) {\n try {\n const distance = gridDistance(centerHex, hex);\n if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {\n return;\n }\n } catch {\n // gridDistance throws if the distance could not be computed\n // due to the two indexes very far apart or on opposite sides of a pentagon.\n }\n }\n\n const {unitsPerMeter} = viewport.distanceScales;\n\n let vertices = h3ToPolygon(hex);\n const [centerLat, centerLng] = cellToLatLng(hex);\n\n const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);\n vertices = vertices.map(p => {\n const worldPosition = viewport.projectFlat(p);\n return [\n (worldPosition[0] - centerX) / unitsPerMeter[0],\n (worldPosition[1] - centerY) / unitsPerMeter[1]\n ];\n });\n\n this.setState({centerHex: hex, vertices});\n }\n\n renderLayers(): Layer | null | LayersList {\n return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();\n }\n\n private _getForwardProps() {\n const {\n elevationScale,\n material,\n coverage,\n extruded,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n getFillColor,\n getElevation,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers\n } = this.props;\n\n return {\n elevationScale,\n extruded,\n coverage,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n material,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers: {\n getFillColor: updateTriggers.getFillColor,\n getElevation: updateTriggers.getElevation,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n } as {\n getFillColor: any;\n getElevation: any;\n getLineColor: any;\n getLineWidth: any;\n getPolygon?: any;\n getPosition?: any;\n }\n };\n }\n\n private _renderPolygonLayer(): PolygonLayer {\n const {data, getHexagon, updateTriggers, coverage} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell-hifi',\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (object, objectInfo) => {\n const hexagonId = getHexagon(object, objectInfo);\n return flattenPolygon(h3ToPolygon(hexagonId, coverage));\n }\n }\n );\n }\n\n private _renderColumnLayer(): ColumnLayer {\n const {data, getHexagon, updateTriggers} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell',\n flatShading: true,\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n diskResolution: 6, // generate an extruded hexagon as the base geometry\n radius: 1,\n vertices: this.state.vertices,\n getPosition: getHexagonCentroid.bind(null, getHexagon)\n }\n );\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Geometry} from '@luma.gl/engine';\n\nimport {\n Accessor,\n Color,\n CompositeLayer,\n CompositeLayerProps,\n COORDINATE_SYSTEM,\n FilterContext,\n GetPickingInfoParams,\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n Viewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {PointCloudLayer} from '@deck.gl/layers';\nimport {ScenegraphLayer} from '@deck.gl/mesh-layers';\nimport {default as MeshLayer} from '../mesh-layer/mesh-layer';\n\nimport {load} from '@loaders.gl/core';\nimport {MeshAttributes} from '@loaders.gl/schema';\nimport {Tileset3D, Tile3D, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Tiles3DLoader} from '@loaders.gl/3d-tiles';\n\nconst SINGLE_DATA = [0];\n\nconst defaultProps: DefaultProps<Tile3DLayerProps> = {\n getPointColor: {type: 'accessor', value: [0, 0, 0, 255]},\n pointSize: 1.0,\n\n // Disable async data loading (handling it in _loadTileSet)\n data: '',\n loader: Tiles3DLoader,\n\n onTilesetLoad: {type: 'function', value: tileset3d => {}},\n onTileLoad: {type: 'function', value: tileHeader => {}},\n onTileUnload: {type: 'function', value: tileHeader => {}},\n onTileError: {type: 'function', value: (tile, message, url) => {}},\n _getMeshColor: {type: 'function', value: tileHeader => [255, 255, 255]}\n};\n\n/** All properties supported by Tile3DLayer */\nexport type Tile3DLayerProps<DataT = unknown> = _Tile3DLayerProps<DataT> & CompositeLayerProps;\n\n/** Props added by the Tile3DLayer */\ntype _Tile3DLayerProps<DataT> = {\n data: string;\n /** Color Accessor for point clouds. **/\n getPointColor?: Accessor<DataT, Color>;\n\n /** Global radius of all points in pixels. **/\n pointSize?: number;\n\n /** A loader which is used to decode the fetched tiles.\n * @deprecated Use `loaders` instead\n */\n loader?: typeof Tiles3DLoader;\n\n /** Called when Tileset JSON file is loaded. **/\n onTilesetLoad?: (tile: Tileset3D) => void;\n\n /** Called when a tile in the tileset hierarchy is loaded. **/\n onTileLoad?: (tile: Tile3D) => void;\n\n /** Called when a tile is unloaded. **/\n onTileUnload?: (tile: Tile3D) => void;\n\n /** Called when a tile fails to load. **/\n onTileError?: (tile: Tile3D, url: string, message: string) => void;\n\n /** (Experimental) Accessor to change color of mesh based on properties. **/\n _getMeshColor?: (tile: Tile3D) => Color;\n};\n\n/** Render 3d tiles data formatted according to the [3D Tiles Specification](https://www.opengeospatial.org/standards/3DTiles) and [`ESRI I3S`](https://github.com/Esri/i3s-spec) */\nexport default class Tile3DLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_Tile3DLayerProps<DataT>>\n> {\n static defaultProps = defaultProps;\n static layerName = 'Tile3DLayer';\n\n state!: {\n activeViewports: {};\n frameNumber?: number;\n lastUpdatedViewports: {[viewportId: string]: Viewport} | null;\n layerMap: {[layerId: string]: any};\n tileset3d: Tileset3D | null;\n };\n\n initializeState() {\n if ('onTileLoadFail' in this.props) {\n log.removed('onTileLoadFail', 'onTileError')();\n }\n // prop verification\n this.state = {\n layerMap: {},\n tileset3d: null,\n activeViewports: {},\n lastUpdatedViewports: null\n };\n }\n\n get isLoaded(): boolean {\n return Boolean(this.state?.tileset3d?.isLoaded() && super.isLoaded);\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, oldProps, changeFlags}: UpdateParameters<this>): void {\n if (props.data && props.data !== oldProps.data) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadTileset(props.data);\n }\n\n if (changeFlags.viewportChanged) {\n const {activeViewports} = this.state;\n const viewportsNumber = Object.keys(activeViewports).length;\n if (viewportsNumber) {\n this._updateTileset(activeViewports);\n this.state.lastUpdatedViewports = activeViewports;\n this.state.activeViewports = {};\n }\n }\n if (changeFlags.propsChanged) {\n const {layerMap} = this.state;\n for (const key in layerMap) {\n layerMap[key].needsUpdate = true;\n }\n }\n }\n\n activateViewport(viewport: Viewport): void {\n const {activeViewports, lastUpdatedViewports} = this.state;\n this.internalState!.viewport = viewport;\n\n activeViewports[viewport.id] = viewport;\n const lastViewport = lastUpdatedViewports?.[viewport.id];\n if (!lastViewport || !viewport.equals(lastViewport)) {\n this.setChangeFlags({viewportChanged: true});\n this.setNeedsUpdate();\n }\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams) {\n const sourceTile = sourceLayer && (sourceLayer.props as any).tile;\n if (info.picked) {\n info.object = sourceTile;\n }\n (info as any).sourceTile = sourceTile;\n\n return info;\n }\n\n filterSubLayer({layer, viewport}: FilterContext): boolean {\n // All sublayers will have a tile prop\n const {tile} = layer.props as unknown as {tile: Tile3D};\n const {id: viewportId} = viewport;\n return tile.selected && tile.viewportIds.includes(viewportId);\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const sourceTile = (info as any).sourceTile;\n const layerCache = this.state.layerMap[sourceTile?.id];\n if (layerCache && layerCache.layer) {\n layerCache.layer.updateAutoHighlight(info);\n }\n }\n\n private async _loadTileset(tilesetUrl) {\n const {loadOptions = {}} = this.props;\n\n // TODO: deprecate `loader` in v9.0\n // @ts-ignore\n const loaders = this.props.loader || this.props.loaders;\n const loader = Array.isArray(loaders) ? loaders[0] : loaders;\n\n const options = {loadOptions: {...loadOptions}};\n let actualTilesetUrl = tilesetUrl;\n if (loader.preload) {\n const preloadOptions = await loader.preload(tilesetUrl, loadOptions);\n if (preloadOptions.url) {\n actualTilesetUrl = preloadOptions.url;\n }\n\n if (preloadOptions.headers) {\n options.loadOptions.fetch = {\n ...options.loadOptions.fetch,\n headers: preloadOptions.headers\n };\n }\n Object.assign(options, preloadOptions);\n }\n const tilesetJson = await load(actualTilesetUrl, loader, options.loadOptions);\n\n const tileset3d = new Tileset3D(tilesetJson, {\n onTileLoad: this._onTileLoad.bind(this),\n onTileUnload: this._onTileUnload.bind(this),\n onTileError: this.props.onTileError,\n ...options\n });\n\n this.setState({\n tileset3d,\n layerMap: {}\n });\n\n this._updateTileset(this.state.activeViewports);\n this.props.onTilesetLoad(tileset3d);\n }\n\n private _onTileLoad(tileHeader: Tile3D): void {\n const {lastUpdatedViewports} = this.state;\n this.props.onTileLoad(tileHeader);\n this._updateTileset(lastUpdatedViewports);\n this.setNeedsUpdate();\n }\n\n private _onTileUnload(tileHeader: Tile3D): void {\n // Was cleaned up from tileset cache. We no longer need to track it.\n delete this.state.layerMap[tileHeader.id];\n this.props.onTileUnload(tileHeader);\n }\n\n private _updateTileset(viewports: {[viewportId: string]: Viewport} | null): void {\n if (!viewports) {\n return;\n }\n const {tileset3d} = this.state;\n const {timeline} = this.context;\n const viewportsNumber = Object.keys(viewports).length;\n if (!timeline || !viewportsNumber || !tileset3d) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tileset3d.selectTiles(Object.values(viewports)).then(frameNumber => {\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n if (tilesetChanged) {\n this.setState({frameNumber});\n }\n });\n }\n\n private _getSubLayer(\n tileHeader: Tile3D,\n oldLayer?: Layer\n ): MeshLayer<DataT> | PointCloudLayer<DataT> | ScenegraphLayer<DataT> | null {\n if (!tileHeader.content) {\n return null;\n }\n\n switch (tileHeader.type as TILE_TYPE) {\n case TILE_TYPE.POINTCLOUD:\n return this._makePointCloudLayer(tileHeader, oldLayer as PointCloudLayer<DataT>);\n case TILE_TYPE.SCENEGRAPH:\n return this._make3DModelLayer(tileHeader);\n case TILE_TYPE.MESH:\n return this._makeSimpleMeshLayer(tileHeader, oldLayer as MeshLayer<DataT>);\n default:\n throw new Error(`Tile3DLayer: Failed to render layer of type ${tileHeader.content.type}`);\n }\n }\n\n private _makePointCloudLayer(\n tileHeader: Tile3D,\n oldLayer?: PointCloudLayer<DataT>\n ): PointCloudLayer<DataT> | null {\n const {attributes, pointCount, constantRGBA, cartographicOrigin, modelMatrix} =\n tileHeader.content;\n const {positions, normals, colors} = attributes;\n\n if (!positions) {\n return null;\n }\n const data = (oldLayer && oldLayer.props.data) || {\n header: {\n vertexCount: pointCount\n },\n attributes: {\n POSITION: positions,\n NORMAL: normals,\n COLOR_0: colors\n }\n };\n\n const {pointSize, getPointColor} = this.props;\n const SubLayerClass = this.getSubLayerClass('pointcloud', PointCloudLayer);\n return new SubLayerClass(\n {\n pointSize\n },\n this.getSubLayerProps({\n id: 'pointcloud'\n }),\n {\n id: `${this.id}-pointcloud-${tileHeader.id}`,\n tile: tileHeader,\n data,\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n coordinateOrigin: cartographicOrigin,\n modelMatrix,\n getColor: constantRGBA || getPointColor,\n _offset: 0\n }\n );\n }\n\n private _make3DModelLayer(tileHeader: Tile3D): ScenegraphLayer<DataT> {\n const {gltf, instances, cartographicOrigin, modelMatrix} = tileHeader.content;\n\n const SubLayerClass = this.getSubLayerClass('scenegraph', ScenegraphLayer);\n\n return new SubLayerClass(\n {\n _lighting: 'pbr'\n },\n this.getSubLayerProps({\n id: 'scenegraph'\n }),\n {\n id: `${this.id}-scenegraph-${tileHeader.id}`,\n tile: tileHeader,\n data: instances || SINGLE_DATA,\n scenegraph: gltf,\n\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n coordinateOrigin: cartographicOrigin,\n modelMatrix,\n getTransformMatrix: instance => instance.modelMatrix,\n getPosition: [0, 0, 0],\n _offset: 0\n }\n );\n }\n\n private _makeSimpleMeshLayer(tileHeader: Tile3D, oldLayer?: MeshLayer<DataT>): MeshLayer<DataT> {\n const content = tileHeader.content;\n const {\n attributes,\n indices,\n modelMatrix,\n cartographicOrigin,\n coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS,\n material,\n featureIds\n } = content;\n const {_getMeshColor} = this.props;\n\n const geometry =\n (oldLayer && oldLayer.props.mesh) ||\n new Geometry({\n topology: 'triangle-list',\n attributes: getMeshGeometry(attributes),\n indices\n });\n\n const SubLayerClass = this.getSubLayerClass('mesh', MeshLayer);\n\n return new SubLayerClass(\n this.getSubLayerProps({\n id: 'mesh'\n }),\n {\n id: `${this.id}-mesh-${tileHeader.id}`,\n tile: tileHeader,\n mesh: geometry,\n data: SINGLE_DATA,\n getColor: _getMeshColor(tileHeader),\n pbrMaterial: material,\n modelMatrix,\n coordinateOrigin: cartographicOrigin,\n coordinateSystem,\n featureIds,\n _offset: 0\n }\n );\n }\n\n renderLayers(): Layer | null | LayersList {\n const {tileset3d, layerMap} = this.state;\n if (!tileset3d) {\n return null;\n }\n\n // loaders.gl doesn't provide a type for tileset3d.tiles\n return (tileset3d.tiles as Tile3D[])\n .map(tile => {\n const layerCache = (layerMap[tile.id] = layerMap[tile.id] || {tile});\n let {layer} = layerCache;\n if (tile.selected) {\n // render selected tiles\n if (!layer) {\n // create layer\n layer = this._getSubLayer(tile);\n } else if (layerCache.needsUpdate) {\n // props have changed, rerender layer\n layer = this._getSubLayer(tile, layer);\n layerCache.needsUpdate = false;\n }\n }\n layerCache.layer = layer;\n return layer;\n })\n .filter(Boolean);\n }\n}\n\nfunction getMeshGeometry(contentAttributes: MeshAttributes): MeshAttributes {\n const attributes: MeshAttributes = {};\n attributes.positions = {\n ...contentAttributes.positions,\n value: new Float32Array(contentAttributes.positions.value)\n };\n if (contentAttributes.normals) {\n attributes.normals = contentAttributes.normals;\n }\n if (contentAttributes.texCoords) {\n attributes.texCoords = contentAttributes.texCoords;\n }\n if (contentAttributes.colors) {\n attributes.colors = contentAttributes.colors;\n }\n if (contentAttributes.uvRegions) {\n attributes.uvRegions = contentAttributes.uvRegions;\n }\n return attributes;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NumericArray} from '@math.gl/core';\nimport {parsePBRMaterial, ParsedPBRMaterial} from '@luma.gl/gltf';\nimport {pbrMaterial} from '@luma.gl/shadertools';\nimport {Model} from '@luma.gl/engine';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core';\nimport {SimpleMeshLayer, SimpleMeshLayerProps} from '@deck.gl/mesh-layers';\n\nimport {MeshProps, meshUniforms} from './mesh-layer-uniforms';\nimport vs from './mesh-layer-vertex.glsl';\nimport fs from './mesh-layer-fragment.glsl';\n\nexport type Mesh = {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n};\n\nfunction validateGeometryAttributes(attributes: MeshAttributes) {\n const positionAttribute = attributes.positions || attributes.POSITION;\n const vertexCount = positionAttribute.value.length / positionAttribute.size;\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {\n size: 4,\n value: new Uint8Array(vertexCount * 4).fill(255),\n normalized: true\n };\n }\n}\n\nconst defaultProps: DefaultProps<MeshLayerProps> = {\n pbrMaterial: {type: 'object', value: null},\n featureIds: {type: 'array', value: null, optional: true}\n};\n\n/** All properties supported by MeshLayer. */\nexport type MeshLayerProps<DataT = unknown> = _MeshLayerProps & SimpleMeshLayerProps<DataT>;\n\n/** Properties added by MeshLayer. */\ntype _MeshLayerProps = {\n /**\n * PBR material object. _lighting must be pbr for this to work\n */\n pbrMaterial?: any; // TODO add type when converting Tile3DLayer\n\n /**\n * List of feature ids.\n */\n featureIds?: NumericArray | null;\n};\n\nexport default class MeshLayer<DataT = any, ExtraProps extends {} = {}> extends SimpleMeshLayer<\n DataT,\n Required<_MeshLayerProps> & ExtraProps\n> {\n static layerName = 'MeshLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n const modules = shaders.modules;\n modules.push(pbrMaterial, meshUniforms);\n return {...shaders, vs, fs};\n }\n\n initializeState() {\n const {featureIds} = this.props;\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n if (featureIds) {\n // attributeManager is always defined in a primitive layer\n attributeManager!.add({\n featureIdsPickingColors: {\n type: 'uint8',\n size: 3,\n noAlloc: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateFeatureIdsPickingColors\n }\n });\n }\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {props, oldProps} = params;\n if (props.pbrMaterial !== oldProps.pbrMaterial) {\n this.updatePbrMaterialUniforms(props.pbrMaterial);\n }\n }\n\n draw(opts) {\n const {featureIds} = this.props;\n const {model} = this.state;\n if (!model) {\n return;\n }\n const meshProps: MeshProps = {\n pickFeatureIds: Boolean(featureIds)\n };\n const pbrProjectionProps = {\n camera: this.context.viewport.cameraPosition as [number, number, number]\n };\n model.shaderInputs.setProps({\n pbrProjection: pbrProjectionProps,\n mesh: meshProps\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id} = this.props;\n const parsedPBRMaterial = this.parseMaterial(this.props.pbrMaterial, mesh);\n // Keep material to explicitly remove textures\n this.setState({parsedPBRMaterial});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.device, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n bufferLayout: this.getAttributeManager()!.getBufferLayouts(),\n defines: {\n ...shaders.defines,\n ...parsedPBRMaterial?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions ? 1 : 0\n },\n parameters: parsedPBRMaterial?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(material) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const parsedPBRMaterial = this.parseMaterial(material, mesh as Mesh);\n // Keep material to explicitly remove textures\n this.setState({parsedPBRMaterial});\n\n const {pbr_baseColorSampler} = parsedPBRMaterial.bindings;\n const {emptyTexture} = this.state;\n const simpleMeshProps = {\n sampler: pbr_baseColorSampler || emptyTexture,\n hasTexture: Boolean(pbr_baseColorSampler)\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {camera, ...pbrMaterialProps} = {\n ...parsedPBRMaterial.bindings,\n ...parsedPBRMaterial.uniforms\n };\n model.shaderInputs.setProps({simpleMesh: simpleMeshProps, pbrMaterial: pbrMaterialProps});\n }\n }\n\n parseMaterial(material, mesh: Mesh): ParsedPBRMaterial {\n const unlit = Boolean(\n material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture\n );\n\n return parsePBRMaterial(\n this.context.device,\n {unlit, ...material},\n {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n {\n pbrDebug: false,\n lights: true,\n useTangents: false\n }\n );\n }\n\n calculateFeatureIdsPickingColors(attribute) {\n // This updater is only called if featureIds is not null\n const featureIds = this.props.featureIds!;\n const value = new Uint8ClampedArray(featureIds.length * attribute.size);\n\n const pickingColor = [];\n for (let index = 0; index < featureIds.length; index++) {\n this.encodePickingColor(featureIds[index], pickingColor);\n\n value[index * 3] = pickingColor[0];\n value[index * 3 + 1] = pickingColor[1];\n value[index * 3 + 2] = pickingColor[2];\n }\n\n attribute.value = value;\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this.state.parsedPBRMaterial?.generatedTextures.forEach(texture => texture.destroy());\n this.setState({parsedPBRMaterial: null});\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ShaderModule} from '@luma.gl/shadertools';\n\nconst uniformBlock = `\\\nuniform meshUniforms {\n bool pickFeatureIds;\n} mesh;\n`;\n\nexport type MeshProps = {\n pickFeatureIds: boolean;\n};\n\nexport const meshUniforms = {\n name: 'mesh',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n pickFeatureIds: 'f32'\n }\n} as const satisfies ShaderModule<MeshProps>;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-vs\n\n// Primitive attributes\nin vec3 positions;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\nin vec4 uvRegions;\nin vec3 featureIdsPickingColors;\n\n// Instance attributes\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin vec3 instanceModelMatrixCol0;\nin vec3 instanceModelMatrixCol1;\nin vec3 instanceModelMatrixCol2;\n\n// Outputs to fragment shader\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nvec2 applyUVRegion(vec2 uv) {\n #ifdef HAS_UV_REGIONS\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryUVRegion.cmn.md\n return fract(uv) * (uvRegions.zw - uvRegions.xy) + uvRegions.xy;\n #else\n return uv;\n #endif\n}\n\nvoid main(void) {\n vec2 uv = applyUVRegion(texCoords);\n geometry.uv = uv;\n\n if (mesh.pickFeatureIds) {\n geometry.pickingColor = featureIdsPickingColors;\n } else {\n geometry.pickingColor = instancePickingColors;\n }\n\n mat3 instanceModelMatrix = mat3(instanceModelMatrixCol0, instanceModelMatrixCol1, instanceModelMatrixCol2);\n\n vTexCoord = uv;\n cameraPosition = project.cameraPosition;\n vColor = vec4(colors * instanceColors.rgb, instanceColors.a);\n\n vec3 pos = (instanceModelMatrix * positions) * simpleMesh.sizeScale;\n vec3 projectedPosition = project_position(positions);\n position_commonspace = vec4(projectedPosition, 1.0);\n gl_Position = project_common_position_to_clipspace(position_commonspace);\n\n geometry.position = position_commonspace;\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n geometry.normal = normals_commonspace;\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n #ifdef MODULE_PBRMATERIAL\n // set PBR data\n pbr_vPosition = geometry.position.xyz;\n #ifdef HAS_NORMALS\n pbr_vNormal = geometry.normal;\n #endif\n\n #ifdef HAS_UV\n pbr_vUV = uv;\n #else\n pbr_vUV = vec2(0., 0.);\n #endif\n geometry.uv = pbr_vUV;\n #endif\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-fs\n\nprecision highp float;\n\nuniform sampler2D sampler;\n\nin vec2 vTexCoord;\nin vec3 cameraPosition;\nin vec3 normals_commonspace;\nin vec4 position_commonspace;\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n \n#ifdef MODULE_PBRMATERIAL\n\n fragColor = vColor * pbr_filterColor(vec4(0));\n geometry.uv = pbr_vUV;\n fragColor.a *= layer.opacity;\n\n#else\n\n geometry.uv = vTexCoord;\n\n vec3 normal;\n if (simpleMesh.flatShading) {\n\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n } else {\n normal = normals_commonspace;\n }\n\n vec4 color = simpleMesh.hasTexture ? texture(sampler, vTexCoord) : vColor;\n vec3 lightColor = lighting_getLightColor(color.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, color.a * layer.opacity);\n\n#endif\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n Color,\n CompositeLayer,\n CompositeLayerProps,\n DefaultProps,\n Layer,\n LayersList,\n log,\n Material,\n TextureSource,\n UpdateParameters\n} from '@deck.gl/core';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\nimport {COORDINATE_SYSTEM} from '@deck.gl/core';\nimport type {MeshAttributes} from '@loaders.gl/schema';\nimport {TerrainWorkerLoader} from '@loaders.gl/terrain';\nimport TileLayer, {TileLayerProps} from '../tile-layer/tile-layer';\nimport type {\n Bounds,\n GeoBoundingBox,\n TileBoundingBox,\n TileLoadProps,\n ZRange\n} from '../tileset-2d/index';\nimport {Tile2DHeader, urlType, getURLFromTemplate, URLTemplate} from '../tileset-2d/index';\n\nconst DUMMY_DATA = [1];\n\nconst defaultProps: DefaultProps<TerrainLayerProps> = {\n ...TileLayer.defaultProps,\n // Image url that encodes height data\n elevationData: urlType,\n // Image url to use as texture\n texture: {...urlType, optional: true},\n // Martini error tolerance in meters, smaller number -> more detailed mesh\n meshMaxError: {type: 'number', value: 4.0},\n // Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates\n bounds: {type: 'array', value: null, optional: true, compare: true},\n // Color to use if texture is unavailable\n color: {type: 'color', value: [255, 255, 255]},\n // Object to decode height data, from (r, g, b) to height in meters\n elevationDecoder: {\n type: 'object',\n value: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n }\n },\n // Supply url to local terrain worker bundle. Only required if running offline and cannot access CDN.\n workerUrl: '',\n // Same as SimpleMeshLayer wireframe\n wireframe: false,\n material: true,\n\n loaders: [TerrainWorkerLoader]\n};\n\n// Turns array of templates into a single string to work around shallow change\nfunction urlTemplateToUpdateTrigger(template: URLTemplate): string {\n if (Array.isArray(template)) {\n return template.join(';');\n }\n return template || '';\n}\n\ntype ElevationDecoder = {rScaler: number; gScaler: number; bScaler: number; offset: number};\ntype TerrainLoadProps = {\n bounds: Bounds;\n elevationData: string | null;\n elevationDecoder: ElevationDecoder;\n meshMaxError: number;\n signal?: AbortSignal;\n};\n\ntype MeshAndTexture = [MeshAttributes | null, TextureSource | null];\n\n/** All properties supported by TerrainLayer */\nexport type TerrainLayerProps = _TerrainLayerProps &\n TileLayerProps<MeshAndTexture> &\n CompositeLayerProps;\n\n/** Props added by the TerrainLayer */\ntype _TerrainLayerProps = {\n /** Image url that encodes height data. **/\n elevationData: URLTemplate;\n\n /** Image url to use as texture. **/\n texture?: URLTemplate;\n\n /** Martini error tolerance in meters, smaller number -> more detailed mesh. **/\n meshMaxError?: number;\n\n /** Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates. **/\n bounds?: Bounds | null;\n\n /** Color to use if texture is unavailable. **/\n color?: Color;\n\n /** Object to decode height data, from (r, g, b) to height in meters. **/\n elevationDecoder?: ElevationDecoder;\n\n /** Whether to render the mesh in wireframe mode. **/\n wireframe?: boolean;\n\n /** Material props for lighting effect. **/\n material?: Material;\n\n /**\n * @deprecated Use `loadOptions.terrain.workerUrl` instead\n */\n workerUrl?: string;\n};\n\n/** Render mesh surfaces from height map images. */\nexport default class TerrainLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TerrainLayerProps & Required<TileLayerProps<MeshAndTexture>>>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TerrainLayer';\n\n state!: {\n isTiled?: boolean;\n terrain?: MeshAttributes;\n zRange?: ZRange | null;\n };\n\n updateState({props, oldProps}: UpdateParameters<this>): void {\n const elevationDataChanged = props.elevationData !== oldProps.elevationData;\n if (elevationDataChanged) {\n const {elevationData} = props;\n const isTiled =\n elevationData && (Array.isArray(elevationData) || isTileSetURL(elevationData));\n this.setState({isTiled});\n }\n\n // Reloading for single terrain mesh\n const shouldReload =\n elevationDataChanged ||\n props.meshMaxError !== oldProps.meshMaxError ||\n props.elevationDecoder !== oldProps.elevationDecoder ||\n props.bounds !== oldProps.bounds;\n\n if (!this.state.isTiled && shouldReload) {\n // When state.isTiled, elevationData cannot be an array\n const terrain = this.loadTerrain(props as TerrainLoadProps);\n this.setState({terrain});\n }\n\n // TODO - remove in v9\n // @ts-ignore\n if (props.workerUrl) {\n log.removed('workerUrl', 'loadOptions.terrain.workerUrl')();\n }\n }\n\n loadTerrain({\n elevationData,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n }: TerrainLoadProps): Promise<MeshAttributes> | null {\n if (!elevationData) {\n return null;\n }\n let loadOptions = this.getLoadOptions();\n loadOptions = {\n ...loadOptions,\n terrain: {\n skirtHeight: this.state.isTiled ? meshMaxError * 2 : 0,\n ...loadOptions?.terrain,\n bounds,\n meshMaxError,\n elevationDecoder\n }\n };\n const {fetch} = this.props;\n return fetch(elevationData, {propName: 'elevationData', layer: this, loadOptions, signal});\n }\n\n getTiledTerrainData(tile: TileLoadProps): Promise<MeshAndTexture> {\n const {elevationData, fetch, texture, elevationDecoder, meshMaxError} = this.props;\n const {viewport} = this.context;\n const dataUrl = getURLFromTemplate(elevationData, tile);\n const textureUrl = texture && getURLFromTemplate(texture, tile);\n\n const {signal} = tile;\n let bottomLeft = [0, 0] as [number, number];\n let topRight = [0, 0] as [number, number];\n if (viewport.isGeospatial) {\n const bbox = tile.bbox as GeoBoundingBox;\n bottomLeft = viewport.projectFlat([bbox.west, bbox.south]);\n topRight = viewport.projectFlat([bbox.east, bbox.north]);\n } else {\n const bbox = tile.bbox as Exclude<TileBoundingBox, GeoBoundingBox>;\n bottomLeft = [bbox.left, bbox.bottom];\n topRight = [bbox.right, bbox.top];\n }\n const bounds: Bounds = [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]];\n\n const terrain = this.loadTerrain({\n elevationData: dataUrl,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n });\n const surface = textureUrl\n ? // If surface image fails to load, the tile should still be displayed\n fetch(textureUrl, {propName: 'texture', layer: this, loaders: [], signal}).catch(_ => null)\n : Promise.resolve(null);\n\n return Promise.all([terrain, surface]);\n }\n\n renderSubLayers(\n props: TileLayerProps<MeshAndTexture> & {\n id: string;\n data: MeshAndTexture;\n tile: Tile2DHeader<MeshAndTexture>;\n }\n ) {\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n\n const {color, wireframe, material} = this.props;\n const {data} = props;\n\n if (!data) {\n return null;\n }\n\n const [mesh, texture] = data;\n\n return new SubLayerClass(props, {\n data: DUMMY_DATA,\n mesh,\n texture,\n _instanced: false,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n getPosition: d => [0, 0, 0],\n getColor: color,\n wireframe,\n material\n });\n }\n\n // Update zRange of viewport\n onViewportLoad(tiles?: Tile2DHeader<MeshAndTexture>[]): void {\n if (!tiles) {\n return;\n }\n\n const {zRange} = this.state;\n const ranges = tiles\n .map(tile => tile.content)\n .filter(Boolean)\n .map(arr => {\n // @ts-ignore\n const bounds = arr[0].header.boundingBox;\n return bounds.map(bound => bound[2]);\n });\n if (ranges.length === 0) {\n return;\n }\n const minZ = Math.min(...ranges.map(x => x[0]));\n const maxZ = Math.max(...ranges.map(x => x[1]));\n\n if (!zRange || minZ < zRange[0] || maxZ > zRange[1]) {\n this.setState({zRange: [minZ, maxZ]});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {\n color,\n material,\n elevationData,\n texture,\n wireframe,\n meshMaxError,\n elevationDecoder,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n } = this.props;\n\n if (this.state.isTiled) {\n return new TileLayer<MeshAndTexture>(\n this.getSubLayerProps({\n id: 'tiles'\n }),\n {\n getTileData: this.getTiledTerrainData.bind(this),\n renderSubLayers: this.renderSubLayers.bind(this),\n updateTriggers: {\n getTileData: {\n elevationData: urlTemplateToUpdateTrigger(elevationData),\n texture: urlTemplateToUpdateTrigger(texture),\n meshMaxError,\n elevationDecoder\n }\n },\n onViewportLoad: this.onViewportLoad.bind(this),\n zRange: this.state.zRange || null,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n }\n );\n }\n\n if (!elevationData) {\n return null;\n }\n\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n return new SubLayerClass(\n this.getSubLayerProps({\n id: 'mesh'\n }),\n {\n data: DUMMY_DATA,\n mesh: this.state.terrain,\n texture,\n _instanced: false,\n getPosition: d => [0, 0, 0],\n getColor: color,\n material,\n wireframe\n }\n );\n }\n}\n\nconst isTileSetURL = (url: string): boolean =>\n url.includes('{x}') && (url.includes('{y}') || url.includes('{-y}'));\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n GetPickingInfoParams,\n Viewport,\n COORDINATE_SYSTEM,\n DefaultProps\n} from '@deck.gl/core';\nimport {GeoJsonLayer, GeoJsonLayerProps} from '@deck.gl/layers';\nimport {ClipExtension} from '@deck.gl/extensions';\n\nimport {Matrix4} from '@math.gl/core';\nimport {MVTWorkerLoader} from '@loaders.gl/mvt';\nimport {binaryToGeojson} from '@loaders.gl/gis';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatureCollection} from '@loaders.gl/schema';\nimport type {Feature, Geometry} from 'geojson';\n\nimport {transform} from './coordinate-transform';\nimport findIndexBinary from './find-index-binary';\n\nimport TileLayer, {TileLayerPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';\n\nimport type {Tileset2DProps, TileLoadProps, GeoBoundingBox} from '../tileset-2d/index';\nimport {\n urlType,\n Tileset2D,\n Tile2DHeader,\n getURLFromTemplate,\n URLTemplate,\n isGeoBoundingBox,\n isURLTemplate\n} from '../tileset-2d/index';\n\nconst WORLD_SIZE = 512;\n\nconst defaultProps: DefaultProps<MVTLayerProps> = {\n ...GeoJsonLayer.defaultProps,\n data: urlType,\n onDataLoad: {type: 'function', value: null, optional: true, compare: false},\n uniqueIdProperty: '',\n highlightedFeatureId: null,\n loaders: [MVTWorkerLoader],\n binary: true\n};\n\nexport type TileJson = {\n tilejson: string;\n tiles: string[];\n // eslint-disable-next-line camelcase\n vector_layers: any[];\n attribution?: string;\n scheme?: string;\n maxzoom?: number;\n minzoom?: number;\n version?: string;\n};\n\ntype ParsedMvtTile = Feature[] | BinaryFeatureCollection;\n\nexport type MVTLayerPickingInfo<FeaturePropertiesT = {}> = TileLayerPickingInfo<\n ParsedMvtTile,\n PickingInfo<Feature<Geometry, FeaturePropertiesT>>\n>;\n\n/** All props supported by the MVTLayer */\nexport type MVTLayerProps<FeaturePropertiesT = unknown> = _MVTLayerProps<FeaturePropertiesT> &\n Omit<TileLayerProps<ParsedMvtTile>, 'data'>;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps<FeaturePropertiesT> = Omit<\n GeoJsonLayerProps<FeaturePropertiesT>,\n 'data'\n> & {\n data: TileJson | URLTemplate;\n\n /** Called if `data` is a TileJSON URL when it is successfully fetched. */\n onDataLoad?: ((tilejson: TileJson | null) => void) | null;\n\n /** Needed for highlighting a feature split across two or more tiles. */\n uniqueIdProperty?: string;\n\n /** A feature with ID corresponding to the supplied value will be highlighted. */\n highlightedFeatureId?: string | number | null;\n\n /**\n * Use tile data in binary format.\n *\n * @default true\n */\n binary?: boolean;\n\n /**\n * Loaders used to transform tiles into `data` property passed to `renderSubLayers`.\n *\n * @default [MVTWorkerLoader] from `@loaders.gl/mvt`\n */\n loaders?: Loader[];\n};\n\ntype ContentWGS84Cache = {_contentWGS84?: Feature[]};\n\n/** Render data formatted as [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/). */\nexport default class MVTLayer<\n FeaturePropertiesT = any,\n ExtraProps extends {} = {}\n> extends TileLayer<ParsedMvtTile, Required<_MVTLayerProps<FeaturePropertiesT>> & ExtraProps> {\n static layerName = 'MVTLayer';\n static defaultProps = defaultProps;\n\n state!: TileLayer<ParsedMvtTile>['state'] & {\n binary: boolean;\n data: URLTemplate;\n tileJSON: TileJson | null;\n highlightColor?: number[];\n hoveredFeatureId: number | string | null;\n hoveredFeatureLayerName: string | null;\n };\n\n initializeState(): void {\n super.initializeState();\n // GlobeView doesn't work well with binary data\n const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;\n this.setState({\n binary,\n data: null,\n tileJSON: null,\n hoveredFeatureId: null,\n hoveredFeatureLayerName: null\n });\n }\n\n get isLoaded(): boolean {\n return Boolean(this.state?.data && super.isLoaded);\n }\n\n updateState({props, oldProps, context, changeFlags}: UpdateParameters<this>) {\n if (changeFlags.dataChanged) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._updateTileData();\n }\n\n if (this.state?.data) {\n super.updateState({props, oldProps, context, changeFlags});\n this._setWGS84PropertyForTiles();\n }\n const {highlightColor} = props;\n if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {\n this.setState({highlightColor});\n }\n }\n\n /* eslint-disable complexity */\n private async _updateTileData(): Promise<void> {\n let data = this.props.data;\n let tileJSON: TileJson | null = null;\n\n if (typeof data === 'string' && !isURLTemplate(data)) {\n const {onDataLoad, fetch} = this.props;\n this.setState({data: null, tileJSON: null});\n try {\n tileJSON = await fetch(data, {propName: 'data', layer: this, loaders: []});\n } catch (error: any) {\n this.raiseError(error, 'loading TileJSON');\n data = null;\n }\n\n if (onDataLoad) {\n onDataLoad(tileJSON, {propName: 'data', layer: this});\n }\n } else if (data && typeof data === 'object' && 'tilejson' in data) {\n tileJSON = data;\n }\n\n if (tileJSON) {\n data = tileJSON.tiles;\n }\n\n this.setState({data, tileJSON});\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const opts = super._getTilesetOptions();\n const tileJSON: TileJson | null = this.state.tileJSON;\n const {minZoom, maxZoom} = this.props;\n\n if (tileJSON) {\n if (Number.isFinite(tileJSON.minzoom) && (tileJSON.minzoom as number) > (minZoom as number)) {\n opts.minZoom = tileJSON.minzoom;\n }\n\n if (\n Number.isFinite(tileJSON.maxzoom) &&\n (!Number.isFinite(maxZoom) || (tileJSON.maxzoom as number) < (maxZoom as number))\n ) {\n opts.maxZoom = tileJSON.maxzoom;\n }\n }\n return opts;\n }\n\n /* eslint-disable complexity */\n\n renderLayers(): Layer | null | LayersList {\n if (!this.state?.data) return null;\n return super.renderLayers();\n }\n\n getTileData(loadProps: TileLoadProps): Promise<ParsedMvtTile> {\n const {data, binary} = this.state;\n const {index, signal} = loadProps;\n\n const url = getURLFromTemplate(data, loadProps);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n let loadOptions = this.getLoadOptions();\n const {fetch} = this.props;\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf',\n mvt: {\n ...loadOptions?.mvt,\n coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',\n tileIndex: index\n // Local worker debug\n // workerUrl: `modules/mvt/dist/mvt-loader.worker.js`\n // Set worker to null to skip web workers\n // workerUrl: null\n },\n gis: binary ? {format: 'binary'} : {}\n };\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: ParsedMvtTile;\n _offset: number;\n tile: Tile2DHeader<ParsedMvtTile>;\n }\n ): Layer | null | LayersList {\n const {x, y, z} = props.tile.index;\n const worldScale = Math.pow(2, z);\n\n const xScale = WORLD_SIZE / worldScale;\n const yScale = -xScale;\n\n const xOffset = (WORLD_SIZE * x) / worldScale;\n const yOffset = WORLD_SIZE * (1 - y / worldScale);\n\n const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);\n\n props.autoHighlight = false;\n\n if (!this.context.viewport.resolution) {\n props.modelMatrix = modelMatrix;\n props.coordinateOrigin = [xOffset, yOffset, 0];\n props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;\n props.extensions = [...(props.extensions || []), new ClipExtension()];\n }\n\n const subLayers = super.renderSubLayers(props);\n\n if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {\n log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();\n }\n\n return subLayers;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {uniqueIdProperty} = this.props;\n\n const {hoveredFeatureId, hoveredFeatureLayerName} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId: string | number | null = null;\n let newHoveredFeatureLayerName: string | null = null;\n\n if (hoveredFeature) {\n newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);\n newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);\n }\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n if (\n hoveredFeatureId !== newHoveredFeatureId ||\n hoveredFeatureLayerName !== newHoveredFeatureLayerName\n ) {\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId,\n hoveredFeatureLayerName: newHoveredFeatureLayerName\n });\n }\n }\n\n protected _isWGS84(): boolean {\n return Boolean(this.context.viewport.resolution);\n }\n\n getPickingInfo(params: GetPickingInfoParams): MVTLayerPickingInfo<FeaturePropertiesT> {\n const info = super.getPickingInfo(params);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatureCollection, {\n globalFeatureId: info.index\n }) as Feature;\n }\n if (info.object && !this._isWGS84()) {\n info.object = transformTileCoordsToWGS84(\n info.object,\n info.tile!.bbox as GeoBoundingBox, // eslint-disable-line\n this.context.viewport\n );\n }\n\n return info;\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader<ParsedMvtTile>): Record<string, any> {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n private getHighlightedObjectIndex(tile: Tile2DHeader<ParsedMvtTile>): number {\n const {hoveredFeatureId, hoveredFeatureLayerName, binary} = this.state;\n const {uniqueIdProperty, highlightedFeatureId} = this.props;\n const data = tile.content;\n\n const isHighlighted = isFeatureIdDefined(highlightedFeatureId);\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;\n\n if (!isFeatureIdPresent) {\n return -1;\n }\n\n const featureIdToHighlight = isHighlighted ? highlightedFeatureId! : hoveredFeatureId!;\n\n // Iterable data\n if (Array.isArray(data)) {\n return data.findIndex(feature => {\n const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;\n const isMatchingLayer =\n isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;\n return isMatchingId && isMatchingLayer;\n });\n\n // Non-iterable data\n } else if (data && binary) {\n // Get the feature index of the selected item to highlight\n return findIndexBinary(\n data,\n uniqueIdProperty,\n featureIdToHighlight,\n isHighlighted ? '' : hoveredFeatureLayerName!\n );\n }\n\n return -1;\n }\n\n private _pickObjects(maxObjects: number | null): PickingInfo[] {\n const {deck, viewport} = this.context;\n const width = viewport.width;\n const height = viewport.height;\n const x = viewport.x;\n const y = viewport.y;\n const layerIds = [this.id];\n return deck!.pickObjects({x, y, width, height, layerIds, maxObjects});\n }\n\n /** Get the rendered features in the current viewport. */\n getRenderedFeatures(maxFeatures: number | null = null): Feature[] {\n const features = this._pickObjects(maxFeatures);\n const featureCache = new Set();\n const renderedFeatures: Feature[] = [];\n\n for (const f of features) {\n const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);\n\n if (featureId === undefined) {\n // we have no id for the feature, we just add to the list\n renderedFeatures.push(f.object as Feature);\n } else if (!featureCache.has(featureId)) {\n // Add removing duplicates\n featureCache.add(featureId);\n renderedFeatures.push(f.object as Feature);\n }\n }\n\n return renderedFeatures;\n }\n\n private _setWGS84PropertyForTiles(): void {\n const propName = 'dataInWGS84';\n const tileset: Tileset2D = this.state.tileset!;\n\n // @ts-expect-error selectedTiles are always initialized when tile is being processed\n tileset.selectedTiles.forEach((tile: Tile2DHeader & ContentWGS84Cache) => {\n if (!tile.hasOwnProperty(propName)) {\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(tile, propName, {\n get: () => {\n // Still loading or encountered an error\n if (!tile.content) {\n return null;\n }\n\n if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {\n // TODO: @loaders.gl/mvt returns [] when no content. It should return a valid empty binary.\n // https://github.com/visgl/loaders.gl/pull/1137\n return [];\n }\n\n const {bbox} = tile;\n if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {\n // Create a cache to transform only once\n\n const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;\n tile._contentWGS84 = content.map(feature =>\n transformTileCoordsToWGS84(feature, bbox, this.context.viewport)\n );\n }\n return tile._contentWGS84;\n }\n });\n }\n });\n }\n}\n\nfunction getFeatureUniqueId(feature: Feature, uniqueIdProperty: string | undefined) {\n if (feature.properties && uniqueIdProperty) {\n return feature.properties[uniqueIdProperty];\n }\n\n if ('id' in feature) {\n return feature.id;\n }\n\n return undefined;\n}\n\nfunction getFeatureLayerName(feature: Feature): string | null {\n return feature.properties?.layerName || null;\n}\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nfunction transformTileCoordsToWGS84(\n object: Feature,\n bbox: GeoBoundingBox,\n viewport: Viewport\n): Feature {\n const feature = {\n ...object,\n geometry: {\n type: object.geometry.type\n }\n };\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(feature.geometry, 'coordinates', {\n get: () => {\n const wgs84Geom = transform(object.geometry, bbox, viewport);\n return wgs84Geom.coordinates;\n }\n });\n\n return feature as Feature;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport} from '@deck.gl/core';\nimport {lerp} from '@math.gl/core';\nimport {GeoBoundingBox} from '../tileset-2d/index';\n\nconst availableTransformations = {\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon\n};\n\nfunction Point([pointX, pointY]: [number, number], [nw, se]: number[][], viewport: Viewport) {\n const x = lerp(nw[0], se[0], pointX);\n const y = lerp(nw[1], se[1], pointY);\n\n return viewport.unprojectFlat([x, y]);\n}\n\nfunction getPoints(geometry, bbox: number[][], viewport: Viewport) {\n return geometry.map(g => Point(g, bbox, viewport));\n}\n\nfunction MultiPoint(multiPoint, bbox: number[][], viewport: Viewport) {\n return getPoints(multiPoint, bbox, viewport);\n}\n\nfunction LineString(line, bbox: number[][], viewport: Viewport) {\n return getPoints(line, bbox, viewport);\n}\n\nfunction MultiLineString(multiLineString, bbox: number[][], viewport: Viewport) {\n return multiLineString.map(lineString => LineString(lineString, bbox, viewport));\n}\n\nfunction Polygon(polygon, bbox: number[][], viewport: Viewport) {\n return polygon.map(polygonRing => getPoints(polygonRing, bbox, viewport));\n}\n\nfunction MultiPolygon(multiPolygon, bbox: number[][], viewport: Viewport) {\n return multiPolygon.map(polygon => Polygon(polygon, bbox, viewport));\n}\n\nexport function transform(geometry, bbox: GeoBoundingBox, viewport: Viewport) {\n const nw = viewport.projectFlat([bbox.west, bbox.north]);\n const se = viewport.projectFlat([bbox.east, bbox.south]);\n const projectedBbox = [nw, se];\n\n return {\n ...geometry,\n coordinates: availableTransformations[geometry.type](\n geometry.coordinates,\n projectedBbox,\n viewport\n )\n };\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {\n BinaryFeatureCollection,\n BinaryLineFeature,\n BinaryPointFeature,\n BinaryPolygonFeature\n} from '@loaders.gl/schema';\n\ntype FeatureTypes = BinaryPointFeature | BinaryLineFeature | BinaryPolygonFeature;\n\nconst GEOM_TYPES = ['points', 'lines', 'polygons'];\n/**\n * Return the index of feature (numericProps or featureIds) for given feature id\n * Example: findIndexBinary(data, 'id', 33) will return the index in the array of numericProps\n * of the feature 33.\n */\nexport default function findIndexBinary(\n data: BinaryFeatureCollection, // The data in binary format\n uniqueIdProperty: string, // Name of the unique id property\n featureId: string | number, // feature id to find\n layerName: string | null // the layer to search in\n): number {\n for (const gt of GEOM_TYPES) {\n const index = data[gt] && findIndexByType(data[gt], uniqueIdProperty, featureId, layerName);\n if (index >= 0) {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction findIndexByType(\n geomData: FeatureTypes,\n uniqueIdProperty: string,\n featureId: string | number,\n layerName: string | null\n): number {\n const featureIds = geomData.featureIds.value;\n\n if (!featureIds.length) {\n return -1;\n }\n\n let startFeatureIndex = 0;\n let endFeatureIndex = featureIds[featureIds.length - 1] + 1;\n if (layerName) {\n const layerRange = getLayerRange(geomData, layerName);\n if (layerRange) {\n startFeatureIndex = layerRange[0];\n endFeatureIndex = layerRange[1] + 1;\n } else {\n return -1;\n }\n }\n\n // Look for the uniqueIdProperty\n let featureIndex = -1;\n if (uniqueIdProperty in geomData.numericProps) {\n const vertexIndex = geomData.numericProps[uniqueIdProperty].value.findIndex(\n (x, i) =>\n x === featureId && featureIds[i] >= startFeatureIndex && featureIds[i] < endFeatureIndex\n );\n return vertexIndex >= 0 ? geomData.globalFeatureIds.value[vertexIndex] : -1;\n } else if (uniqueIdProperty) {\n featureIndex = findIndex(\n geomData.properties,\n elem => elem[uniqueIdProperty] === featureId,\n startFeatureIndex,\n endFeatureIndex\n );\n } else if (geomData.fields) {\n featureIndex = findIndex(\n geomData.fields,\n (elem: any) => elem.id === featureId,\n startFeatureIndex,\n endFeatureIndex\n );\n }\n return featureIndex >= 0 ? getGlobalFeatureId(geomData, featureIndex) : -1;\n}\n\ntype LayerRange = [firstFeatureIndex: number, lastFeatureIndex: number];\n\n// Returns [firstFeatureIndex, lastFeatureIndex]\n// MVTLoader parses tiles layer-by-layer, so each layer is a continuous range\nfunction getLayerRange(\n geomData: FeatureTypes & {\n __layers?: Record<string, LayerRange>;\n },\n layerName: string\n): LayerRange | undefined {\n if (!geomData.__layers) {\n // Cache a map from properties.layerName to index ranges\n const layerNames: Record<string, LayerRange> = {};\n const {properties} = geomData;\n for (let i = 0; i < properties.length; i++) {\n const {layerName: key} = properties[i] as Record<string, any>;\n if (!key) {\n // ignore\n } else if (layerNames[key]) {\n layerNames[key][1] = i;\n } else {\n layerNames[key] = [i, i];\n }\n }\n geomData.__layers = layerNames;\n }\n return geomData.__layers[layerName];\n}\n\n// Returns global feature id\nfunction getGlobalFeatureId(geomData, featureIndex: number) {\n if (!geomData.__ids) {\n // Cache a map from featureId to globalFeatureId\n const result: string[] = [];\n const featureIds = geomData.featureIds.value;\n const globalFeatureIds = geomData.globalFeatureIds.value;\n for (let i = 0; i < featureIds.length; i++) {\n result[featureIds[i]] = globalFeatureIds[i];\n }\n geomData.__ids = result;\n }\n return geomData.__ids[featureIndex];\n}\n\n// Like array.findIndex, but only search within a range\nfunction findIndex<T>(\n array: T[],\n predicate: (v: T, index: number) => boolean,\n startIndex: number,\n endIndex: number\n): number {\n for (let i = startIndex; i < endIndex; i++) {\n if (predicate(array[i], i)) {\n return i;\n }\n }\n return -1;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nconst BASE32_CODES = '0123456789bcdefghjkmnpqrstuvwxyz';\nconst BASE32_CODES_DICT = {};\nfor (let i = 0; i < BASE32_CODES.length; i++) {\n BASE32_CODES_DICT[BASE32_CODES.charAt(i)] = i;\n}\n\nconst MIN_LAT = -90;\nconst MAX_LAT = 90;\nconst MIN_LON = -180;\nconst MAX_LON = 180;\n\n// Adapted from ngeohash decode_bbox\nexport function getGeohashBounds(geohash: string): number[] {\n let isLon = true;\n let maxLat = MAX_LAT;\n let minLat = MIN_LAT;\n let maxLon = MAX_LON;\n let minLon = MIN_LON;\n let mid: number;\n\n let hashValue = 0;\n for (let i = 0, l = geohash.length; i < l; i++) {\n const code = geohash[i].toLowerCase();\n hashValue = BASE32_CODES_DICT[code];\n\n for (let bits = 4; bits >= 0; bits--) {\n const bit = (hashValue >> bits) & 1;\n if (isLon) {\n mid = (maxLon + minLon) / 2;\n if (bit === 1) {\n minLon = mid;\n } else {\n maxLon = mid;\n }\n } else {\n mid = (maxLat + minLat) / 2;\n if (bit === 1) {\n minLat = mid;\n } else {\n maxLat = mid;\n }\n }\n isLon = !isLon;\n }\n }\n\n return [minLat, minLon, maxLat, maxLon];\n}\n\nexport function getGeohashPolygon(geohash: string): number[] {\n const [s, w, n, e] = getGeohashBounds(geohash);\n\n return [e, n, e, s, w, s, w, n, e, n];\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer from '../geo-cell-layer/GeoCellLayer';\nimport {getGeohashPolygon} from './geohash-utils';\n\nconst defaultProps: DefaultProps<GeohashLayerProps> = {\n getGeohash: {type: 'accessor', value: (d: any) => d.geohash}\n};\n\n/**\n * Properties of `GeohashLayer`.\n */\nexport type GeohashLayerProps<DataT = unknown> = {\n /**\n * Called for each data object to retrieve the geohash string identifier.\n *\n * By default, it reads `geohash` property of data object.\n */\n getGeohash?: AccessorFunction<DataT, string>;\n};\n\n/** Render filled and/or stroked polygons based on the [Geohash](https://en.wikipedia.org/wiki/Geohash) geospatial indexing system. */\nexport default class GeohashLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<GeohashLayerProps> & ExtraProps\n> {\n static layerName = 'GeohashLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getGeohash} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => getGeohashPolygon(getGeohash(x, objectInfo))\n };\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACIA,kBAA8D;AAC9D,oBAA8C;AAE9C,IAAM,eAAgD;EACpD,GAAG,2BAAa;;AAMlB,IAAqB,eAArB,cAAmF,2BAElF;;EAKC,gBAAa;AACX,WAAO;EACT;EAEA,eAAY;AAEV,UAAM,EACJ,gBACA,UACA,WACA,QACA,SACA,gBACA,gBACA,oBACA,oBACA,kBACA,gBACA,mBACA,cACA,cACA,cACA,aAAY,IACV,KAAK;AAGT,UAAM,EAAC,gBAAgB,UAAU,YAAW,IAAI,KAAK;AAGrD,UAAM,YAAY,KAAK,iBAAiB,QAAQ,0BAAY;AAC5D,UAAM,EAAC,gBAAgB,sBAAsB,GAAG,YAAW,IAAI,KAAK,cAAa,KAAM,CAAA;AACvF,WAAO,IAAI,UACT;MACE;MACA;MAEA;MACA;MAEA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MAEA;MACA;MAEA;MACA;MACA;MACA;OAEF,KAAK,iBAAiB;MACpB,IAAI;MACJ,gBAAgB,kBAAkB;QAChC,GAAG;QACH,cAAc,eAAe;QAC7B,cAAc,eAAe;QAC7B,cAAc,eAAe;QAC7B,cAAc,eAAe;;KAEhC,GACD,WAAW;EAEf;;AAxEO,aAAA,YAAY;AACZ,aAAA,eAA6B;2BAJjB;;;ACRrB,mBAAuC;;;ACFvC,mBAAoE;AACpE,IAAAA,eAAmB;AAGb,SAAU,oBAAoB,UAAuB,QAAe;AACxE,WAAS,WAAW,SAAY,SAAS,CAAC,EAAE,CAAC,IAAI;AACjD,aAAW,MAAM,UAAU;AACzB,UAAM,WAAW,GAAG,CAAC,IAAI;AACzB,QAAI,WAAW,KAAK;AAClB,SAAG,CAAC,KAAK;IACX,WAAW,WAAW,MAAM;AAC1B,SAAG,CAAC,KAAK;IACX;EACF;AACF;AAGM,SAAU,aAAa,OAAqB,UAAuB,QAAc;AACrF,QAAM,CAAC,KAAK,GAAG,QAAI,2BAAa,KAAK;AACrC,QAAM,cAAc,SAAS;AAG7B,sBAAoB,UAAU,GAAG;AAIjC,QAAM,cAAc,SAAS,CAAC,MAAM,SAAS,cAAc,CAAC,IAAI,cAAc,IAAI;AAClF,WAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,aAAS,CAAC,EAAE,CAAC,QAAI,mBAAK,KAAK,SAAS,CAAC,EAAE,CAAC,GAAG,MAAM;AACjD,aAAS,CAAC,EAAE,CAAC,QAAI,mBAAK,KAAK,SAAS,CAAC,EAAE,CAAC,GAAG,MAAM;EACnD;AACF;AAGM,SAAU,mBAAmB,YAAY,QAAQ,YAAU;AAC/D,QAAM,YAAY,WAAW,QAAQ,UAAU;AAC/C,QAAM,CAAC,KAAK,GAAG,QAAI,2BAAa,SAAS;AACzC,SAAO,CAAC,KAAK,GAAG;AAClB;AAEM,SAAU,YAAY,OAAqB,WAAmB,GAAC;AACnE,QAAM,eAAW,6BAAe,OAAO,IAAI;AAE3C,MAAI,aAAa,GAAG;AAElB,iBAAa,OAAO,UAAU,QAAQ;EACxC,OAAO;AAEL,wBAAoB,QAAQ;EAC9B;AAEA,SAAO;AACT;AAEM,SAAU,eAAe,UAAoB;AACjD,QAAM,YAAY,IAAI,aAAa,SAAS,SAAS,CAAC;AACtD,MAAI,IAAI;AACR,aAAW,MAAM,UAAU;AACzB,cAAU,GAAG,IAAI,GAAG,CAAC;AACrB,cAAU,GAAG,IAAI,GAAG,CAAC;EACvB;AACA,SAAO;AACT;;;ADzDA,IAAMC,gBAA2C;EAC/C,aAAa,EAAC,MAAM,YAAY,OAAO,CAAC,MAAW,EAAE,SAAQ;;AAiB/D,IAAqB,UAArB,cAA8E,qBAG7E;EAIC,gBAAa;AACX,UAAM,EAAC,MAAM,YAAW,IAAI,KAAK;AAEjC,WAAO;MACL;MACA,YAAY;MACZ,eAAe;MACf,gBAAgB;MAChB,YAAY,CAAC,GAAU,eAAc;AACnC,cAAM,WAAW,YAAY,GAAG,UAAU;AAC1C,cAAM,eAAW,6BACf,OAAO,aAAa,eAAW,uBAAS,QAAQ,IAAI,UACpD,EAAC,YAAY,MAAM,UAAU,OAAM,CAAC;AAEtC,eAAO,eAAe,QAAQ;MAChC;;EAEJ;;AApBO,QAAA,YAAY;AACZ,QAAA,eAAeA;uBALH;;;AEhBrB,IAAAC,eASO;AACP,IAAAC,iBAA0B;AAG1B,iBAA6C;;;ACpB7C,0BAA4B;AAI5B,IAAM,2BAA2B,UAAU,KAAK;AAK1C,SAAU,sBAAsB,OAAuB;AAC3D,QAAM,eAAW,mCAAc,KAAK;AACpC,WAAS,CAAC,KAAK,SAAS,CAAC,IAAI,MAAM,KAAK;AACxC,WAAS,CAAC,KAAK,SAAS,CAAC,IAAI,MAAM,KAAK;AACxC,SAAO;AACT;;;ADyBA,IAAMC,gBAA4C;EAChD,IAAI;EACJ,MAAM;EACN,aAAa;EACb,KAAK;EACL,QAAQ,EAAC,MAAM,SAAS,SAAS,MAAM,OAAO,CAAA,EAAE;EAChD,gBAAgB,EAAC,MAAM,YAAY,OAAO,MAAK;EAAE,EAAC;;EAElD,qBAAqB,EAAC,MAAM,YAAY,OAAO,QAAQ,MAAK;EAC5D,kBAAkB,EAAC,MAAM,YAAY,OAAO,MAAK;EAAE,EAAC;EACpD,aAAa,EAAC,MAAM,YAAY,OAAO,MAAK;EAAE,EAAC;EAC/C,kBAAkB;IAChB,MAAM;IACN,SAAS;;IAET,OAAO,CAAC,WAAoB,UAAiB,QAAQ,MAAM,OAAO,SAAS;;;AAOzE,IAAO,WAAP,cAAqD,4BAE1D;;EAuBC,IAAI,WAAQ;AA1Fd;AA4FI,aAAO,UAAK,UAAL,mBAAY,iBAAgB,KAAK,MAAM;EAChD;;EAGS,oBAAiB;AACxB,WAAO;EACT;EAES,kBAAe;AAEtB,SAAK,MAAM,iBAAiB;AAC5B,SAAK,MAAM,gBAAgB;AAC3B,SAAK,MAAM,cAAc;EAC3B;EAES,YAAY,EAAC,aAAa,OAAO,SAAQ,GAAyB;AACzE,UAAM,EAAC,SAAQ,IAAI,KAAK;AAGxB,QAAI,YAAY,eAAe,MAAM,gBAAgB,SAAS,aAAa;AACzE,WAAK,MAAM,cAAc,KAAK,mBAAmB,KAAK;AAEtD,WAAK,cAAa;AAClB,WAAK,SAAS,MAAM,KAAK,UAAU,UAAU,sBAAsB,GAAG,CAAC;IACzE,WAAW,KAAC,aAAAC,YAAU,MAAM,QAAQ,SAAS,QAAQ,CAAC,GAAG;AACvD,WAAK,SAAS,MAAM,KAAK,UAAU,UAAU,gBAAgB,GAAG,CAAC;IACnE,WAAW,YAAY,iBAAiB;AACtC,WAAK,SAAS,MAAM,KAAK,UAAU,UAAU,kBAAkB,CAAC;IAClE;EACF;EAES,gBAAa;EAEtB;EAES,eAAY;AAGnB,UAAM,EAAC,QAAQ,OAAO,sBAAqB,IAAI,KAAK;AAEpD,WACE,SACA,IAAI,2BAAY;MACd,GAAG,KAAK,iBAAiB,EAAC,IAAI,SAAQ,CAAC;MACvC,wBACE,sBAAsB,QAAQ,cAC1B,+BAAkB,SAClB,+BAAkB;MACxB;MACA;KACD;EAEL;EAEA,MAAM,mBAAmB,GAAW,GAAS;AAlJ/C;AAmJI,UAAM,EAAC,sBAAqB,IAAI,KAAK;AACrC,QAAI,uBAAuB;AAEzB,YAAM,cAAc,QAAM,gBAAK,MAAM,aAAY,uBAAvB,4BAA4C;QACpE,GAAG;QACH,cAAc,sBAAsB;QACpC;QACA;QACA,aAAa;;AAEf,aAAO;IACT;AACA,WAAO;EACT;EAEA,mBAAmB,OAAoB;AACrC,QAAI,MAAM,gBAAgB,wBAAa;AACrC,aAAO,MAAM;IACf;AAEA,QAAI,OAAO,MAAM,SAAS,UAAU;AAClC,iBAAO,8BAAkB;QACvB,KAAK,MAAM;QACX,aAAa,MAAM;QACnB,MAAM,MAAM;OACb;IACH;AAEA,UAAM,IAAI,MAAM,oCAAoC;EACtD;;EAGA,MAAM,gBAAa;AAnLrB;AAoLI,UAAM,EAAC,YAAW,IAAI,KAAK;AAC3B,QAAI;AACF,WAAK,MAAM;AACX,YAAM,WAAW,MAAM,YAAY,YAAW;AAG9C,UAAI,KAAK,MAAM,gBAAgB,aAAa;AAC1C,mBAAK,gBAAe,MAApB,mBAAwB,MAAM,eAAe;MAC/C;IACF,SAAS,OAAP;AACA,iBAAK,gBAAe,MAApB,mBAAwB,MAAM,oBAAoB;IACpD;AACE,WAAK,MAAM;IACb;EACF;;EAGA,MAAM,UAAU,UAAoB,QAAc;AArMpD;AAsMI,UAAM,EAAC,QAAQ,YAAW,IAAI,KAAK;AAGnC,QAAI,gBAAgB,SAAS,OAAO,WAAW,GAAG;AAChD;IACF;AAEA,UAAM,SAAS,SAAS,UAAS;AACjC,UAAM,EAAC,OAAO,OAAM,IAAI;AACxB,UAAM,YAAY,KAAK,aAAY;AACnC,QAAI,EAAC,IAAG,IAAI,KAAK;AACjB,QAAI,QAAQ,QAAQ;AAElB,YAAM,SAAS,aAAa,cAAc;IAC5C;AACA,UAAM,gBAAoC;MACxC;MACA;MACA,aAAa;QACX,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;QACrB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;;MAEvB;MACA,KAAK;;AAEP,QAAI,QAAQ,aAAa;AACvB,YAAM,MAAM,sBAAsB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACxD,YAAM,MAAM,sBAAsB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACxD,oBAAc,cAAc,CAAC,KAAK,GAAG;IACvC;AAEA,QAAI;AACF,WAAK,MAAM;AACX,WAAK,MAAM,iBAAiB,SAAS;AAErC,YAAM,QAAQ,MAAM,KAAK,MAAM,YAAY,SAAS,aAAa;AAGjE,UAAI,KAAK,MAAM,gBAAgB,WAAW;AACxC,mBAAK,gBAAe,MAApB,mBAAwB,MAAM,YAAY;AAE1C,aAAK,SAAS;UACZ;UACA;UACA,uBAAuB;UACvB,eAAe;SAChB;MACH;IACF,SAAS,OAAP;AACA,WAAK,WAAW,OAAgB,YAAY;AAC5C,iBAAK,gBAAe,MAApB,mBAAwB,MAAM,iBAAiB,WAAW;IAC5D;AACE,WAAK,MAAM;IACb;EACF;;;EAKQ,eAAY;AAClB,WAAO,KAAK,MAAM;EACpB;;EAGQ,SAAS,IAAc,KAAK,KAAG;AACrC,iBAAa,KAAK,MAAM,UAAU;AAClC,SAAK,MAAM,aAAa,WAAW,MAAM,GAAE,GAAI,EAAE;EACnD;;AArMO,SAAA,YAAY;AACZ,SAAA,eAA6BD;;;AEhEtC,IAAAE,iBAAsC;AAEtC,IAAMC,gBAA4C;EAChD,WAAW,EAAC,MAAM,YAAY,OAAO,EAAC;EACtC,aAAa;;AASf,IAAqB,mBAArB,cAAuF,wBAGtF;;AACQ,iBAAA,YAAY;AACZ,iBAAA,eAAeA;iCALH;;;ACDrB,kBAAiB;AAKjB,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,WAAW,IAAI,YAAY;AACjC,IAAM,mBAAmB,MAAM,KAAK;AAE9B,SAAU,OACd,IACA,OACA,SAAyB;AAEzB,QAAM,UAAU,KAAK;AAErB,SAAO,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,OAAO;AACxE;AAEA,SAAS,aAAa,IAAU;AAC9B,MAAI,MAAM,KAAK;AACb,WAAQ,IAAI,KAAQ,IAAI,KAAK,KAAK;EACpC;AACA,SAAQ,IAAI,KAAQ,IAAI,KAAK,IAAI,OAAO,IAAI;AAC9C;AAEM,SAAU,OAAO,IAAoB;AACzC,SAAO,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;AAClD;AAEM,SAAU,YAAY,MAAc,CAAC,GAAG,CAAC,GAAmB;AAChE,UAAQ,MAAM;IACZ,KAAK;AACH,aAAO,CAAC,GAAG,GAAG,CAAC;IACjB,KAAK;AACH,aAAO,CAAC,CAAC,GAAG,GAAG,CAAC;IAClB,KAAK;AACH,aAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnB,KAAK;AACH,aAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,KAAK;AACH,aAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACnB,KAAK;AACH,aAAO,CAAC,GAAG,GAAG,EAAE;IAClB;AACE,YAAM,IAAI,MAAM,cAAc;EAClC;AACF;AAEM,SAAU,YAAY,CAAC,GAAG,GAAG,CAAC,GAA2B;AAC7D,QAAM,MAAM,KAAK,MAAM,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC;AAClD,QAAM,MAAM,KAAK,MAAM,GAAG,CAAC;AAE3B,SAAO,CAAC,MAAM,kBAAkB,MAAM,gBAAgB;AACxD;AAEM,SAAU,iBAAiB,KAAW;AAC1C,MAAI,MAAM,YAAAC,QAAK,WAAW,KAAK,MAAM,EAAE,EAAE,SAAS,CAAC;AAEnD,SAAO,IAAI,SAAS,YAAY,UAAU;AAExC,UAAM,MAAM;EACd;AAGA,QAAM,WAAW,IAAI,YAAY,GAAG;AAGpC,QAAM,QAAQ,IAAI,UAAU,GAAG,CAAC;AAEhC,QAAM,OAAO,IAAI,UAAU,GAAG,QAAQ;AACtC,QAAM,SAAS,KAAK,SAAS;AAE7B,QAAM,QAAQ,YAAAA,QAAK,WAAW,OAAO,MAAM,CAAC,EAAE,SAAS,EAAE;AACzD,MAAI,OAAO,YAAAA,QAAK,WAAW,MAAM,MAAM,CAAC,EAAE,SAAS,CAAC;AAEpD,SAAO,KAAK,SAAS,QAAQ;AAE3B,WAAO,MAAM;EACf;AAEA,SAAO,GAAG,SAAS;AACrB;AAEA,SAAS,sBAAsB,GAAW,OAAyB,IAAY,IAAU;AACvF,MAAI,OAAO,GAAG;AACZ,QAAI,OAAO,GAAG;AACZ,YAAM,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC;AAC1B,YAAM,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC;IAC5B;AAEA,UAAM,IAAI,MAAM,CAAC;AACjB,UAAM,CAAC,IAAI,MAAM,CAAC;AAClB,UAAM,CAAC,IAAI;EACb;AACF;AAEM,SAAU,mBAAmB,gBAAsB;AAKvD,QAAM,QAAQ,eAAe,MAAM,GAAG;AACtC,QAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,QAAM,WAAW,MAAM,CAAC;AACxB,QAAM,WAAW,SAAS;AAC1B,QAAM,QAAQ,CAAC,GAAG,CAAC;AACnB,MAAI;AAEJ,WAAS,IAAI,WAAW,GAAG,KAAK,GAAG,KAAK;AACtC,YAAQ,WAAW;AACnB,UAAM,MAAM,SAAS,CAAC;AACtB,QAAI,KAAK;AACT,QAAI,KAAK;AACT,QAAI,QAAQ,KAAK;AACf,WAAK;IACP,WAAW,QAAQ,KAAK;AACtB,WAAK;AACL,WAAK;IACP,WAAW,QAAQ,KAAK;AACtB,WAAK;IACP;AAEA,UAAM,MAAM,KAAK,IAAI,GAAG,QAAQ,CAAC;AACjC,0BAAsB,KAAK,OAAO,IAAI,EAAE;AAExC,UAAM,CAAC,KAAK,MAAM;AAClB,UAAM,CAAC,KAAK,MAAM;EACpB;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,UAAM,IAAI,MAAM,CAAC;AACjB,UAAM,CAAC,IAAI,MAAM,CAAC;AAClB,UAAM,CAAC,IAAI;EACb;AAEA,SAAO,EAAC,MAAM,IAAI,OAAO,MAAK;AAChC;;;AC7IA,IAAAC,eAAiB;AAMjB,SAAS,eAAe,OAAa;AAEnC,QAAM,cAAc,MAAM,OAAO,IAAI,GAAG;AACxC,SAAO,aAAAC,QAAK,WAAW,aAAa,EAAE;AACxC;AAEA,IAAM,iBAAiB;AAIvB,SAAS,aAAa,EACpB,MACA,IACA,MAAK,GAKN;AACC,QAAM,UAAU;IACd,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;;AAQP,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,iBAAiB,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9E,QAAM,SAAS,IAAI,aAAa,IAAI,aAAa,IAAI,CAAC;AACtD,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAM,SAAS,QAAQ,CAAC,EAAE,MAAM,CAAC;AACjC,UAAM,aAAa,QAAQ,IAAI,CAAC;AAChC,UAAM,SAAS,WAAW,CAAC,IAAI,OAAO,CAAC,KAAK;AAC5C,UAAM,SAAS,WAAW,CAAC,IAAI,OAAO,CAAC,KAAK;AAE5C,aAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,aAAO,CAAC,KAAK;AACb,aAAO,CAAC,KAAK;AAGb,YAAM,KAAK,OAAO,IAAI,OAAO,MAAM;AACnC,YAAM,KAAK,OAAO,EAAE;AACpB,YAAM,MAAM,YAAY,MAAM,EAAE;AAChC,YAAM,SAAS,YAAY,GAAG;AAG9B,UAAI,KAAK,IAAI,OAAO,CAAC,CAAC,IAAI,QAAQ;AAChC,eAAO,CAAC,IAAI;MACd;AACA,YAAM,WAAW,OAAO,CAAC,IAAI;AAC7B,aAAO,CAAC,KAAK,WAAW,MAAM,OAAO,WAAW,OAAO,MAAM;AAE7D,aAAO,SAAS,IAAI,OAAO,CAAC;AAC5B,aAAO,SAAS,IAAI,OAAO,CAAC;AAC5B,gBAAU,OAAO,CAAC;IACpB;EACF;AAEA,SAAO,SAAS,IAAI,OAAO,CAAC;AAC5B,SAAO,SAAS,IAAI,OAAO,CAAC;AAC5B,SAAO;AACT;AAGM,SAAU,aAAa,OAAsB;AACjD,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,MAAM,QAAQ,GAAG,IAAI,GAAG;AAE1B,aAAO;IACT;AAEA,YAAQ,eAAe,KAAK;EAC9B;AAEA,SAAO,iBAAiB,MAAM,SAAQ,CAAE;AAC1C;AAQM,SAAU,aAAa,OAAsB;AACjD,QAAM,MAAM,aAAa,KAAK;AAC9B,QAAM,SAAS,mBAAmB,GAAG;AAErC,SAAO,aAAa,MAAM;AAC5B;;;AC5GA,IAAMC,gBAA2C;EAC/C,YAAY,EAAC,MAAM,YAAY,OAAO,CAAC,MAAW,EAAE,MAAK;;AAiB3D,IAAqB,UAArB,cAA8E,qBAG7E;EAIC,gBAAa;AACX,UAAM,EAAC,MAAM,WAAU,IAAI,KAAK;AAEhC,WAAO;MACL;MACA,YAAY;MACZ,gBAAgB;MAChB,YAAY,CAAC,GAAU,eAAe,aAAa,WAAW,GAAG,UAAU,CAAC;;EAEhF;;AAZO,QAAA,YAAY;AACZ,QAAA,eAAeA;uBALH;;;ACtBrB,IAAAC,uBAA4B;AAE5B,IAAM,YAAY;AAEZ,SAAU,qBAAqB,SAAiB,UAAgB;AACpE,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO,KAAK,QAAQ;AACxB,QAAM,QAAQ,OAAO;AAErB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,aAAS;AACT,UAAM,IAAI,SAAS,QAAQ,CAAC,CAAC;AAC7B,QAAI,IAAI;AAAG,WAAK;AAChB,QAAI,IAAI;AAAG,WAAK;EAClB;AACA,SAAO;IACL,CAAC,IAAI,OAAO,YAAY,IAAI,KAAK;IACjC,EAAE,IAAI,YAAY,OAAO,aAAa,IAAI,YAAY,KAAK;;AAE/D;AAEM,SAAU,kBAAkB,SAAiB,WAAW,GAAC;AAC7D,QAAM,CAAC,SAAS,WAAW,IAAI,qBAAqB,SAAS,QAAQ;AACrE,QAAM,CAAC,GAAG,CAAC,QAAI,oCAAc,OAAO;AACpC,QAAM,CAAC,GAAG,CAAC,QAAI,oCAAc,WAAW;AACxC,SAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACtC;;;ACvBA,IAAMC,gBAAgD;EACpD,YAAY,EAAC,MAAM,YAAY,OAAO,CAAC,MAAW,EAAE,QAAO;;AAkB7D,IAAqB,eAArB,cAAmF,qBAGlF;EAIC,gBAAa;AACX,UAAM,EAAC,MAAM,UAAU,WAAU,IAAI,KAAK;AAE1C,UAAM,WAAW,WAAW,OAAO;AAEnC,WAAO;MACL;MACA,YAAY;MACZ,gBAAgB;MAEhB,YAAY,CAAC,GAAU,eAAe,kBAAkB,WAAW,GAAG,UAAU,GAAG,QAAQ;MAC3F,gBAAgB,EAAC,YAAY,SAAQ;;EAEzC;;AAhBO,aAAA,YAAY;AACZ,aAAA,eAAeA;4BALH;;;ACvBrB,IAAAC,eAWO;AACP,IAAAC,iBAA2B;;;ACV3B,0BAA+B;AAC/B,IAAAC,eAA4C;;;ACStC,IAAO,eAAP,MAAmB;EAuBvB,YAAY,OAAgB;AAC1B,SAAK,QAAQ;AACb,SAAK,YAAY;AACjB,SAAK,aAAa;AAClB,SAAK,SAAS;AACd,SAAK,WAAW,CAAA;AAEhB,SAAK,UAAU;AAEf,SAAK,UAAU;AACf,SAAK,mBAAmB;AACxB,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,eAAe;EACtB;;EAGA,IAAI,OAAI;AACN,WAAO,KAAK;EACd;;EAGA,IAAI,KAAK,OAAsB;AAE7B,QAAI,KAAK;AAAO;AAEhB,SAAK,QAAQ;AACb,QAAI,UAAU,OAAO;AACnB,WAAK,cAAc;QACjB,CAAC,MAAM,MAAM,MAAM,KAAK;QACxB,CAAC,MAAM,MAAM,MAAM,KAAK;;IAE5B,OAAO;AACL,WAAK,cAAc;QACjB,CAAC,MAAM,MAAM,MAAM,GAAG;QACtB,CAAC,MAAM,OAAO,MAAM,MAAM;;IAE9B;EACF;EAEA,IAAI,OAAI;AACN,WAAO,KAAK,aAAa,KAAK,UAAU,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK;EACpF;EAEA,IAAI,WAAQ;AACV,WAAO,KAAK,aAAa,CAAC,KAAK;EACjC;EAEA,IAAI,YAAS;AACX,WAAO,QAAQ,KAAK,OAAO,KAAK,CAAC,KAAK;EACxC;EAEA,IAAI,cAAW;AACb,WAAO,KAAK,gBAAgB,KAAK;EACnC;EAEA,IAAI,aAAU;AACZ,UAAM,SAAS,KAAK,UAAW,KAAK,QAAgB,aAAa;AACjE,QAAI,CAAC,OAAO,SAAS,MAAM,GAAG;AAE5B,cAAQ,MAAM,qCAAqC;IACrD;AACA,WAAO;EACT;;EAGQ,MAAM,UAAU,EACtB,SACA,kBACA,QACA,QAAO,GACkB;AACzB,UAAM,EAAC,OAAO,IAAI,MAAM,UAAU,KAAI,IAAI;AAC1C,UAAM,WAAW,KAAK;AAEtB,SAAK,mBAAmB,IAAI,gBAAe;AAC3C,UAAM,EAAC,OAAM,IAAI,KAAK;AAGtB,UAAM,eAAe,MAAM,iBAAiB,gBAAgB,MAAM,UAAO;AACvE,aAAO,KAAK,aAAa,IAAI;IAC/B,CAAC;AAED,QAAI,CAAC,cAAc;AACjB,WAAK,eAAe;AACpB;IACF;AAEA,QAAI,KAAK,cAAc;AACrB,mBAAa,KAAI;AACjB;IACF;AAEA,QAAI,WAAyB;AAC7B,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,QAAQ,EAAC,OAAO,IAAI,MAAM,UAAU,MAAM,OAAM,CAAC;IACpE,SAAS,KAAP;AACA,cAAQ,OAAO;IACjB;AACE,mBAAa,KAAI;IACnB;AAGA,QAAI,aAAa,KAAK,WAAW;AAC/B;IACF;AAEA,SAAK,UAAU;AAGf,SAAK,UAAU;AAGf,QAAI,KAAK,gBAAgB,CAAC,UAAU;AAClC,WAAK,YAAY;AACjB;IACF;AACA,SAAK,YAAY;AACjB,SAAK,eAAe;AAEpB,QAAI,OAAO;AACT,cAAQ,OAAO,IAAI;IACrB,OAAO;AACL,aAAO,IAAI;IACb;EACF;EAEA,SAAS,MAAuB;AAC9B,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK;AACL,SAAK,UAAU,KAAK,UAAU,IAAI;AAClC,WAAO,KAAK;EACd;EAEA,iBAAc;AACZ,QAAI,KAAK,WAAW;AAClB,WAAK,MAAK;AACV,WAAK,UAAU;IACjB;AACA,SAAK,eAAe;EACtB;EAEA,QAAK;AAzLP;AA0LI,QAAI,KAAK,UAAU;AACjB;IACF;AAEA,SAAK,eAAe;AACpB,eAAK,qBAAL,mBAAuB;EACzB;;;;AC5LF,IAAAC,eAA4D;AAE5D,qBAKO;AACP,IAAAC,uBAA4B;AAI5B,IAAMC,aAAY;AAElB,IAAM,WAAW;AAEjB,IAAM,eAAe;EACnB,CAAC,KAAK,GAAG;EACT,CAAC,GAAG,CAAC;EACL,CAAC,GAAG,CAAC;EACL,CAAC,GAAG,CAAC;EACL,CAAC,GAAG,CAAC;;AAEP,IAAM,eAAe,aAAa,OAAO;EACvC,CAAC,GAAG,GAAG;EACP,CAAC,KAAK,CAAC;EACP,CAAC,GAAG,GAAG;EACP,CAAC,KAAK,CAAC;CACR;AACD,IAAM,gBAAgB,aAAa,OAAO;EACxC,CAAC,MAAM,GAAG;EACV,CAAC,MAAM,GAAG;CACX;AAED,IAAM,UAAN,MAAa;EAUX,YAAY,GAAG,GAAG,GAAC;AACjB,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,IAAI;EACX;EAEA,IAAI,WAAQ;AACV,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,IAAI,KAAK,IAAI;AACnB,YAAM,IAAI,KAAK,IAAI;AACnB,YAAM,IAAI,KAAK,IAAI;AACnB,WAAK,YAAY;QACf,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,IAAI,QAAQ,IAAI,GAAG,GAAG,CAAC;QACvB,IAAI,QAAQ,IAAI,GAAG,IAAI,GAAG,CAAC;;IAE/B;AACA,WAAO,KAAK;EACd;;EAGA,OAAO,QASN;AACC,UAAM,EAAC,UAAU,eAAe,iBAAiB,MAAM,MAAM,QAAQ,QAAQ,QAAO,IAAI;AACxF,UAAM,iBAAiB,KAAK,kBAAkB,iBAAiB,QAAQ,OAAO;AAG9E,QAAI,UAAU,CAAC,KAAK,aAAa,MAAM,GAAG;AACxC,aAAO;IACT;AAEA,UAAM,WAAW,cAAc,kBAAkB,cAAc;AAC/D,QAAI,WAAW,GAAG;AAChB,aAAO;IACT;AAGA,QAAI,CAAC,KAAK,cAAc;AACtB,UAAI,EAAC,EAAC,IAAI;AACV,UAAI,IAAI,QAAQ,KAAK,MAAM;AAGzB,cAAM,WACH,eAAe,WAAW,SAAS,cAAc,IAAI,SAAS,QAAS,SAAS;AACnF,aAAK,KAAK,MAAM,KAAK,KAAK,QAAQ,CAAC;MACrC;AACA,UAAI,KAAK,MAAM;AAEb,aAAK,WAAW;AAChB,eAAO;MACT;IACF;AAGA,SAAK,WAAW;AAChB,SAAK,eAAe;AACpB,eAAW,SAAS,KAAK,UAAU;AACjC,YAAM,OAAO,MAAM;IACrB;AACA,WAAO;EACT;EAEA,YAAY,SAAoB,CAAA,GAAE;AAChC,QAAI,KAAK,UAAU;AACjB,aAAO,KAAK,IAAI;IAClB;AACA,QAAI,KAAK,WAAW;AAClB,iBAAW,QAAQ,KAAK,WAAW;AACjC,aAAK,YAAY,MAAM;MACzB;IACF;AACA,WAAO;EACT;EAEA,aAAa,CAAC,MAAM,MAAM,MAAM,IAAI,GAAS;AAC3C,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,CAAC;AAChC,UAAM,SAASA,aAAY;AAE3B,WACE,KAAK,IAAI,SAAS,QAClB,KAAK,IAAI,SAAS,SACjB,KAAK,IAAI,KAAK,SAAS,SACvB,KAAK,IAAI,KAAK,SAAS;EAE5B;EAEA,kBACE,QACA,aACA,SAA6C;AAE7C,QAAI,SAAS;AAIX,YAAM,YAAY,KAAK,IAAI,IAAI,gBAAgB,KAAK,IAAI,IAAI,eAAe;AAG3E,YAAM,oBAAgC,CAAA;AACtC,iBAAW,KAAK,WAAW;AACzB,cAAM,SAAmB,eAAe,KAAK,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC;AAC5E,eAAO,CAAC,IAAI,OAAO,CAAC;AACpB,0BAAkB,KAAK,QAAQ,MAAM,CAAC;AAEtC,YAAI,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG;AAE3B,iBAAO,CAAC,IAAI,OAAO,CAAC;AACpB,4BAAkB,KAAK,QAAQ,MAAM,CAAC;QACxC;MACF;AAEA,iBAAO,kDAAkC,iBAAiB;IAC5D;AAGA,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,CAAC;AAChC,UAAM,SAASA,aAAY;AAC3B,UAAM,UAAU,KAAK,IAAI,SAAS,cAAcA;AAEhD,UAAM,UAAUA,cAAa,KAAK,IAAI,KAAK;AAE3C,WAAO,IAAI,sCACT,CAAC,SAAS,SAAS,OAAO,CAAC,CAAC,GAC5B,CAAC,UAAU,QAAQ,UAAU,QAAQ,OAAO,CAAC,CAAC,CAAC;EAEnD;;AAII,SAAU,kBACd,UACA,MACA,QACA,QAAe;AAEf,QAAM,UACJ,oBAAoB,+BAAkB,SAAS;;IAE3C,SAAS;MACT;AAGN,QAAM,SAAkB,OAAO,OAAO,SAAS,iBAAgB,CAAE,EAAE,IACjE,CAAC,EAAC,QAAQ,SAAQ,MAAM,IAAI,qBAAM,OAAO,MAAK,EAAG,OAAM,GAAI,QAAQ,CAAC;AAEtE,QAAM,gBAAgB,IAAI,6BAAc,MAAM;AAG9C,QAAM,gBAAgB,SAAS,eAAe,cAAc,CAAC;AAC7D,QAAM,eAAgB,UAAU,OAAO,CAAC,IAAI,iBAAkB;AAC9D,QAAM,eAAgB,UAAU,OAAO,CAAC,IAAI,iBAAkB;AAG9D,QAAM,OAAO,oBAAoB,oCAAuB,SAAS,SAAS,KAAK,OAAO;AAGtF,MAAI,QAAQ;AACV,UAAM,CAAC,QAAQ,QAAQ,QAAQ,MAAM,IAAI;AACzC,UAAM,cAAU,oCAAc,CAAC,QAAQ,MAAM,CAAC;AAC9C,UAAM,kBAAc,oCAAc,CAAC,QAAQ,MAAM,CAAC;AAClD,aAAS,CAAC,QAAQ,CAAC,GAAGA,aAAY,QAAQ,CAAC,GAAG,YAAY,CAAC,GAAGA,aAAY,YAAY,CAAC,CAAC;EAC1F;AAEA,QAAM,OAAO,IAAI,QAAQ,GAAG,GAAG,CAAC;AAChC,QAAM,kBAAkB;IACtB;IACA;IACA;IACA,iBAAiB,CAAC,cAAc,YAAY;IAC5C;IACA;IACA;;IAEA,QAAQ;;AAGV,OAAK,OAAO,eAAe;AAE3B,MACE,oBAAoB,oCACpB,SAAS,gBACT,SAAS,aAAa,SAAS,GAC/B;AAEA,oBAAgB,SAAS;AACzB,WAAO,KAAK,OAAO,eAAe,GAAG;AACnC,UAAI,EAAE,gBAAgB,SAAS,CAAC,UAAU;AACxC;MACF;IACF;AACA,oBAAgB,SAAS;AACzB,WAAO,KAAK,OAAO,eAAe,GAAG;AACnC,UAAI,EAAE,gBAAgB,SAAS,UAAU;AACvC;MACF;IACF;EACF;AAEA,SAAO,KAAK,YAAW;AACzB;;;ACvPA,IAAMC,aAAY;AAClB,IAAM,iBAAyB,CAAC,WAAW,WAAW,UAAU,QAAQ;AAIjE,IAAM,UAAU;EACrB,MAAM;EACN,OAAO;EACP,UAAU,CAAC,OAAO,aACf,SAAS,YAAY,UAAU,QAChC,OAAO,UAAU,YAChB,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,SAAO,OAAO,QAAQ,QAAQ;EACrE,OAAO,CAAC,QAAQ,WAAU;AACxB,QAAI,WAAW,QAAQ;AACrB,aAAO;IACT;AACA,QAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,QAAQ,MAAM,GAAG;AACpD,aAAO;IACT;AACA,UAAM,MAAM,OAAO;AACnB,QAAI,QAAQ,OAAO,QAAQ;AACzB,aAAO;IACT;AACA,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAI,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG;AAC3B,eAAO;MACT;IACF;AACA,WAAO;EACT;;AAGI,SAAU,aAAa,MAAc,aAAoB;AAC7D,QAAM,oBAAoB;;IAExB,YAAY,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;;IAE/C,YAAY,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;;IAE/C,YAAY,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;;IAE/C,YAAY,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;;AAEjD,QAAM,iBAAyB;;IAE7B,KAAK,IAAI,GAAG,kBAAkB,IAAI,OAAK,EAAE,CAAC,CAAC,CAAC;;IAE5C,KAAK,IAAI,GAAG,kBAAkB,IAAI,OAAK,EAAE,CAAC,CAAC,CAAC;;IAE5C,KAAK,IAAI,GAAG,kBAAkB,IAAI,OAAK,EAAE,CAAC,CAAC,CAAC;;IAE5C,KAAK,IAAI,GAAG,kBAAkB,IAAI,OAAK,EAAE,CAAC,CAAC,CAAC;;AAE9C,SAAO;AACT;AAEA,SAAS,WAAW,GAAS;AAC3B,SAAO,KAAK,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,GAAG,OAAQ,KAAK,KAAK,IAAI,EAAE,WAAW,CAAC,IAAK,GAAG,CAAC,CAAC;AACvF;AAEM,SAAU,mBACd,UACA,MAGC;AAED,MAAI,CAAC,YAAY,CAAC,SAAS,QAAQ;AACjC,WAAO;EACT;AACA,QAAM,EAAC,OAAO,GAAE,IAAI;AAEpB,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,UAAM,IAAI,WAAW,EAAE,IAAI,SAAS;AACpC,eAAW,SAAS,CAAC;EACvB;AAEA,MAAI,MAAM;AACV,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,UAAM,QAAQ,IAAI,OAAO,IAAI,QAAQ,GAAG;AACxC,UAAM,IAAI,QAAQ,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;EAC7C;AAGA,MAAI,OAAO,UAAU,MAAM,CAAC,KAAK,OAAO,UAAU,MAAM,CAAC,GAAG;AAC1D,UAAM,IAAI,QAAQ,WAAW,OAAO,KAAK,IAAI,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC;EACzE;AACA,SAAO;AACT;AAKA,SAAS,eAAe,UAAoB,QAAyB,QAAc;AACjF,MAAI;AACJ,MAAI,UAAU,OAAO,WAAW,GAAG;AACjC,UAAM,CAAC,MAAM,IAAI,IAAI;AACrB,UAAM,UAAU,SAAS,UAAU,EAAC,GAAG,KAAI,CAAC;AAC5C,UAAM,UAAU,SAAS,UAAU,EAAC,GAAG,KAAI,CAAC;AAC5C,aAAS;MACP,KAAK,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;MAC/B,KAAK,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;MAC/B,KAAK,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;MAC/B,KAAK,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;;EAEnC,OAAO;AACL,aAAS,SAAS,UAAS;EAC7B;AACA,MAAI,CAAC,SAAS,cAAc;AAC1B,WAAO;;MAEL,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;MAClD,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;;MAElD,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;MAClD,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;;EAEtD;AACA,SAAO;IACL,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IAC7B,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IAC7B,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IAC7B,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;;AAEjC;AAGM,SAAU,cAAc,EAC5B,UACA,GACA,SAAQ,GAQT;AACC,QAAM,eAAe,SAAS,gBAAgB,CAAC,QAAQ;AACvD,SAAO,aAAa,IAAI,OAAK,wBAAwB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC3E;AAEA,SAAS,wBAEP,UAEA,GAEA,UAA+D;AAE/D,MAAI,CAAC,MAAM,QAAQ,CAAC,GAAG;AACrB,UAAM,IAAI,SAAS,IAAI,SAAS;AAChC,UAAM,IAAI,SAAS,IAAI,SAAS;AAChC,UAAM,EAAC,OAAO,OAAM,IAAI;AAExB,UAAM,kBAAkB,EAAC,SAAS,EAAC;AAEnC,UAAM,UAAU,SAAS,UAAU,CAAC,GAAG,CAAC,GAAG,eAAe;AAC1D,UAAM,WAAW,SAAS,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,eAAe;AACnE,UAAM,aAAa,SAAS,UAAU,CAAC,GAAG,IAAI,MAAM,GAAG,eAAe;AACtE,UAAM,cAAc,SAAS,UAAU,CAAC,IAAI,OAAO,IAAI,MAAM,GAAG,eAAe;AAE/E,WAAO;MACL,KAAK,IAAI,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,GAAG,YAAY,CAAC,CAAC;MAC/D,KAAK,IAAI,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,GAAG,YAAY,CAAC,CAAC;MAC/D,KAAK,IAAI,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,GAAG,YAAY,CAAC,CAAC;MAC/D,KAAK,IAAI,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,GAAG,YAAY,CAAC,CAAC;;EAEnE;AAEA,QAAM,UAAU,wBAAwB,UAAU,EAAE,CAAC,GAAG,QAAQ;AAChE,QAAM,UAAU,wBAAwB,UAAU,EAAE,CAAC,GAAG,QAAQ;AAEhE,SAAO;IACL,KAAK,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC/B,KAAK,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC/B,KAAK,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC/B,KAAK,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;;AAEnC;AAEA,SAAS,kBAAkB,MAAc,OAAe,oBAA4B;AAClF,MAAI,oBAAoB;AACtB,UAAM,uBAAuB,aAAa,MAAM,kBAAkB,EAAE,IAClE,OAAM,IAAI,QAASA,UAAS;AAE9B,WAAO;EACT;AACA,SAAO,KAAK,IAAI,OAAM,IAAI,QAASA,UAAS;AAC9C;AAEA,SAAS,SAAS,GAAW,UAAgB;AAC3C,SAAQ,KAAK,IAAI,GAAG,CAAC,IAAIA,aAAa;AACxC;AAGM,SAAU,eAAe,GAAW,GAAW,GAAS;AAC5D,QAAM,QAAQ,SAAS,GAAGA,UAAS;AACnC,QAAM,MAAO,IAAI,QAAS,MAAM;AAChC,QAAM,IAAI,KAAK,KAAM,IAAI,KAAK,KAAK,IAAK;AACxC,QAAM,MAAO,MAAM,KAAK,KAAM,KAAK,KAAK,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;AAC1E,SAAO,CAAC,KAAK,GAAG;AAClB;AAEA,SAAS,QAAQ,GAAW,GAAW,GAAW,UAAgB;AAChE,QAAM,QAAQ,SAAS,GAAG,QAAQ;AAClC,SAAO,CAAE,IAAI,QAASA,YAAY,IAAI,QAASA,UAAS;AAC1D;AACM,SAAU,kBACd,UACA,GACA,GACA,GACA,WAAmBA,YAAS;AAE5B,MAAI,SAAS,cAAc;AACzB,UAAM,CAAC,MAAM,KAAK,IAAI,eAAe,GAAG,GAAG,CAAC;AAC5C,UAAM,CAAC,MAAM,KAAK,IAAI,eAAe,IAAI,GAAG,IAAI,GAAG,CAAC;AACpD,WAAO,EAAC,MAAM,OAAO,MAAM,MAAK;EAClC;AACA,QAAM,CAAC,MAAM,GAAG,IAAI,QAAQ,GAAG,GAAG,GAAG,QAAQ;AAC7C,QAAM,CAAC,OAAO,MAAM,IAAI,QAAQ,IAAI,GAAG,IAAI,GAAG,GAAG,QAAQ;AACzD,SAAO,EAAC,MAAM,KAAK,OAAO,OAAM;AAClC;AAEA,SAAS,uBACP,UACA,GACA,UACA,QACA,oBAA4B;AAE5B,QAAM,OAAO,eAAe,UAAU,MAAM,MAAM;AAClD,QAAM,QAAQ,SAAS,GAAG,QAAQ;AAClC,QAAM,CAAC,MAAM,MAAM,MAAM,IAAI,IAAI,kBAAkB,MAAM,OAAO,kBAAkB;AAClF,QAAM,UAAuB,CAAA;AAM7B,WAAS,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,MAAM,KAAK;AAC5C,aAAS,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,MAAM,KAAK;AAC5C,cAAQ,KAAK,EAAC,GAAG,GAAG,EAAC,CAAC;IACxB;EACF;AACA,SAAO;AACT;AAQM,SAAU,eAAe,EAC7B,UACA,SACA,SACA,QACA,QACA,WAAWA,YACX,aACA,oBACA,aAAa,EAAC,GAWf;AACC,MAAI,IAAI,SAAS,eACb,KAAK,MAAM,SAAS,OAAO,KAAK,KAAKA,aAAY,QAAQ,CAAC,IAAI,aAC9D,KAAK,KAAK,SAAS,IAAI,IAAI;AAC/B,MAAI,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,KAAK,IAAI,SAAS;AAC1E,QAAI,CAAC,QAAQ;AACX,aAAO,CAAA;IACT;AACA,QAAI;EACN;AACA,MAAI,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,KAAK,IAAI,SAAS;AAC1E,QAAI;EACN;AACA,MAAI,oBAAoB;AACxB,MAAI,eAAe,sBAAsB,UAAU,CAAC,SAAS,cAAc;AACzE,wBAAoB,aAAa,QAAQ,WAAW;EACtD;AACA,SAAO,SAAS,eACZ,kBAAkB,UAAU,GAAG,QAAQ,MAAM,IAC7C,uBACE,UACA,GACA,UACA,qBAAqB,gBACrB,kBAAkB;AAE1B;AAKM,SAAU,cAAc,GAAS;AACrC,SAAO,qCAAqC,KAAK,CAAC;AACpD;AAEM,SAAU,iBAAiB,GAAM;AACrC,SACE,OAAO,SAAS,EAAE,IAAI,KACtB,OAAO,SAAS,EAAE,KAAK,KACvB,OAAO,SAAS,EAAE,IAAI,KACtB,OAAO,SAAS,EAAE,KAAK;AAE3B;;;AC3TM,SAAU,QAAiB,SAA0B;AACzD,MAAI,aAAkB,CAAA;AACtB,MAAI;AAEJ,SAAO,CAAC,SAAY;AAClB,eAAW,OAAO,MAAM;AACtB,UAAI,CAAC,QAAQ,KAAK,GAAG,GAAG,WAAW,GAAG,CAAC,GAAG;AACxC,uBAAe,QAAQ,IAAI;AAC3B,qBAAa;AACb;MACF;IACF;AACA,WAAO;EACT;AACF;AAEA,SAAS,QAAQ,GAAG,GAAC;AACnB,MAAI,MAAM,GAAG;AACX,WAAO;EACT;AACA,MAAI,MAAM,QAAQ,CAAC,GAAG;AAGpB,UAAM,MAAM,EAAE;AACd,QAAI,CAAC,KAAK,EAAE,WAAW,KAAK;AAC1B,aAAO;IACT;AAEA,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAI,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG;AACjB,eAAO;MACT;IACF;AACA,WAAO;EACT;AACA,SAAO;AACT;;;AJ/BA,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAoBpB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AAShC,IAAM,sBAAsB;AAE5B,IAAM,aAAa;EACjB,CAAC,gBAAgB,GAAG;EACpB,CAAC,gBAAgB,GAAG;EACpB,CAAC,cAAc,GAAG,MAAK;EAAE;;AA4CpB,IAAM,0BAAyE;EACpF,QAAQ;EACR,UAAU;EAEV,SAAS;EACT,SAAS;EACT,cAAc;EACd,kBAAkB;EAClB,oBAAoB;EACpB,QAAQ;EACR,aAAa;EACb,cAAc;EACd,YAAY;;;EAIZ,YAAY,MAAK;EAAE;EACnB,cAAc,MAAK;EAAE;EACrB,aAAa,MAAK;EAAE;;AAOhB,IAAO,YAAP,MAAgB;;;;;EAwBpB,YAAY,MAAoB;AAyRxB,SAAA,iBAAiB,QAAQ,aAAa;AAxR5C,SAAK,OAAO,EAAC,GAAG,yBAAyB,GAAG,KAAI;AAChD,SAAK,WAAW,KAAK,IAAI;AAEzB,SAAK,aAAa,UAAO;AAvJ7B;AAwJM,uBAAK,MAAK,eAAV,4BAAuB;AACvB,UAAI,KAAK,KAAK,qBAAqB,MAAM;AACvC,aAAK,kBAAkB,KAAK;AAC5B,aAAK,aAAY;MACnB;IACF;AAEA,SAAK,oBAAoB,IAAI,qCAAiB;MAC5C,kBAAkB,KAAK,KAAK,cAAc,KAAK,KAAK,KAAK,eAAe;MACxE,aAAa,KAAK,KAAK;MACvB,cAAc,KAAK,KAAK;KACzB;AAGD,SAAK,SAAS,oBAAI,IAAG;AACrB,SAAK,SAAS,CAAA;AACd,SAAK,SAAS;AACd,SAAK,iBAAiB;AAGtB,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,iBAAiB;AACtB,SAAK,eAAe;AAEpB,SAAK,eAAe,IAAI,qBAAO;AAC/B,SAAK,sBAAsB,IAAI,qBAAO;EACxC;;EAGA,IAAI,QAAK;AACP,WAAO,KAAK;EACd;EAEA,IAAI,gBAAa;AACf,WAAO,KAAK;EACd;EAEA,IAAI,WAAQ;AACV,WAAO,KAAK,mBAAmB,QAAQ,KAAK,eAAe,MAAM,UAAQ,KAAK,QAAQ;EACxF;EAEA,IAAI,cAAW;AACb,WAAO,KAAK,mBAAmB,QAAQ,KAAK,eAAe,KAAK,UAAQ,KAAK,WAAW;EAC1F;EAEA,WAAW,MAAoB;AAC7B,WAAO,OAAO,KAAK,MAAM,IAAI;AAC7B,QAAI,OAAO,SAAS,KAAK,OAAO,GAAG;AACjC,WAAK,WAAW,KAAK,MAAM,KAAK,OAAiB;IACnD;AACA,QAAI,OAAO,SAAS,KAAK,OAAO,GAAG;AACjC,WAAK,WAAW,KAAK,KAAK,KAAK,OAAiB;IAClD;EACF;;EAGA,WAAQ;AACN,eAAW,QAAQ,KAAK,OAAO,OAAM,GAAI;AACvC,UAAI,KAAK,WAAW;AAClB,aAAK,MAAK;MACZ;IACF;AACA,SAAK,OAAO,MAAK;AACjB,SAAK,SAAS,CAAA;AACd,SAAK,iBAAiB;EACxB;EAEA,YAAS;AACP,eAAW,MAAM,KAAK,OAAO,KAAI,GAAI;AACnC,YAAM,OAAO,KAAK,OAAO,IAAI,EAAE;AAC/B,UAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK,eAAe,SAAS,IAAI,GAAG;AAC/D,aAAK,OAAO,OAAO,EAAE;MACvB,OAAO;AACL,aAAK,eAAc;MACrB;IACF;EACF;;;;EAKA,OACE,UACA,EAAC,QAAQ,YAAW,IAA+D;IACjF,QAAQ;IACR,aAAa;KACd;AAED,UAAM,uBAAuB,cAAc,IAAI,qBAAQ,WAAW,IAAI,IAAI,qBAAO;AACjF,UAAM,mBAAmB,CAAC,qBAAqB,OAAO,KAAK,YAAY;AACvE,QACE,CAAC,KAAK,aACN,CAAC,SAAS,OAAO,KAAK,SAAS,KAC/B,KAAC,qBAAO,KAAK,SAAS,MAAM,KAC5B,kBACA;AACA,UAAI,kBAAkB;AACpB,aAAK,sBAAsB,qBAAqB,MAAK,EAAG,OAAM;AAC9D,aAAK,eAAe;MACtB;AACA,WAAK,YAAY;AACjB,WAAK,UAAU;AACf,YAAM,cAAc,KAAK,eAAe;QACtC;QACA,SAAS,KAAK;QACd,SAAS,KAAK;QACd;QACA,aAAa,KAAK;QAClB,oBAAoB,KAAK;OAC1B;AACD,WAAK,iBAAiB,YAAY,IAAI,WAAS,KAAK,SAAS,OAAO,IAAI,CAAC;AAEzE,UAAI,KAAK,QAAQ;AAEf,aAAK,aAAY;MACnB;IAEF,WAAW,KAAK,aAAa;AAC3B,WAAK,iBAAiB,KAAK,eAAgB,IAAI,UAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,CAAC;IACxF;AAGA,UAAM,UAAU,KAAK,iBAAgB;AACrC,SAAK,eAAc;AAEnB,QAAI,KAAK,QAAQ;AAEf,WAAK,aAAY;IACnB;AAEA,QAAI,SAAS;AACX,WAAK;IACP;AAEA,WAAO,KAAK;EACd;;EAGA,cACE,MACA,UACA,aAA4B;AAE5B,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO;IACT;AAEA,QAAI,YAAY,KAAK,WAAW;AAC9B,YAAM,YAAY,KAAK,eAAe;QACpC,UAAU,KAAK;QACf,GAAG,KAAK;QACR;OACD;AACD,UAAI,EAAC,KAAI,IAAI;AACb,iBAAW,CAAC,MAAM,MAAM,MAAM,IAAI,KAAK,WAAW;AAChD,YAAI;AACJ,YAAI,UAAU,MAAM;AAClB,qBAAW,KAAK,OAAO,QAAQ,KAAK,OAAO,QAAQ,KAAK,QAAQ,QAAQ,KAAK,QAAQ;QACvF,OAAO;AACL,cAAI,eAAe,CAAC,qBAAQ,SAAS,OAAO,WAAW,GAAG;AACxD,kBAAM,CAAC,MAAM,KAAK,OAAO,MAAM,IAAI,aACjC,CAAC,KAAK,MAAM,KAAK,KAAK,KAAK,OAAO,KAAK,MAAM,GAC7C,WAAW;AAEb,mBAAO,EAAC,MAAM,KAAK,OAAO,OAAM;UAClC;AAEA,gBAAM,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,MAAM;AACzC,gBAAM,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,MAAM;AACzC,qBAAW,KAAK,OAAO,QAAQ,KAAK,QAAQ,QAAQ,KAAK,QAAQ,KAAK;QACxE;AACA,YAAI,UAAU;AACZ,iBAAO;QACT;MACF;AACA,aAAO;IACT;AACA,WAAO;EACT;;;EAKA,eAAe,EACb,UACA,SACA,SACA,QACA,aACA,mBAAkB,GAUnB;AACC,UAAM,EAAC,UAAU,QAAQ,WAAU,IAAI,KAAK;AAC5C,WAAO,eAAe;MACpB;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;KACD;EACH;;EAGA,UAAU,OAAgB;AACxB,WAAO,GAAG,MAAM,KAAK,MAAM,KAAK,MAAM;EACxC;;EAGA,YAAY,OAAgB;AAC1B,WAAO,MAAM;EACf;;EAGA,gBAAgB,OAAgB;AAC9B,UAAM,EAAC,SAAQ,IAAI,KAAK;AACxB,WAAO,EAAC,MAAM,kBAAkB,KAAK,WAAY,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,EAAC;EACvF;;EAGA,eAAe,OAAgB;AAC7B,UAAM,IAAI,KAAK,MAAM,MAAM,IAAI,CAAC;AAChC,UAAM,IAAI,KAAK,MAAM,MAAM,IAAI,CAAC;AAChC,UAAM,IAAI,MAAM,IAAI;AACpB,WAAO,EAAC,GAAG,GAAG,EAAC;EACjB;;EAGQ,mBAAgB;AACtB,UAAM,qBAAqB,KAAK,KAAK,sBAAsB;AAE3D,UAAM,eAAe,IAAI,MAAM,KAAK,OAAO,IAAI;AAC/C,QAAI,IAAI;AAER,eAAW,QAAQ,KAAK,OAAO,OAAM,GAAI;AAEvC,mBAAa,GAAG,IAAI,KAAK;AACzB,WAAK,aAAa;AAClB,WAAK,YAAY;IACnB;AAEA,eAAW,QAAQ,KAAK,gBAAgB;AACtC,WAAK,aAAa;AAClB,WAAK,YAAY;IACnB;AAGA,KAAC,OAAO,uBAAuB,aAC3B,qBACA,WAAW,kBAAkB,GAAG,MAAM,KAAK,KAAK,OAAO,OAAM,CAAE,CAAC;AAEpE,QAAI;AAEJ,eAAW,QAAQ,KAAK,OAAO,OAAM,GAAI;AACvC,UAAI,aAAa,GAAG,MAAM,KAAK,WAAW;AACxC,eAAO;MACT;IACF;AAEA,WAAO;EACT;EAMQ,iBAAc;AACpB,UAAM,EAAC,cAAc,EAAC,IAAI,KAAK;AAE/B,UAAM,kBAAkC,CAAA;AACxC,QAAI,sBAAsB;AAC1B,eAAW,QAAQ,KAAK,OAAO,OAAM,GAAI;AAEvC,UAAI,KAAK,WAAW;AAClB;AACA,YAAI,CAAC,KAAK,cAAc,CAAC,KAAK,WAAW;AACvC,0BAAgB,KAAK,IAAI;QAC3B;MACF;IACF;AAEA,WAAO,cAAc,KAAK,sBAAsB,eAAe,gBAAgB,SAAS,GAAG;AAEzF,YAAM,OAAO,gBAAgB,MAAK;AAClC,WAAK,MAAK;AACV;IACF;EACF;;EAGQ,eAAY;AAClB,UAAM,EAAC,OAAM,IAAI;AAGjB,eAAW,QAAQ,OAAO,OAAM,GAAI;AAClC,WAAK,SAAS;AACd,UAAI,KAAK,UAAU;AACjB,aAAK,SAAS,SAAS;MACzB;IACF;AAGA,eAAW,QAAQ,OAAO,OAAM,GAAI;AAClC,YAAM,SAAS,KAAK,oBAAoB,IAAI;AAC5C,WAAK,SAAS;AACd,UAAI,iCAAQ,UAAU;AACpB,eAAO,SAAS,KAAK,IAAI;MAC3B;IACF;EACF;;;;;EAMQ,eAAY;AA/dtB;AAgeI,UAAM,EAAC,QAAQ,KAAI,IAAI;AAEvB,UAAM,eACJ,KAAK;KAEJ,KAAK,qBAAqB,OAAO,WAAW,sBAAsB,KAAK,cAAc;AACxF,UAAM,mBAAmB,KAAK,oBAAoB;AAElD,UAAM,YAAY,OAAO,OAAO,gBAAgB,KAAK,iBAAiB;AAEtE,QAAI,WAAW;AACb,iBAAW,CAAC,IAAI,IAAI,KAAK,QAAQ;AAC/B,YAAI,CAAC,KAAK,aAAa,CAAC,KAAK,YAAY;AAEvC,eAAK,kBAAkB,KAAK,qBAAqB,OAAO,KAAK,aAAa;AAC1E,iBAAO,OAAO,EAAE;AAChB,2BAAK,MAAK,iBAAV,4BAAyB;QAC3B;AACA,YAAI,OAAO,QAAQ,gBAAgB,KAAK,kBAAkB,kBAAkB;AAC1E;QACF;MACF;AACA,WAAK,aAAY;AACjB,WAAK,SAAS;IAChB;AACA,QAAI,KAAK,QAAQ;AAEf,WAAK,SAAS,MAAM,KAAK,KAAK,OAAO,OAAM,CAAE,EAAE,KAAK,CAAC,IAAI,OAAO,GAAG,OAAO,GAAG,IAAI;AAEjF,WAAK,SAAS;IAChB;EACF;EAKQ,SAAS,OAAkB,QAAgB;AACjD,UAAM,KAAK,KAAK,UAAU,KAAK;AAC/B,QAAI,OAAO,KAAK,OAAO,IAAI,EAAE;AAC7B,QAAI,cAAc;AAElB,QAAI,CAAC,QAAQ,QAAQ;AACnB,aAAO,IAAI,aAAa,KAAK;AAC7B,aAAO,OAAO,MAAM,KAAK,gBAAgB,KAAK,KAAK,CAAC;AACpD,aAAO,OAAO,MAAM,EAAC,IAAI,MAAM,KAAK,YAAY,KAAK,KAAK,EAAC,CAAC;AAC5D,oBAAc;AACd,WAAK,OAAO,IAAI,IAAI,IAAI;AACxB,WAAK,SAAS;IAChB,WAAW,QAAQ,KAAK,aAAa;AACnC,oBAAc;IAChB;AACA,QAAI,QAAQ,aAAa;AAEvB,WAAK,SAAS;QACZ,SAAS,KAAK,KAAK;QACnB,kBAAkB,KAAK;QACvB,QAAQ,KAAK;QACb,SAAS,KAAK,KAAK;OACpB;IACH;AAEA,WAAO;EACT;EAEA,oBAAoB,MAAkB;AACpC,UAAM,EAAC,WAAW,EAAC,IAAI;AAEvB,QAAI,QAAQ,KAAK;AACjB,WAAO,KAAK,YAAY,KAAK,IAAI,UAAU;AACzC,cAAQ,KAAK,eAAe,KAAK;AACjC,YAAM,SAAS,KAAK,SAAS,KAAK;AAClC,UAAI,QAAQ;AACV,eAAO;MACT;IACF;AACA,WAAO;EACT;;AASF,SAAS,uBAAuB,UAAwB;AACtD,aAAW,QAAQ,UAAU;AAC3B,SAAK,QAAQ;EACf;AACA,aAAW,QAAQ,UAAU;AAC3B,QAAI,KAAK,cAAc,CAAC,0BAA0B,IAAI,GAAG;AACvD,+BAAyB,IAAI;IAC/B;EACF;AACA,aAAW,QAAQ,UAAU;AAC3B,SAAK,YAAY,QAAQ,KAAK,QAAS,kBAAkB;EAC3D;AACF;AAGA,SAAS,uBAAuB,UAAwB;AACtD,aAAW,QAAQ,UAAU;AAC3B,SAAK,QAAQ;EACf;AACA,aAAW,QAAQ,UAAU;AAC3B,QAAI,KAAK,YAAY;AACnB,gCAA0B,IAAI;IAChC;EACF;AAEA,QAAM,cAAc,MAAM,KAAK,QAAQ,EAAE,KAAK,CAAC,IAAI,OAAO,GAAG,OAAO,GAAG,IAAI;AAC3E,aAAW,QAAQ,aAAa;AAC9B,SAAK,YAAY,QAAQ,KAAK,QAAS,kBAAkB;AAEzD,QAAI,KAAK,aAAa,KAAK,aAAa,KAAK,QAAS,qBAAqB;AAEzE,iBAAW,SAAS,KAAK,UAAU;AACjC,cAAM,QAAQ;MAChB;IACF,WAAW,KAAK,YAAY;AAC1B,+BAAyB,IAAI;IAC/B;EACF;AACF;AAGA,SAAS,0BAA0B,WAAuB;AACxD,MAAI,OAA4B;AAChC,SAAO,MAAM;AACX,QAAI,KAAK,YAAY,KAAK,SAAS;AACjC,WAAK,SAAU;AACf,aAAO;IACT;AACA,WAAO,KAAK;EACd;AACA,SAAO;AACT;AAGA,SAAS,yBAAyB,MAAI;AACpC,aAAW,SAAS,KAAK,UAAU;AACjC,QAAI,MAAM,YAAY,MAAM,SAAS;AACnC,YAAM,SAAS;IACjB,OAAO;AACL,+BAAyB,KAAK;IAChC;EACF;AACF;;;ADvlBA,IAAAC,eAAsB;AAEtB,IAAMC,gBAA6C;EACjD,cAAc;EACd,MAAM,EAAC,MAAM,QAAQ,OAAO,CAAA,EAAE;EAC9B,gBAAgB,QAAQ;EACxB,iBAAiB,EAAC,MAAM,YAAY,OAAO,CAAC,UAAe,IAAI,4BAAa,KAAK,EAAC;EAClF,aAAa,EAAC,MAAM,YAAY,UAAU,MAAM,OAAO,KAAI;;EAE3D,gBAAgB,EAAC,MAAM,YAAY,UAAU,MAAM,OAAO,KAAI;EAC9D,YAAY,EAAC,MAAM,YAAY,OAAO,UAAO;EAAE,EAAC;EAChD,cAAc,EAAC,MAAM,YAAY,OAAO,UAAO;EAAE,EAAC;;EAElD,aAAa,EAAC,MAAM,YAAY,OAAO,SAAO,QAAQ,MAAM,GAAG,EAAC;EAChE,QAAQ,EAAC,MAAM,SAAS,UAAU,MAAM,OAAO,MAAM,SAAS,KAAI;EAClE,UAAU;EACV,SAAS;EACT,SAAS;EACT,cAAc;EACd,kBAAkB;EAClB,oBAAoB;EACpB,QAAQ;EACR,aAAa;EACb,cAAc;EACd,YAAY;;AAsHd,IAAqB,YAArB,cAAiF,4BAEhF;EAUC,kBAAe;AACb,SAAK,QAAQ;MACX,SAAS;MACT,UAAU;;EAEd;EAEA,gBAAa;AA7Lf;AA8LI,qBAAK,UAAL,mBAAY,YAAZ,mBAAqB;EACvB;EAEA,IAAI,WAAQ;AAjMd;AAkMI,WAAO,SACL,sBAAK,UAAL,mBAAY,YAAZ,mBAAqB,kBAArB,mBAAoC,MAClC,UAAQ,KAAK,YAAY,KAAK,UAAU,KAAK,OAAO,MAAM,WAAS,MAAM,QAAQ,EAClF;EAEL;EAEA,kBAAkB,EAAC,YAAW,GAAC;AAC7B,WAAO,YAAY;EACrB;EAEA,YAAY,EAAC,YAAW,GAAyB;AAC/C,QAAI,EAAC,QAAO,IAAI,KAAK;AACrB,UAAM,eAAe,YAAY,sBAAsB,YAAY;AACnE,UAAM,cACJ,YAAY,eACX,YAAY,0BACV,YAAY,sBAAsB,OAAO,YAAY,sBAAsB;AAEhF,QAAI,CAAC,SAAS;AACZ,gBAAU,IAAI,KAAK,MAAM,aAAa,KAAK,mBAAkB,CAAE;AAC/D,WAAK,SAAS,EAAC,QAAO,CAAC;IACzB,WAAW,cAAc;AACvB,cAAQ,WAAW,KAAK,mBAAkB,CAAE;AAE5C,UAAI,aAAa;AAGf,gBAAQ,UAAS;MACnB,OAAO;AAEL,gBAAQ,MAAM,QAAQ,UAAO;AAC3B,eAAK,SAAS;QAChB,CAAC;MACH;IACF;AAEA,SAAK,eAAc;EACrB;EAEA,qBAAkB;AAChB,UAAM,EACJ,UACA,cACA,kBACA,oBACA,QACA,SACA,SACA,aACA,cACA,WAAU,IACR,KAAK;AAET,WAAO;MACL;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MAEA,aAAa,KAAK,YAAY,KAAK,IAAI;MACvC,YAAY,KAAK,YAAY,KAAK,IAAI;MACtC,aAAa,KAAK,aAAa,KAAK,IAAI;MACxC,cAAc,KAAK,cAAc,KAAK,IAAI;;EAE9C;EAEQ,iBAAc;AACpB,UAAM,UAAU,KAAK,MAAM;AAC3B,UAAM,EAAC,QAAQ,YAAW,IAAI,KAAK;AACnC,UAAM,cAAc,QAAQ,OAAO,KAAK,QAAQ,UAAU,EAAC,QAAQ,YAAW,CAAC;AAC/E,UAAM,EAAC,SAAQ,IAAI;AAEnB,UAAM,sBAAsB,KAAK,MAAM,aAAa;AACpD,UAAM,iBAAiB,KAAK,MAAM,gBAAgB;AAElD,QAAI,aAAa,uBAAuB,iBAAiB;AACvD,WAAK,gBAAe;IACtB;AAEA,QAAI,gBAAgB;AAElB,WAAK,SAAS,EAAC,YAAW,CAAC;IAC7B;AAEA,SAAK,MAAM,WAAW;EACxB;EAEA,kBAAe;AACb,UAAM,EAAC,QAAO,IAAI,KAAK;AACvB,UAAM,EAAC,eAAc,IAAI,KAAK;AAE9B,QAAI,gBAAgB;AAElB,qBAAe,QAAS,aAAc;IACxC;EACF;EAEA,YAAY,MAAyB;AACnC,SAAK,MAAM,WAAW,IAAI;AAC1B,SAAK,SAAS;AAEd,SAAK,eAAc;EACrB;EAEA,aAAa,OAAY,MAAyB;AAChD,SAAK,MAAM,YAAY,KAAK;AAC5B,SAAK,SAAS;AAEd,SAAK,eAAc;EACrB;EAEA,cAAc,MAAyB;AACrC,SAAK,MAAM,aAAa,IAAI;EAC9B;;EAIA,YAAY,MAAmB;AAC7B,UAAM,EAAC,MAAM,aAAa,MAAK,IAAI,KAAK;AACxC,UAAM,EAAC,OAAM,IAAI;AAEjB,SAAK,MACH,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,IAAI,mBAAmB,MAAM,IAAI,IAAI;AAErF,QAAI,aAAa;AACf,aAAO,YAAY,IAAI;IACzB;AACA,QAAI,SAAS,KAAK,KAAK;AACrB,aAAO,MAAM,KAAK,KAAK,EAAC,UAAU,QAAQ,OAAO,MAAM,OAAM,CAAC;IAChE;AACA,WAAO;EACT;EAEA,gBACE,OAKC;AAED,WAAO,KAAK,MAAM,gBAAgB,KAAK;EACzC;EAEA,uBAAuB,MAAkB;AACvC,WAAO;EACT;EAEA,eAAe,QAA4B;AAEzC,UAAM,cAAc,OAAO;AAC3B,UAAM,aAAmC,YAAY,MAAc;AACnE,UAAM,OAAO,OAAO;AACpB,QAAI,KAAK,QAAQ;AACf,WAAK,OAAO;IACd;AACA,SAAK,aAAa;AAClB,SAAK,qBAAqB;AAC1B,WAAO;EACT;EAEU,qBAAqB,MAAiC;AAC9D,SAAK,mBAAmB,oBAAoB,IAAI;EAClD;EAEA,eAAY;AACV,WAAO,KAAK,MAAM,QAAS,MAAM,IAAI,CAAC,SAAsB;AAC1D,YAAM,gBAAgB,KAAK,uBAAuB,IAAI;AAEtD,UAAI,CAAC,KAAK,YAAY,CAAC,KAAK,SAAS;MAErC,WAAW,CAAC,KAAK,QAAQ;AACvB,cAAM,SAAS,KAAK,gBAAgB;UAClC,GAAG,KAAK;UACR,GAAG,KAAK,iBAAiB;YACvB,IAAI,KAAK;YACT,gBAAgB,KAAK,MAAM;WAC5B;UACD,MAAM,KAAK;UACX,SAAS;UACT;SACD;AACD,aAAK,aAAU,aAAAC,UAAQ,QAAQ,OAAO,EAAqC,IAAI,WAC7E,MAAM,MAAM;UACV;UACA,GAAG;SACJ,CAAC;MAEN,WACE,iBACA,KAAK,OAAO,CAAC,KACb,OAAO,KAAK,aAAa,EAAE,KACzB,cAAY,KAAK,OAAQ,CAAC,EAAE,MAAM,QAAQ,MAAM,cAAc,QAAQ,CAAC,GAEzE;AACA,aAAK,SAAS,KAAK,OAAO,IAAI,WAAS,MAAM,MAAM,aAAa,CAAC;MACnE;AACA,aAAO,KAAK;IACd,CAAC;EACH;EAEA,eAAe,EAAC,OAAO,SAAQ,GAAgB;AAC7C,UAAM,EAAC,KAAI,IAAK,MAAsC;AACtD,UAAM,EAAC,YAAW,IAAI,KAAK;AAC3B,WAAO,KAAK,MAAM,QAAS,cACzB,MACA,UACA,cAAc,IAAI,qBAAQ,WAAW,IAAI,IAAI;EAEjD;;AA7OO,UAAA,eAA6BD;AAC7B,UAAA,YAAY;yBAJA;;;AMpKrB,IAAAE,iBAAwC;;;ACAxC,IAAM,eAAe;;;;;;AAcd,IAAM,gBAAgB;EAC3B,MAAM;EACN,IAAI;EACJ,IAAI;EACJ,cAAc;IACZ,WAAW;IACX,aAAa;IACb,aAAa;;;;;ADjBjB,IAAMC,gBAA8C;EAClD,WAAW;EACX,aAAa,EAAC,MAAM,UAAU,OAAO,KAAK,KAAK,EAAC;EAChD,aAAa,EAAC,MAAM,UAAU,OAAO,GAAG,KAAK,EAAC;EAC9C,eAAe,EAAC,MAAM,YAAY,OAAO,CAAC,MAAW,EAAE,WAAU;;AA8BnE,IAAqB,aAArB,cAAiF,yBAGhF;EAIC,aAAU;AACR,UAAM,UAAU,MAAM,WAAU;AAChC,YAAQ,SAAS;MACf,YAAY;;;;;MAMZ,gBAAgB;;MAGhB,YAAY;;;MAIZ,kBAAkB;;;;;MAMlB,0BAA0B;;;;;AAM5B,YAAQ,UAAU,CAAC,GAAG,QAAQ,SAAS,aAAa;AACpD,WAAO;EACT;EAEA,kBAAe;AACb,UAAM,gBAAe;AAErB,UAAM,mBAAmB,KAAK,oBAAmB;AACjD,qBAAkB,aAAa;MAC7B,YAAY;QACV,MAAM;QACN,UAAU;QACV,kBAAkB;UAChB,oBAAoB;YAClB,cAAc;;UAEhB,wBAAwB;YACtB,cAAc;;;;KAIrB;EACH;EAEA,KAAK,QAAM;AACT,UAAM,EAAC,WAAW,aAAa,YAAW,IAAI,KAAK;AACnD,UAAM,aAAyB,EAAC,WAAW,aAAa,YAAW;AAEnE,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,aAAa,SAAS,EAAC,OAAO,WAAU,CAAC;AAC/C,UAAM,KAAK,MAAM;EACnB;;AA9DO,WAAA,YAAY;AACZ,WAAA,eAAeA;0BALH;;;AExCrB,IAAAC,gBAAgD;AAEhD,IAAAC,eAA+E;;;ACF/E,IAAAC,gBAQO;AACP,IAAAC,eASO;AACP,IAAAC,iBAA2D;AAM3D,IAAM,sBAAsB;AAE5B,SAAS,cAAc,YAAY,UAAQ;AACzC,MAAI;AACJ,MAAI,eAAe,UAAa,eAAe,MAAM;AACnD,cAAU;EACZ,WAAW,OAAO,eAAe,UAAU;AACzC,cAAU,EAAC,GAAG,YAAY,SAAQ;EACpC,OAAO;AACL,cAAU,EAAC,YAAY,SAAQ;EACjC;AACA,SAAO;AACT;AAEA,IAAMC,gBAAkD;EACtD,GAAG,4BAAa;EAChB,eAAe;EACf,UAAU,EAAC,MAAM,UAAU,KAAK,GAAG,KAAK,GAAG,OAAO,EAAC;EACnD,eAAe;EACf,YAAY,EAAC,MAAM,YAAY,OAAO,CAAC,MAAW,EAAE,QAAO;EAC3D,UAAU;;AAuCZ,IAAqB,iBAArB,cAGU,4BAAkE;EAO1E,kBAAe;AACb,mBAAe,YAAW;AAC1B,SAAK,QAAQ;MACX,cAAc;MACd,YAAY;;EAEhB;EAWA,kBAAkB,EAAC,YAAW,GAAyB;AACrD,WAAO,KAAK,wBAAuB,IAC/B,YAAY,qBACZ,YAAY;EAClB;EAEA,YAAY,EAAC,OAAO,YAAW,GAAyB;AACtD,QACE,MAAM,kBAAkB,SACvB,YAAY,eACV,YAAY,yBAAyB,YAAY,sBAAsB,aAC1E;AACA,YAAM,YAAY,KAAK,sBAAqB;AAC5C,WAAK,SAAS,SAAS;IACzB;AAEA,SAAK,gBAAgB,KAAK,QAAQ,QAA+B;EACnE;EAEQ,wBAAqB;AAC3B,QAAI,aAAa;AACjB,QAAI,cAAc;AAClB,QAAI,iBAAiB;AAErB,UAAM,EAAC,UAAU,WAAU,QAAI,6BAAe,KAAK,MAAM,IAAI;AAC7D,eAAW,UAAU,UAAU;AAC7B,iBAAW;AACX,YAAM,QAAQ,KAAK,MAAM,WAAW,QAAQ,UAAU;AAEtD,YAAM,oBAAgB,6BAAc,KAAK;AACzC,UAAI,aAAa,GAAG;AAClB,qBAAa;AACb,YAAI,CAAC,KAAK,MAAM;AAAe;MACjC,WAAW,eAAe,eAAe;AACvC,yBAAiB;AACjB;MACF;AACA,cAAI,0BAAW,KAAK,GAAG;AACrB,sBAAc;AACd;MACF;IACF;AAEA,WAAO;MACL;MACA,cAAc,cAAc,QAAI,uCAAwB,YAAY,IAAI,IAAI;MAC5E;MACA;;EAEJ;EAEQ,0BAAuB;AAC7B,QAAI,KAAK,MAAM,kBAAkB,QAAQ;AACvC,YAAM,EAAC,YAAY,aAAa,eAAc,IAAI,KAAK;AACvD,YAAM,EAAC,SAAQ,IAAI,KAAK;AACxB,aACE,QAAQ,qCAAU,UAAU,KAC5B,kBACA,eACC,cAAc,KAAK,cAAc;IAEtC;AAEA,WAAO,KAAK,MAAM;EACpB;EAEQ,gBAAgB,UAA6B;AACnD,QAAI,KAAK,wBAAuB,GAAI;AAClC;IACF;AACA,UAAM,EAAC,YAAY,cAAc,UAAS,IAAI,KAAK;AACnD,QAAI,aAAa,GAAG;AAClB;IACF;AACA,UAAM,MACJ,KAAK,MAAM,qBAAiB,4BAAa,SAAS,UAAU,SAAS,WAAW,UAAU;AAC5F,QAAI,cAAc,KAAK;AACrB;IACF;AACA,QAAI,WAAW;AACb,UAAI;AACF,cAAM,eAAW,4BAAa,WAAW,GAAG;AAC5C,YAAI,WAAW,eAAe,qBAAqB;AACjD;QACF;MACF,QAAE;MAGF;IACF;AAEA,UAAM,EAAC,cAAa,IAAI,SAAS;AAEjC,QAAI,WAAW,YAAY,GAAG;AAC9B,UAAM,CAAC,WAAW,SAAS,QAAI,4BAAa,GAAG;AAE/C,UAAM,CAAC,SAAS,OAAO,IAAI,SAAS,YAAY,CAAC,WAAW,SAAS,CAAC;AACtE,eAAW,SAAS,IAAI,OAAI;AAC1B,YAAM,gBAAgB,SAAS,YAAY,CAAC;AAC5C,aAAO;SACJ,cAAc,CAAC,IAAI,WAAW,cAAc,CAAC;SAC7C,cAAc,CAAC,IAAI,WAAW,cAAc,CAAC;;IAElD,CAAC;AAED,SAAK,SAAS,EAAC,WAAW,KAAK,SAAQ,CAAC;EAC1C;EAEA,eAAY;AACV,WAAO,KAAK,wBAAuB,IAAK,KAAK,oBAAmB,IAAK,KAAK,mBAAkB;EAC9F;EAEQ,mBAAgB;AACtB,UAAM,EACJ,gBACA,UACA,UACA,UACA,WACA,SACA,QACA,gBACA,gBACA,oBACA,oBACA,cACA,cACA,cACA,cACA,aACA,eAAc,IACZ,KAAK;AAET,WAAO;MACL;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA,gBAAgB;QACd,cAAc,eAAe;QAC7B,cAAc,eAAe;QAC7B,cAAc,eAAe;QAC7B,cAAc,eAAe;;;EAUnC;EAEQ,sBAAmB;AACzB,UAAM,EAAC,MAAM,YAAY,gBAAgB,SAAQ,IAAI,KAAK;AAE1D,UAAM,gBAAgB,KAAK,iBAAiB,qBAAqB,2BAAY;AAC7E,UAAM,eAAe,KAAK,iBAAgB;AAC1C,iBAAa,eAAe,aAAa,cAAc,eAAe,YAAY,QAAQ;AAE1F,WAAO,IAAI,cACT,cACA,KAAK,iBAAiB;MACpB,IAAI;MACJ,gBAAgB,aAAa;KAC9B,GACD;MACE;MACA,YAAY;MACZ,eAAe;MACf,gBAAgB;MAChB,YAAY,CAAC,QAAQ,eAAc;AACjC,cAAM,YAAY,WAAW,QAAQ,UAAU;AAC/C,eAAO,eAAe,YAAY,WAAW,QAAQ,CAAC;MACxD;KACD;EAEL;EAEQ,qBAAkB;AACxB,UAAM,EAAC,MAAM,YAAY,eAAc,IAAI,KAAK;AAEhD,UAAM,gBAAgB,KAAK,iBAAiB,gBAAgB,0BAAW;AACvE,UAAM,eAAe,KAAK,iBAAgB;AAC1C,iBAAa,eAAe,cAAc,eAAe;AAEzD,WAAO,IAAI,cACT,cACA,KAAK,iBAAiB;MACpB,IAAI;MACJ,aAAa;MACb,gBAAgB,aAAa;KAC9B,GACD;MACE;MACA,gBAAgB;;MAChB,QAAQ;MACR,UAAU,KAAK,MAAM;MACrB,aAAa,mBAAmB,KAAK,MAAM,UAAU;KACtD;EAEL;;AA7OO,eAAA,eAAeA;AACf,eAAA,YAAY;AAGZ,eAAA,cAAc,MAAK;AAAE;+BART;;;AD7ErB,IAAMC,iBAAkD;EACtD,aAAa,EAAC,MAAM,YAAY,OAAO,CAAC,MAAW,EAAE,SAAQ;;AAiB/D,IAAqB,iBAArB,cAAqF,qBAGpF;EAQC,kBAAe;AACb,6BAAe,YAAW;EAC5B;EAEA,YAAY,EAAC,OAAO,YAAW,GAAyB;AACtD,QACE,YAAY,eACX,YAAY,yBAAyB,YAAY,sBAAsB,aACxE;AACA,YAAM,EAAC,MAAM,YAAW,IAAI;AAC5B,YAAM,WAAsC,CAAA;AAE5C,YAAM,EAAC,UAAU,WAAU,QAAI,6BAAe,IAAI;AAClD,iBAAW,UAAU,UAAU;AAC7B,mBAAW;AACX,cAAM,WAAW,YAAY,QAAQ,UAAU;AAC/C,cAAM,mBAAe,mCAAoB,UAAU,IAAI;AAEvD,mBAAW,WAAW,cAAc;AAElC,qBAAW,QAAQ,SAAS;AAC1B,gCAAoB,IAAI;UAC1B;AACA,mBAAS,KAAK,KAAK,eAAe,EAAC,QAAO,GAAG,QAAQ,WAAW,KAAK,CAAC;QACxE;MACF;AAEA,WAAK,SAAS,EAAC,SAAQ,CAAC;IAC1B;EACF;EAEA,gBAAa;AACX,UAAM,EAAC,cAAc,cAAc,cAAc,aAAY,IAAI,KAAK;AAEtE,WAAO;MACL,MAAM,KAAK,MAAM;MACjB,YAAY,OAAK,EAAE;MAEnB,cAAc,KAAK,oBAAoB,YAAY;MACnD,cAAc,KAAK,oBAAoB,YAAY;MACnD,cAAc,KAAK,oBAAoB,YAAY;MACnD,cAAc,KAAK,oBAAoB,YAAY;;EAEvD;;AAlDO,eAAA,YAAY;AACZ,eAAA,eAAeA;+BALH;;;AEzBrB,IAAAC,iBAAuB;AAEvB,IAAAC,gBAeO;AACP,IAAAC,iBAA8B;AAC9B,IAAAC,sBAA8B;;;AClB9B,kBAAkD;AAClD,yBAA0B;AAC1B,oBAAoB;AAGpB,yBAAoD;;;ACJpD,IAAMC,gBAAe;;;;AAUd,IAAM,eAAe;EAC1B,MAAM;EACN,IAAIA;EACJ,IAAIA;EACJ,cAAc;IACZ,gBAAgB;;;;;ACjBpB,IAAA,iCAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA,IAAA,mCAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AHiBA,SAAS,2BAA2B,YAA0B;AAC5D,QAAM,oBAAoB,WAAW,aAAa,WAAW;AAC7D,QAAM,cAAc,kBAAkB,MAAM,SAAS,kBAAkB;AACvE,QAAM,oBAAoB,WAAW,WAAW,WAAW;AAC3D,MAAI,CAAC,mBAAmB;AACtB,eAAW,SAAS;MAClB,MAAM;MACN,OAAO,IAAI,WAAW,cAAc,CAAC,EAAE,KAAK,GAAG;MAC/C,YAAY;;EAEhB;AACF;AAEA,IAAMC,iBAA6C;EACjD,aAAa,EAAC,MAAM,UAAU,OAAO,KAAI;EACzC,YAAY,EAAC,MAAM,SAAS,OAAO,MAAM,UAAU,KAAI;;AAmBzD,IAAqB,YAArB,cAAgF,mCAG/E;EAIC,aAAU;AACR,UAAM,UAAU,MAAM,WAAU;AAChC,UAAM,UAAU,QAAQ;AACxB,YAAQ,KAAK,gCAAa,YAAY;AACtC,WAAO,EAAC,GAAG,SAAS,oCAAI,qCAAE;EAC5B;EAEA,kBAAe;AACb,UAAM,EAAC,WAAU,IAAI,KAAK;AAC1B,UAAM,gBAAe;AAErB,UAAM,mBAAmB,KAAK,oBAAmB;AACjD,QAAI,YAAY;AAEd,uBAAkB,IAAI;QACpB,yBAAyB;UACvB,MAAM;UACN,MAAM;UACN,SAAS;;UAET,QAAQ,KAAK;;OAEhB;IACH;EACF;EAEA,YAAY,QAA8B;AACxC,UAAM,YAAY,MAAM;AAExB,UAAM,EAAC,OAAO,SAAQ,IAAI;AAC1B,QAAI,MAAM,gBAAgB,SAAS,aAAa;AAC9C,WAAK,0BAA0B,MAAM,WAAW;IAClD;EACF;EAEA,KAAK,MAAI;AACP,UAAM,EAAC,WAAU,IAAI,KAAK;AAC1B,UAAM,EAAC,MAAK,IAAI,KAAK;AACrB,QAAI,CAAC,OAAO;AACV;IACF;AACA,UAAM,YAAuB;MAC3B,gBAAgB,QAAQ,UAAU;;AAEpC,UAAM,qBAAqB;MACzB,QAAQ,KAAK,QAAQ,SAAS;;AAEhC,UAAM,aAAa,SAAS;MAC1B,eAAe;MACf,MAAM;KACP;AAED,UAAM,KAAK,IAAI;EACjB;EAEU,SAAS,MAAU;AAC3B,UAAM,EAAC,GAAE,IAAI,KAAK;AAClB,UAAM,oBAAoB,KAAK,cAAc,KAAK,MAAM,aAAa,IAAI;AAEzE,SAAK,SAAS,EAAC,kBAAiB,CAAC;AACjC,UAAM,UAAU,KAAK,WAAU;AAC/B,+BAA2B,KAAK,UAAU;AAC1C,UAAM,QAAQ,IAAI,oBAAM,KAAK,QAAQ,QAAQ;MAC3C,GAAG,KAAK,WAAU;MAClB;MACA,UAAU;MACV,cAAc,KAAK,oBAAmB,EAAI,iBAAgB;MAC1D,SAAS;QACP,GAAG,QAAQ;QACX,GAAG,uDAAmB;QACtB,gBAAgB,KAAK,WAAW,YAAY,IAAI;;MAElD,YAAY,uDAAmB;MAC/B,aAAa;KACd;AAED,WAAO;EACT;EAEA,0BAA0B,UAAQ;AAChC,UAAM,EAAC,MAAK,IAAI,KAAK;AACrB,QAAI,OAAO;AACT,YAAM,EAAC,KAAI,IAAI,KAAK;AACpB,YAAM,oBAAoB,KAAK,cAAc,UAAU,IAAY;AAEnE,WAAK,SAAS,EAAC,kBAAiB,CAAC;AAEjC,YAAM,EAAC,qBAAoB,IAAI,kBAAkB;AACjD,YAAM,EAAC,aAAY,IAAI,KAAK;AAC5B,YAAM,kBAAkB;QACtB,SAAS,wBAAwB;QACjC,YAAY,QAAQ,oBAAoB;;AAG1C,YAAM,EAAC,QAAQ,GAAG,iBAAgB,IAAI;QACpC,GAAG,kBAAkB;QACrB,GAAG,kBAAkB;;AAEvB,YAAM,aAAa,SAAS,EAAC,YAAY,iBAAiB,aAAa,iBAAgB,CAAC;IAC1F;EACF;EAEA,cAAc,UAAU,MAAU;AAChC,UAAM,QAAQ,QACZ,SAAS,wBAAwB,SAAS,qBAAqB,gBAAgB;AAGjF,eAAO,8BACL,KAAK,QAAQ,QACb,EAAC,OAAO,GAAG,SAAQ,GACnB,EAAC,QAAQ,KAAK,WAAW,SAAS,YAAY,KAAK,WAAW,UAAS,GACvE;MACE,UAAU;MACV,QAAQ;MACR,aAAa;KACd;EAEL;EAEA,iCAAiC,WAAS;AAExC,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,QAAQ,IAAI,kBAAkB,WAAW,SAAS,UAAU,IAAI;AAEtE,UAAM,eAAe,CAAA;AACrB,aAAS,QAAQ,GAAG,QAAQ,WAAW,QAAQ,SAAS;AACtD,WAAK,mBAAmB,WAAW,KAAK,GAAG,YAAY;AAEvD,YAAM,QAAQ,CAAC,IAAI,aAAa,CAAC;AACjC,YAAM,QAAQ,IAAI,CAAC,IAAI,aAAa,CAAC;AACrC,YAAM,QAAQ,IAAI,CAAC,IAAI,aAAa,CAAC;IACvC;AAEA,cAAU,QAAQ;EACpB;EAEA,cAAc,SAAqB;AAtMrC;AAuMI,UAAM,cAAc,OAAO;AAC3B,eAAK,MAAM,sBAAX,mBAA8B,kBAAkB,QAAQ,aAAW,QAAQ,QAAO;AAClF,SAAK,SAAS,EAAC,mBAAmB,KAAI,CAAC;EACzC;;AA/IO,UAAA,YAAY;AACZ,UAAA,eAAeA;yBALH;;;AD7BrB,IAAAC,gBAAmB;AAEnB,mBAA2C;AAC3C,qBAA4B;AAE5B,IAAM,cAAc,CAAC,CAAC;AAEtB,IAAMC,iBAA+C;EACnD,eAAe,EAAC,MAAM,YAAY,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,EAAC;EACvD,WAAW;;EAGX,MAAM;EACN,QAAQ;EAER,eAAe,EAAC,MAAM,YAAY,OAAO,eAAY;EAAE,EAAC;EACxD,YAAY,EAAC,MAAM,YAAY,OAAO,gBAAa;EAAE,EAAC;EACtD,cAAc,EAAC,MAAM,YAAY,OAAO,gBAAa;EAAE,EAAC;EACxD,aAAa,EAAC,MAAM,YAAY,OAAO,CAAC,MAAM,SAAS,QAAO;EAAE,EAAC;EACjE,eAAe,EAAC,MAAM,YAAY,OAAO,gBAAc,CAAC,KAAK,KAAK,GAAG,EAAC;;AAqCxE,IAAqB,cAArB,cAAmF,6BAElF;EAYC,kBAAe;AACb,QAAI,oBAAoB,KAAK,OAAO;AAClC,wBAAI,QAAQ,kBAAkB,aAAa,EAAC;IAC9C;AAEA,SAAK,QAAQ;MACX,UAAU,CAAA;MACV,WAAW;MACX,iBAAiB,CAAA;MACjB,sBAAsB;;EAE1B;EAEA,IAAI,WAAQ;AA7Gd;AA8GI,WAAO,UAAQ,gBAAK,UAAL,mBAAY,cAAZ,mBAAuB,eAAc,MAAM,QAAQ;EACpE;EAEA,kBAAkB,EAAC,YAAW,GAAyB;AACrD,WAAO,YAAY;EACrB;EAEA,YAAY,EAAC,OAAO,UAAU,YAAW,GAAyB;AAChE,QAAI,MAAM,QAAQ,MAAM,SAAS,SAAS,MAAM;AAE9C,WAAK,aAAa,MAAM,IAAI;IAC9B;AAEA,QAAI,YAAY,iBAAiB;AAC/B,YAAM,EAAC,gBAAe,IAAI,KAAK;AAC/B,YAAM,kBAAkB,OAAO,KAAK,eAAe,EAAE;AACrD,UAAI,iBAAiB;AACnB,aAAK,eAAe,eAAe;AACnC,aAAK,MAAM,uBAAuB;AAClC,aAAK,MAAM,kBAAkB,CAAA;MAC/B;IACF;AACA,QAAI,YAAY,cAAc;AAC5B,YAAM,EAAC,SAAQ,IAAI,KAAK;AACxB,iBAAW,OAAO,UAAU;AAC1B,iBAAS,GAAG,EAAE,cAAc;MAC9B;IACF;EACF;EAEA,iBAAiB,UAAkB;AACjC,UAAM,EAAC,iBAAiB,qBAAoB,IAAI,KAAK;AACrD,SAAK,cAAe,WAAW;AAE/B,oBAAgB,SAAS,EAAE,IAAI;AAC/B,UAAM,eAAe,6DAAuB,SAAS;AACrD,QAAI,CAAC,gBAAgB,CAAC,SAAS,OAAO,YAAY,GAAG;AACnD,WAAK,eAAe,EAAC,iBAAiB,KAAI,CAAC;AAC3C,WAAK,eAAc;IACrB;EACF;EAEA,eAAe,EAAC,MAAM,YAAW,GAAuB;AACtD,UAAM,aAAa,eAAgB,YAAY,MAAc;AAC7D,QAAI,KAAK,QAAQ;AACf,WAAK,SAAS;IAChB;AACC,SAAa,aAAa;AAE3B,WAAO;EACT;EAEA,eAAe,EAAC,OAAO,SAAQ,GAAgB;AAE7C,UAAM,EAAC,KAAI,IAAI,MAAM;AACrB,UAAM,EAAC,IAAI,WAAU,IAAI;AACzB,WAAO,KAAK,YAAY,KAAK,YAAY,SAAS,UAAU;EAC9D;EAEU,qBAAqB,MAAiB;AAC9C,UAAM,aAAc,KAAa;AACjC,UAAM,aAAa,KAAK,MAAM,SAAS,yCAAY,EAAE;AACrD,QAAI,cAAc,WAAW,OAAO;AAClC,iBAAW,MAAM,oBAAoB,IAAI;IAC3C;EACF;EAEQ,MAAM,aAAa,YAAU;AACnC,UAAM,EAAC,cAAc,CAAA,EAAE,IAAI,KAAK;AAIhC,UAAM,UAAU,KAAK,MAAM,UAAU,KAAK,MAAM;AAChD,UAAM,SAAS,MAAM,QAAQ,OAAO,IAAI,QAAQ,CAAC,IAAI;AAErD,UAAM,UAAU,EAAC,aAAa,EAAC,GAAG,YAAW,EAAC;AAC9C,QAAI,mBAAmB;AACvB,QAAI,OAAO,SAAS;AAClB,YAAM,iBAAiB,MAAM,OAAO,QAAQ,YAAY,WAAW;AACnE,UAAI,eAAe,KAAK;AACtB,2BAAmB,eAAe;MACpC;AAEA,UAAI,eAAe,SAAS;AAC1B,gBAAQ,YAAY,QAAQ;UAC1B,GAAG,QAAQ,YAAY;UACvB,SAAS,eAAe;;MAE5B;AACA,aAAO,OAAO,SAAS,cAAc;IACvC;AACA,UAAM,cAAc,UAAM,oBAAK,kBAAkB,QAAQ,QAAQ,WAAW;AAE5E,UAAM,YAAY,IAAI,uBAAU,aAAa;MAC3C,YAAY,KAAK,YAAY,KAAK,IAAI;MACtC,cAAc,KAAK,cAAc,KAAK,IAAI;MAC1C,aAAa,KAAK,MAAM;MACxB,GAAG;KACJ;AAED,SAAK,SAAS;MACZ;MACA,UAAU,CAAA;KACX;AAED,SAAK,eAAe,KAAK,MAAM,eAAe;AAC9C,SAAK,MAAM,cAAc,SAAS;EACpC;EAEQ,YAAY,YAAkB;AACpC,UAAM,EAAC,qBAAoB,IAAI,KAAK;AACpC,SAAK,MAAM,WAAW,UAAU;AAChC,SAAK,eAAe,oBAAoB;AACxC,SAAK,eAAc;EACrB;EAEQ,cAAc,YAAkB;AAEtC,WAAO,KAAK,MAAM,SAAS,WAAW,EAAE;AACxC,SAAK,MAAM,aAAa,UAAU;EACpC;EAEQ,eAAe,WAAkD;AACvE,QAAI,CAAC,WAAW;AACd;IACF;AACA,UAAM,EAAC,UAAS,IAAI,KAAK;AACzB,UAAM,EAAC,SAAQ,IAAI,KAAK;AACxB,UAAM,kBAAkB,OAAO,KAAK,SAAS,EAAE;AAC/C,QAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,WAAW;AAC/C;IACF;AAGA,cAAU,YAAY,OAAO,OAAO,SAAS,CAAC,EAAE,KAAK,iBAAc;AACjE,YAAM,iBAAiB,KAAK,MAAM,gBAAgB;AAClD,UAAI,gBAAgB;AAClB,aAAK,SAAS,EAAC,YAAW,CAAC;MAC7B;IACF,CAAC;EACH;EAEQ,aACN,YACA,UAAgB;AAEhB,QAAI,CAAC,WAAW,SAAS;AACvB,aAAO;IACT;AAEA,YAAQ,WAAW,MAAmB;MACpC,KAAK,uBAAU;AACb,eAAO,KAAK,qBAAqB,YAAY,QAAkC;MACjF,KAAK,uBAAU;AACb,eAAO,KAAK,kBAAkB,UAAU;MAC1C,KAAK,uBAAU;AACb,eAAO,KAAK,qBAAqB,YAAY,QAA4B;MAC3E;AACE,cAAM,IAAI,MAAM,+CAA+C,WAAW,QAAQ,MAAM;IAC5F;EACF;EAEQ,qBACN,YACA,UAAiC;AAEjC,UAAM,EAAC,YAAY,YAAY,cAAc,oBAAoB,YAAW,IAC1E,WAAW;AACb,UAAM,EAAC,WAAW,SAAS,OAAM,IAAI;AAErC,QAAI,CAAC,WAAW;AACd,aAAO;IACT;AACA,UAAM,OAAQ,YAAY,SAAS,MAAM,QAAS;MAChD,QAAQ;QACN,aAAa;;MAEf,YAAY;QACV,UAAU;QACV,QAAQ;QACR,SAAS;;;AAIb,UAAM,EAAC,WAAW,cAAa,IAAI,KAAK;AACxC,UAAM,gBAAgB,KAAK,iBAAiB,cAAc,8BAAe;AACzE,WAAO,IAAI,cACT;MACE;OAEF,KAAK,iBAAiB;MACpB,IAAI;KACL,GACD;MACE,IAAI,GAAG,KAAK,iBAAiB,WAAW;MACxC,MAAM;MACN;MACA,kBAAkB,gCAAkB;MACpC,kBAAkB;MAClB;MACA,UAAU,gBAAgB;MAC1B,SAAS;KACV;EAEL;EAEQ,kBAAkB,YAAkB;AAC1C,UAAM,EAAC,MAAM,WAAW,oBAAoB,YAAW,IAAI,WAAW;AAEtE,UAAM,gBAAgB,KAAK,iBAAiB,cAAc,mCAAe;AAEzE,WAAO,IAAI,cACT;MACE,WAAW;OAEb,KAAK,iBAAiB;MACpB,IAAI;KACL,GACD;MACE,IAAI,GAAG,KAAK,iBAAiB,WAAW;MACxC,MAAM;MACN,MAAM,aAAa;MACnB,YAAY;MAEZ,kBAAkB,gCAAkB;MACpC,kBAAkB;MAClB;MACA,oBAAoB,cAAY,SAAS;MACzC,aAAa,CAAC,GAAG,GAAG,CAAC;MACrB,SAAS;KACV;EAEL;EAEQ,qBAAqB,YAAoB,UAA2B;AAC1E,UAAM,UAAU,WAAW;AAC3B,UAAM,EACJ,YACA,SACA,aACA,oBACA,mBAAmB,gCAAkB,eACrC,UACA,WAAU,IACR;AACJ,UAAM,EAAC,cAAa,IAAI,KAAK;AAE7B,UAAM,WACH,YAAY,SAAS,MAAM,QAC5B,IAAI,wBAAS;MACX,UAAU;MACV,YAAY,gBAAgB,UAAU;MACtC;KACD;AAEH,UAAM,gBAAgB,KAAK,iBAAiB,QAAQ,kBAAS;AAE7D,WAAO,IAAI,cACT,KAAK,iBAAiB;MACpB,IAAI;KACL,GACD;MACE,IAAI,GAAG,KAAK,WAAW,WAAW;MAClC,MAAM;MACN,MAAM;MACN,MAAM;MACN,UAAU,cAAc,UAAU;MAClC,aAAa;MACb;MACA,kBAAkB;MAClB;MACA;MACA,SAAS;KACV;EAEL;EAEA,eAAY;AACV,UAAM,EAAC,WAAW,SAAQ,IAAI,KAAK;AACnC,QAAI,CAAC,WAAW;AACd,aAAO;IACT;AAGA,WAAQ,UAAU,MACf,IAAI,UAAO;AACV,YAAM,aAAc,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE,KAAK,EAAC,KAAI;AAClE,UAAI,EAAC,MAAK,IAAI;AACd,UAAI,KAAK,UAAU;AAEjB,YAAI,CAAC,OAAO;AAEV,kBAAQ,KAAK,aAAa,IAAI;QAChC,WAAW,WAAW,aAAa;AAEjC,kBAAQ,KAAK,aAAa,MAAM,KAAK;AACrC,qBAAW,cAAc;QAC3B;MACF;AACA,iBAAW,QAAQ;AACnB,aAAO;IACT,CAAC,EACA,OAAO,OAAO;EACnB;;AAxUO,YAAA,eAAeA;AACf,YAAA,YAAY;4BAJA;AA8UrB,SAAS,gBAAgB,mBAAiC;AACxD,QAAM,aAA6B,CAAA;AACnC,aAAW,YAAY;IACrB,GAAG,kBAAkB;IACrB,OAAO,IAAI,aAAa,kBAAkB,UAAU,KAAK;;AAE3D,MAAI,kBAAkB,SAAS;AAC7B,eAAW,UAAU,kBAAkB;EACzC;AACA,MAAI,kBAAkB,WAAW;AAC/B,eAAW,YAAY,kBAAkB;EAC3C;AACA,MAAI,kBAAkB,QAAQ;AAC5B,eAAW,SAAS,kBAAkB;EACxC;AACA,MAAI,kBAAkB,WAAW;AAC/B,eAAW,YAAY,kBAAkB;EAC3C;AACA,SAAO;AACT;;;AK/aA,IAAAC,gBAWO;AACP,IAAAC,sBAA8B;AAC9B,IAAAD,gBAAgC;AAEhC,qBAAkC;AAWlC,IAAM,aAAa,CAAC,CAAC;AAErB,IAAME,iBAAgD;EACpD,GAAG,mBAAU;;EAEb,eAAe;;EAEf,SAAS,EAAC,GAAG,SAAS,UAAU,KAAI;;EAEpC,cAAc,EAAC,MAAM,UAAU,OAAO,EAAG;;EAEzC,QAAQ,EAAC,MAAM,SAAS,OAAO,MAAM,UAAU,MAAM,SAAS,KAAI;;EAElE,OAAO,EAAC,MAAM,SAAS,OAAO,CAAC,KAAK,KAAK,GAAG,EAAC;;EAE7C,kBAAkB;IAChB,MAAM;IACN,OAAO;MACL,SAAS;MACT,SAAS;MACT,SAAS;MACT,QAAQ;;;;EAIZ,WAAW;;EAEX,WAAW;EACX,UAAU;EAEV,SAAS,CAAC,kCAAmB;;AAI/B,SAAS,2BAA2B,UAAqB;AACvD,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,WAAO,SAAS,KAAK,GAAG;EAC1B;AACA,SAAO,YAAY;AACrB;AAmDA,IAAqB,eAArB,cAAuE,6BAEtE;EAUC,YAAY,EAAC,OAAO,SAAQ,GAAyB;AACnD,UAAM,uBAAuB,MAAM,kBAAkB,SAAS;AAC9D,QAAI,sBAAsB;AACxB,YAAM,EAAC,cAAa,IAAI;AACxB,YAAM,UACJ,kBAAkB,MAAM,QAAQ,aAAa,KAAK,aAAa,aAAa;AAC9E,WAAK,SAAS,EAAC,QAAO,CAAC;IACzB;AAGA,UAAM,eACJ,wBACA,MAAM,iBAAiB,SAAS,gBAChC,MAAM,qBAAqB,SAAS,oBACpC,MAAM,WAAW,SAAS;AAE5B,QAAI,CAAC,KAAK,MAAM,WAAW,cAAc;AAEvC,YAAM,UAAU,KAAK,YAAY,KAAyB;AAC1D,WAAK,SAAS,EAAC,QAAO,CAAC;IACzB;AAIA,QAAI,MAAM,WAAW;AACnB,wBAAI,QAAQ,aAAa,+BAA+B,EAAC;IAC3D;EACF;EAEA,YAAY,EACV,eACA,QACA,kBACA,cACA,OAAM,GACW;AACjB,QAAI,CAAC,eAAe;AAClB,aAAO;IACT;AACA,QAAI,cAAc,KAAK,eAAc;AACrC,kBAAc;MACZ,GAAG;MACH,SAAS;QACP,aAAa,KAAK,MAAM,UAAU,eAAe,IAAI;QACrD,GAAG,2CAAa;QAChB;QACA;QACA;;;AAGJ,UAAM,EAAC,MAAK,IAAI,KAAK;AACrB,WAAO,MAAM,eAAe,EAAC,UAAU,iBAAiB,OAAO,MAAM,aAAa,OAAM,CAAC;EAC3F;EAEA,oBAAoB,MAAmB;AACrC,UAAM,EAAC,eAAe,OAAO,SAAS,kBAAkB,aAAY,IAAI,KAAK;AAC7E,UAAM,EAAC,SAAQ,IAAI,KAAK;AACxB,UAAM,UAAU,mBAAmB,eAAe,IAAI;AACtD,UAAM,aAAa,WAAW,mBAAmB,SAAS,IAAI;AAE9D,UAAM,EAAC,OAAM,IAAI;AACjB,QAAI,aAAa,CAAC,GAAG,CAAC;AACtB,QAAI,WAAW,CAAC,GAAG,CAAC;AACpB,QAAI,SAAS,cAAc;AACzB,YAAM,OAAO,KAAK;AAClB,mBAAa,SAAS,YAAY,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC;AACzD,iBAAW,SAAS,YAAY,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC;IACzD,OAAO;AACL,YAAM,OAAO,KAAK;AAClB,mBAAa,CAAC,KAAK,MAAM,KAAK,MAAM;AACpC,iBAAW,CAAC,KAAK,OAAO,KAAK,GAAG;IAClC;AACA,UAAM,SAAiB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC;AAE9E,UAAM,UAAU,KAAK,YAAY;MAC/B,eAAe;MACf;MACA;MACA;MACA;KACD;AACD,UAAM,UAAU;;MAEZ,MAAM,YAAY,EAAC,UAAU,WAAW,OAAO,MAAM,SAAS,CAAA,GAAI,OAAM,CAAC,EAAE,MAAM,OAAK,IAAI;QAC1F,QAAQ,QAAQ,IAAI;AAExB,WAAO,QAAQ,IAAI,CAAC,SAAS,OAAO,CAAC;EACvC;EAEA,gBACE,OAIC;AAED,UAAM,gBAAgB,KAAK,iBAAiB,QAAQ,mCAAe;AAEnE,UAAM,EAAC,OAAO,WAAW,SAAQ,IAAI,KAAK;AAC1C,UAAM,EAAC,KAAI,IAAI;AAEf,QAAI,CAAC,MAAM;AACT,aAAO;IACT;AAEA,UAAM,CAAC,MAAM,OAAO,IAAI;AAExB,WAAO,IAAI,cAAc,OAAO;MAC9B,MAAM;MACN;MACA;MACA,YAAY;MACZ,kBAAkB,gCAAkB;MACpC,aAAa,OAAK,CAAC,GAAG,GAAG,CAAC;MAC1B,UAAU;MACV;MACA;KACD;EACH;;EAGA,eAAe,OAAsC;AACnD,QAAI,CAAC,OAAO;AACV;IACF;AAEA,UAAM,EAAC,OAAM,IAAI,KAAK;AACtB,UAAM,SAAS,MACZ,IAAI,UAAQ,KAAK,OAAO,EACxB,OAAO,OAAO,EACd,IAAI,SAAM;AAET,YAAM,SAAS,IAAI,CAAC,EAAE,OAAO;AAC7B,aAAO,OAAO,IAAI,WAAS,MAAM,CAAC,CAAC;IACrC,CAAC;AACH,QAAI,OAAO,WAAW,GAAG;AACvB;IACF;AACA,UAAM,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,OAAK,EAAE,CAAC,CAAC,CAAC;AAC9C,UAAM,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,OAAK,EAAE,CAAC,CAAC,CAAC;AAE9C,QAAI,CAAC,UAAU,OAAO,OAAO,CAAC,KAAK,OAAO,OAAO,CAAC,GAAG;AACnD,WAAK,SAAS,EAAC,QAAQ,CAAC,MAAM,IAAI,EAAC,CAAC;IACtC;EACF;EAEA,eAAY;AACV,UAAM,EACJ,OACA,UACA,eACA,SACA,WACA,cACA,kBACA,UACA,SACA,SACA,QACA,aACA,YACA,cACA,aACA,cACA,kBACA,mBAAkB,IAChB,KAAK;AAET,QAAI,KAAK,MAAM,SAAS;AACtB,aAAO,IAAI,mBACT,KAAK,iBAAiB;QACpB,IAAI;OACL,GACD;QACE,aAAa,KAAK,oBAAoB,KAAK,IAAI;QAC/C,iBAAiB,KAAK,gBAAgB,KAAK,IAAI;QAC/C,gBAAgB;UACd,aAAa;YACX,eAAe,2BAA2B,aAAa;YACvD,SAAS,2BAA2B,OAAO;YAC3C;YACA;;;QAGJ,gBAAgB,KAAK,eAAe,KAAK,IAAI;QAC7C,QAAQ,KAAK,MAAM,UAAU;QAC7B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;OACD;IAEL;AAEA,QAAI,CAAC,eAAe;AAClB,aAAO;IACT;AAEA,UAAM,gBAAgB,KAAK,iBAAiB,QAAQ,mCAAe;AACnE,WAAO,IAAI,cACT,KAAK,iBAAiB;MACpB,IAAI;KACL,GACD;MACE,MAAM;MACN,MAAM,KAAK,MAAM;MACjB;MACA,YAAY;MACZ,aAAa,OAAK,CAAC,GAAG,GAAG,CAAC;MAC1B,UAAU;MACV;MACA;KACD;EAEL;;AAtOO,aAAA,eAAeA;AACf,aAAA,YAAY;4BAJA;AA4OrB,IAAM,eAAe,CAAC,QACpB,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,MAAM;;;ACjWpE,IAAAC,gBAUO;AACP,IAAAC,iBAA8C;AAC9C,wBAA4B;AAE5B,IAAAD,gBAAsB;AACtB,iBAA8B;AAC9B,iBAA8B;;;ACf9B,IAAAE,gBAAmB;AAGnB,IAAM,2BAA2B;EAC/B;EACA;EACA;EACA;EACA;EACA;;AAGF,SAAS,MAAM,CAAC,QAAQ,MAAM,GAAqB,CAAC,IAAI,EAAE,GAAe,UAAkB;AACzF,QAAM,QAAI,oBAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM;AACnC,QAAM,QAAI,oBAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM;AAEnC,SAAO,SAAS,cAAc,CAAC,GAAG,CAAC,CAAC;AACtC;AAEA,SAAS,UAAU,UAAU,MAAkB,UAAkB;AAC/D,SAAO,SAAS,IAAI,OAAK,MAAM,GAAG,MAAM,QAAQ,CAAC;AACnD;AAEA,SAAS,WAAW,YAAY,MAAkB,UAAkB;AAClE,SAAO,UAAU,YAAY,MAAM,QAAQ;AAC7C;AAEA,SAAS,WAAW,MAAM,MAAkB,UAAkB;AAC5D,SAAO,UAAU,MAAM,MAAM,QAAQ;AACvC;AAEA,SAAS,gBAAgB,iBAAiB,MAAkB,UAAkB;AAC5E,SAAO,gBAAgB,IAAI,gBAAc,WAAW,YAAY,MAAM,QAAQ,CAAC;AACjF;AAEA,SAAS,QAAQ,SAAS,MAAkB,UAAkB;AAC5D,SAAO,QAAQ,IAAI,iBAAe,UAAU,aAAa,MAAM,QAAQ,CAAC;AAC1E;AAEA,SAAS,aAAa,cAAc,MAAkB,UAAkB;AACtE,SAAO,aAAa,IAAI,aAAW,QAAQ,SAAS,MAAM,QAAQ,CAAC;AACrE;AAEM,SAAU,UAAU,UAAU,MAAsB,UAAkB;AAC1E,QAAM,KAAK,SAAS,YAAY,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC;AACvD,QAAM,KAAK,SAAS,YAAY,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC;AACvD,QAAM,gBAAgB,CAAC,IAAI,EAAE;AAE7B,SAAO;IACL,GAAG;IACH,aAAa,yBAAyB,SAAS,IAAI,EACjD,SAAS,aACT,eACA,QAAQ;;AAGd;;;AChDA,IAAM,aAAa,CAAC,UAAU,SAAS,UAAU;AAMnC,SAAP,gBACL,MACA,kBACA,WACA;AAEA,aAAW,MAAM,YAAY;AAC3B,UAAM,QAAQ,KAAK,EAAE,KAAK,gBAAgB,KAAK,EAAE,GAAG,kBAAkB,WAAW,SAAS;AAC1F,QAAI,SAAS,GAAG;AACd,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEA,SAAS,gBACP,UACA,kBACA,WACA,WAAwB;AAExB,QAAM,aAAa,SAAS,WAAW;AAEvC,MAAI,CAAC,WAAW,QAAQ;AACtB,WAAO;EACT;AAEA,MAAI,oBAAoB;AACxB,MAAI,kBAAkB,WAAW,WAAW,SAAS,CAAC,IAAI;AAC1D,MAAI,WAAW;AACb,UAAM,aAAa,cAAc,UAAU,SAAS;AACpD,QAAI,YAAY;AACd,0BAAoB,WAAW,CAAC;AAChC,wBAAkB,WAAW,CAAC,IAAI;IACpC,OAAO;AACL,aAAO;IACT;EACF;AAGA,MAAI,eAAe;AACnB,MAAI,oBAAoB,SAAS,cAAc;AAC7C,UAAM,cAAc,SAAS,aAAa,gBAAgB,EAAE,MAAM,UAChE,CAAC,GAAG,MACF,MAAM,aAAa,WAAW,CAAC,KAAK,qBAAqB,WAAW,CAAC,IAAI,eAAe;AAE5F,WAAO,eAAe,IAAI,SAAS,iBAAiB,MAAM,WAAW,IAAI;EAC3E,WAAW,kBAAkB;AAC3B,mBAAe,UACb,SAAS,YACT,UAAQ,KAAK,gBAAgB,MAAM,WACnC,mBACA,eAAe;EAEnB,WAAW,SAAS,QAAQ;AAC1B,mBAAe,UACb,SAAS,QACT,CAAC,SAAc,KAAK,OAAO,WAC3B,mBACA,eAAe;EAEnB;AACA,SAAO,gBAAgB,IAAI,mBAAmB,UAAU,YAAY,IAAI;AAC1E;AAMA,SAAS,cACP,UAGA,WAAiB;AAEjB,MAAI,CAAC,SAAS,UAAU;AAEtB,UAAM,aAAyC,CAAA;AAC/C,UAAM,EAAC,WAAU,IAAI;AACrB,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,YAAM,EAAC,WAAW,IAAG,IAAI,WAAW,CAAC;AACrC,UAAI,CAAC,KAAK;MAEV,WAAW,WAAW,GAAG,GAAG;AAC1B,mBAAW,GAAG,EAAE,CAAC,IAAI;MACvB,OAAO;AACL,mBAAW,GAAG,IAAI,CAAC,GAAG,CAAC;MACzB;IACF;AACA,aAAS,WAAW;EACtB;AACA,SAAO,SAAS,SAAS,SAAS;AACpC;AAGA,SAAS,mBAAmB,UAAU,cAAoB;AACxD,MAAI,CAAC,SAAS,OAAO;AAEnB,UAAM,SAAmB,CAAA;AACzB,UAAM,aAAa,SAAS,WAAW;AACvC,UAAM,mBAAmB,SAAS,iBAAiB;AACnD,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,aAAO,WAAW,CAAC,CAAC,IAAI,iBAAiB,CAAC;IAC5C;AACA,aAAS,QAAQ;EACnB;AACA,SAAO,SAAS,MAAM,YAAY;AACpC;AAGA,SAAS,UACP,OACA,WACA,YACA,UAAgB;AAEhB,WAAS,IAAI,YAAY,IAAI,UAAU,KAAK;AAC1C,QAAI,UAAU,MAAM,CAAC,GAAG,CAAC,GAAG;AAC1B,aAAO;IACT;EACF;AACA,SAAO;AACT;;;AFpGA,IAAM,aAAa;AAEnB,IAAMC,iBAA4C;EAChD,GAAG,4BAAa;EAChB,MAAM;EACN,YAAY,EAAC,MAAM,YAAY,OAAO,MAAM,UAAU,MAAM,SAAS,MAAK;EAC1E,kBAAkB;EAClB,sBAAsB;EACtB,SAAS,CAAC,0BAAe;EACzB,QAAQ;;AA4DV,IAAqB,WAArB,cAGU,mBAAmF;EAa3F,kBAAe;AACb,UAAM,gBAAe;AAErB,UAAM,SAAS,KAAK,QAAQ,SAAS,eAAe,SAAY,QAAQ,KAAK,MAAM;AACnF,SAAK,SAAS;MACZ;MACA,MAAM;MACN,UAAU;MACV,kBAAkB;MAClB,yBAAyB;KAC1B;EACH;EAEA,IAAI,WAAQ;AA5Id;AA6II,WAAO,UAAQ,UAAK,UAAL,mBAAY,SAAQ,MAAM,QAAQ;EACnD;EAEA,YAAY,EAAC,OAAO,UAAU,SAAS,YAAW,GAAyB;AAhJ7E;AAiJI,QAAI,YAAY,aAAa;AAE3B,WAAK,gBAAe;IACtB;AAEA,SAAI,UAAK,UAAL,mBAAY,MAAM;AACpB,YAAM,YAAY,EAAC,OAAO,UAAU,SAAS,YAAW,CAAC;AACzD,WAAK,0BAAyB;IAChC;AACA,UAAM,EAAC,eAAc,IAAI;AACzB,QAAI,mBAAmB,SAAS,kBAAkB,MAAM,QAAQ,cAAc,GAAG;AAC/E,WAAK,SAAS,EAAC,eAAc,CAAC;IAChC;EACF;;EAGQ,MAAM,kBAAe;AAC3B,QAAI,OAAO,KAAK,MAAM;AACtB,QAAI,WAA4B;AAEhC,QAAI,OAAO,SAAS,YAAY,CAAC,cAAc,IAAI,GAAG;AACpD,YAAM,EAAC,YAAY,MAAK,IAAI,KAAK;AACjC,WAAK,SAAS,EAAC,MAAM,MAAM,UAAU,KAAI,CAAC;AAC1C,UAAI;AACF,mBAAW,MAAM,MAAM,MAAM,EAAC,UAAU,QAAQ,OAAO,MAAM,SAAS,CAAA,EAAE,CAAC;MAC3E,SAAS,OAAP;AACA,aAAK,WAAW,OAAO,kBAAkB;AACzC,eAAO;MACT;AAEA,UAAI,YAAY;AACd,mBAAW,UAAU,EAAC,UAAU,QAAQ,OAAO,KAAI,CAAC;MACtD;IACF,WAAW,QAAQ,OAAO,SAAS,YAAY,cAAc,MAAM;AACjE,iBAAW;IACb;AAEA,QAAI,UAAU;AACZ,aAAO,SAAS;IAClB;AAEA,SAAK,SAAS,EAAC,MAAM,SAAQ,CAAC;EAChC;EAEA,qBAAkB;AAChB,UAAM,OAAO,MAAM,mBAAkB;AACrC,UAAM,WAA4B,KAAK,MAAM;AAC7C,UAAM,EAAC,SAAS,QAAO,IAAI,KAAK;AAEhC,QAAI,UAAU;AACZ,UAAI,OAAO,SAAS,SAAS,OAAO,KAAM,SAAS,UAAsB,SAAoB;AAC3F,aAAK,UAAU,SAAS;MAC1B;AAEA,UACE,OAAO,SAAS,SAAS,OAAO,MAC/B,CAAC,OAAO,SAAS,OAAO,KAAM,SAAS,UAAsB,UAC9D;AACA,aAAK,UAAU,SAAS;MAC1B;IACF;AACA,WAAO;EACT;;EAIA,eAAY;AAnNd;AAoNI,QAAI,GAAC,UAAK,UAAL,mBAAY;AAAM,aAAO;AAC9B,WAAO,MAAM,aAAY;EAC3B;EAEA,YAAY,WAAwB;AAClC,UAAM,EAAC,MAAM,OAAM,IAAI,KAAK;AAC5B,UAAM,EAAC,OAAO,OAAM,IAAI;AAExB,UAAM,MAAM,mBAAmB,MAAM,SAAS;AAC9C,QAAI,CAAC,KAAK;AACR,aAAO,QAAQ,OAAO,aAAa;IACrC;AACA,QAAI,cAAc,KAAK,eAAc;AACrC,UAAM,EAAC,MAAK,IAAI,KAAK;AACrB,kBAAc;MACZ,GAAG;MACH,UAAU;MACV,KAAK;QACH,GAAG,2CAAa;QAChB,aAAa,KAAK,QAAQ,SAAS,aAAa,UAAU;QAC1D,WAAW;;;;;;MAMb,KAAK,SAAS,EAAC,QAAQ,SAAQ,IAAI,CAAA;;AAErC,WAAO,MAAM,KAAK,EAAC,UAAU,QAAQ,OAAO,MAAM,aAAa,OAAM,CAAC;EACxE;EAEA,gBACE,OAKC;AAED,UAAM,EAAC,GAAG,GAAG,EAAC,IAAI,MAAM,KAAK;AAC7B,UAAM,aAAa,KAAK,IAAI,GAAG,CAAC;AAEhC,UAAM,SAAS,aAAa;AAC5B,UAAM,SAAS,CAAC;AAEhB,UAAM,UAAW,aAAa,IAAK;AACnC,UAAM,UAAU,cAAc,IAAI,IAAI;AAEtC,UAAM,cAAc,IAAI,sBAAO,EAAG,MAAM,CAAC,QAAQ,QAAQ,CAAC,CAAC;AAE3D,UAAM,gBAAgB;AAEtB,QAAI,CAAC,KAAK,QAAQ,SAAS,YAAY;AACrC,YAAM,cAAc;AACpB,YAAM,mBAAmB,CAAC,SAAS,SAAS,CAAC;AAC7C,YAAM,mBAAmB,gCAAkB;AAC3C,YAAM,aAAa,CAAC,GAAI,MAAM,cAAc,CAAA,GAAK,IAAI,gCAAa,CAAE;IACtE;AAEA,UAAM,YAAY,MAAM,gBAAgB,KAAK;AAE7C,QAAI,KAAK,MAAM,UAAU,EAAE,qBAAqB,8BAAe;AAC7D,wBAAI,KAAK,mEAAmE,EAAC;IAC/E;AAEA,WAAO;EACT;EAEU,qBAAqB,MAAiB;AAC9C,UAAM,EAAC,iBAAgB,IAAI,KAAK;AAEhC,UAAM,EAAC,kBAAkB,wBAAuB,IAAI,KAAK;AACzD,UAAM,iBAAiB,KAAK;AAC5B,QAAI,sBAA8C;AAClD,QAAI,6BAA4C;AAEhD,QAAI,gBAAgB;AAClB,4BAAsB,mBAAmB,gBAAgB,gBAAgB;AACzE,mCAA6B,oBAAoB,cAAc;IACjE;AACA,QAAI,EAAC,eAAc,IAAI,KAAK;AAC5B,QAAI,OAAO,mBAAmB,YAAY;AACxC,uBAAiB,eAAe,IAAI;IACtC;AAEA,QACE,qBAAqB,uBACrB,4BAA4B,4BAC5B;AACA,WAAK,SAAS;QACZ;QACA,kBAAkB;QAClB,yBAAyB;OAC1B;IACH;EACF;EAEU,WAAQ;AAChB,WAAO,QAAQ,KAAK,QAAQ,SAAS,UAAU;EACjD;EAEA,eAAe,QAA4B;AACzC,UAAM,OAAO,MAAM,eAAe,MAAM;AAExC,QAAI,KAAK,MAAM,UAAU,KAAK,UAAU,IAAI;AAC1C,YAAM,EAAC,KAAI,IAAI,OAAO,YAAa;AACnC,WAAK,aAAS,4BAAgB,MAAiC;QAC7D,iBAAiB,KAAK;OACvB;IACH;AACA,QAAI,KAAK,UAAU,CAAC,KAAK,SAAQ,GAAI;AACnC,WAAK,SAAS;QACZ,KAAK;QACL,KAAK,KAAM;;QACX,KAAK,QAAQ;MAAQ;IAEzB;AAEA,WAAO;EACT;EAEA,uBAAuB,MAAiC;AACtD,WAAO;MACL,wBAAwB,KAAK,0BAA0B,IAAI;MAC3D,gBAAgB,KAAK,MAAM;;EAE/B;EAEQ,0BAA0B,MAAiC;AACjE,UAAM,EAAC,kBAAkB,yBAAyB,OAAM,IAAI,KAAK;AACjE,UAAM,EAAC,kBAAkB,qBAAoB,IAAI,KAAK;AACtD,UAAM,OAAO,KAAK;AAElB,UAAM,gBAAgB,mBAAmB,oBAAoB;AAC7D,UAAM,qBAAqB,mBAAmB,gBAAgB,KAAK;AAEnE,QAAI,CAAC,oBAAoB;AACvB,aAAO;IACT;AAEA,UAAM,uBAAuB,gBAAgB,uBAAwB;AAGrE,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,aAAO,KAAK,UAAU,aAAU;AAC9B,cAAM,eAAe,mBAAmB,SAAS,gBAAgB,MAAM;AACvE,cAAM,kBACJ,iBAAiB,oBAAoB,OAAO,MAAM;AACpD,eAAO,gBAAgB;MACzB,CAAC;IAGH,WAAW,QAAQ,QAAQ;AAEzB,aAAO,gBACL,MACA,kBACA,sBACA,gBAAgB,KAAK,uBAAwB;IAEjD;AAEA,WAAO;EACT;EAEQ,aAAa,YAAyB;AAC5C,UAAM,EAAC,MAAM,SAAQ,IAAI,KAAK;AAC9B,UAAM,QAAQ,SAAS;AACvB,UAAM,SAAS,SAAS;AACxB,UAAM,IAAI,SAAS;AACnB,UAAM,IAAI,SAAS;AACnB,UAAM,WAAW,CAAC,KAAK,EAAE;AACzB,WAAO,KAAM,YAAY,EAAC,GAAG,GAAG,OAAO,QAAQ,UAAU,WAAU,CAAC;EACtE;;EAGA,oBAAoB,cAA6B,MAAI;AACnD,UAAM,WAAW,KAAK,aAAa,WAAW;AAC9C,UAAM,eAAe,oBAAI,IAAG;AAC5B,UAAM,mBAA8B,CAAA;AAEpC,eAAW,KAAK,UAAU;AACxB,YAAM,YAAY,mBAAmB,EAAE,QAAQ,KAAK,MAAM,gBAAgB;AAE1E,UAAI,cAAc,QAAW;AAE3B,yBAAiB,KAAK,EAAE,MAAiB;MAC3C,WAAW,CAAC,aAAa,IAAI,SAAS,GAAG;AAEvC,qBAAa,IAAI,SAAS;AAC1B,yBAAiB,KAAK,EAAE,MAAiB;MAC3C;IACF;AAEA,WAAO;EACT;EAEQ,4BAAyB;AAC/B,UAAM,WAAW;AACjB,UAAM,UAAqB,KAAK,MAAM;AAGtC,YAAQ,cAAc,QAAQ,CAAC,SAA0C;AACvE,UAAI,CAAC,KAAK,eAAe,QAAQ,GAAG;AAElC,eAAO,eAAe,MAAM,UAAU;UACpC,KAAK,MAAK;AAER,gBAAI,CAAC,KAAK,SAAS;AACjB,qBAAO;YACT;AAEA,gBAAI,KAAK,MAAM,UAAU,MAAM,QAAQ,KAAK,OAAO,KAAK,CAAC,KAAK,QAAQ,QAAQ;AAG5E,qBAAO,CAAA;YACT;AAEA,kBAAM,EAAC,KAAI,IAAI;AACf,gBAAI,KAAK,kBAAkB,UAAa,iBAAiB,IAAI,GAAG;AAG9D,oBAAM,UAAU,KAAK,MAAM,aAAS,4BAAgB,KAAK,OAAO,IAAI,KAAK;AACzE,mBAAK,gBAAgB,QAAQ,IAAI,aAC/B,2BAA2B,SAAS,MAAM,KAAK,QAAQ,QAAQ,CAAC;YAEpE;AACA,mBAAO,KAAK;UACd;SACD;MACH;IACF,CAAC;EACH;;AAzUO,SAAA,YAAY;AACZ,SAAA,eAAeA;wBALH;AAgVrB,SAAS,mBAAmB,SAAkB,kBAAoC;AAChF,MAAI,QAAQ,cAAc,kBAAkB;AAC1C,WAAO,QAAQ,WAAW,gBAAgB;EAC5C;AAEA,MAAI,QAAQ,SAAS;AACnB,WAAO,QAAQ;EACjB;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,SAAgB;AA3c7C;AA4cE,WAAO,aAAQ,eAAR,mBAAoB,cAAa;AAC1C;AAEA,SAAS,mBAAmB,OAAc;AACxC,SAAO,UAAU,UAAa,UAAU,QAAQ,UAAU;AAC5D;AAEA,SAAS,2BACP,QACA,MACA,UAAkB;AAElB,QAAM,UAAU;IACd,GAAG;IACH,UAAU;MACR,MAAM,OAAO,SAAS;;;AAK1B,SAAO,eAAe,QAAQ,UAAU,eAAe;IACrD,KAAK,MAAK;AACR,YAAM,YAAY,UAAU,OAAO,UAAU,MAAM,QAAQ;AAC3D,aAAO,UAAU;IACnB;GACD;AAED,SAAO;AACT;;;AGpeA,IAAM,eAAe;AACrB,IAAM,oBAAoB,CAAA;AAC1B,SAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,oBAAkB,aAAa,OAAO,CAAC,CAAC,IAAI;AAC9C;AAEA,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,IAAM,UAAU;AAGV,SAAU,iBAAiB,SAAe;AAC9C,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI;AAEJ,MAAI,YAAY;AAChB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAC9C,UAAM,OAAO,QAAQ,CAAC,EAAE,YAAW;AACnC,gBAAY,kBAAkB,IAAI;AAElC,aAAS,OAAO,GAAG,QAAQ,GAAG,QAAQ;AACpC,YAAM,MAAO,aAAa,OAAQ;AAClC,UAAI,OAAO;AACT,eAAO,SAAS,UAAU;AAC1B,YAAI,QAAQ,GAAG;AACb,mBAAS;QACX,OAAO;AACL,mBAAS;QACX;MACF,OAAO;AACL,eAAO,SAAS,UAAU;AAC1B,YAAI,QAAQ,GAAG;AACb,mBAAS;QACX,OAAO;AACL,mBAAS;QACX;MACF;AACA,cAAQ,CAAC;IACX;EACF;AAEA,SAAO,CAAC,QAAQ,QAAQ,QAAQ,MAAM;AACxC;AAEM,SAAU,kBAAkB,SAAe;AAC/C,QAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,iBAAiB,OAAO;AAE7C,SAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACtC;;;ACjDA,IAAMC,iBAAgD;EACpD,YAAY,EAAC,MAAM,YAAY,OAAO,CAAC,MAAW,EAAE,QAAO;;AAgB7D,IAAqB,eAArB,cAAmF,qBAGlF;EAIC,gBAAa;AACX,UAAM,EAAC,MAAM,WAAU,IAAI,KAAK;AAEhC,WAAO;MACL;MACA,YAAY;MACZ,gBAAgB;MAChB,YAAY,CAAC,GAAU,eAAe,kBAAkB,WAAW,GAAG,UAAU,CAAC;;EAErF;;AAZO,aAAA,YAAY;AACZ,aAAA,eAAeA;4BALH;",
4
+ "sourcesContent": ["// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable max-len */\n\nexport {default as A5Layer} from './a5-layer/a5-layer';\nexport {WMSLayer as _WMSLayer} from './wms-layer/wms-layer';\nexport {default as GreatCircleLayer} from './great-circle-layer/great-circle-layer';\nexport {default as S2Layer} from './s2-layer/s2-layer';\nexport {default as QuadkeyLayer} from './quadkey-layer/quadkey-layer';\nexport {default as TileLayer} from './tile-layer/tile-layer';\nexport {default as TripsLayer} from './trips-layer/trips-layer';\nexport {default as H3ClusterLayer} from './h3-layers/h3-cluster-layer';\nexport {default as H3HexagonLayer} from './h3-layers/h3-hexagon-layer';\nexport {default as Tile3DLayer} from './tile-3d-layer/tile-3d-layer';\nexport {default as TerrainLayer} from './terrain-layer/terrain-layer';\nexport {default as MVTLayer} from './mvt-layer/mvt-layer';\nexport {default as GeohashLayer} from './geohash-layer/geohash-layer';\n\nexport {default as _GeoCellLayer} from './geo-cell-layer/GeoCellLayer';\n\n// Types\nexport type {A5LayerProps} from './a5-layer/a5-layer';\nexport type {WMSLayerProps} from './wms-layer/wms-layer';\nexport type {H3ClusterLayerProps} from './h3-layers/h3-cluster-layer';\nexport type {H3HexagonLayerProps} from './h3-layers/h3-hexagon-layer';\nexport type {GreatCircleLayerProps} from './great-circle-layer/great-circle-layer';\nexport type {S2LayerProps} from './s2-layer/s2-layer';\nexport type {TileLayerProps, TileLayerPickingInfo} from './tile-layer/tile-layer';\nexport type {TripsLayerProps} from './trips-layer/trips-layer';\nexport type {QuadkeyLayerProps} from './quadkey-layer/quadkey-layer';\nexport type {TerrainLayerProps} from './terrain-layer/terrain-layer';\nexport type {Tile3DLayerProps} from './tile-3d-layer/tile-3d-layer';\nexport type {MVTLayerProps, MVTLayerPickingInfo} from './mvt-layer/mvt-layer';\nexport type {GeoCellLayerProps as _GeoCellLayerProps} from './geo-cell-layer/GeoCellLayer';\nexport type {GeohashLayerProps} from './geohash-layer/geohash-layer';\n\n// Tileset2D\n\nexport type {GeoBoundingBox, NonGeoBoundingBox} from './tileset-2d/index';\nexport type {TileLoadProps as _TileLoadProps} from './tileset-2d/index';\n\nexport {getURLFromTemplate as _getURLFromTemplate} from './tileset-2d/index';\nexport {Tileset2D as _Tileset2D} from './tileset-2d/index';\nexport {Tile2DHeader as _Tile2DHeader} from './tileset-2d/index';\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, Layer, LayersList, DefaultProps} from '@deck.gl/core';\nimport {PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps<GeoCellLayerProps> = {\n ...PolygonLayer.defaultProps\n};\n\n/** All properties supported by GeoCellLayer. */\nexport type GeoCellLayerProps<DataT = unknown> = PolygonLayerProps<DataT>;\n\nexport default class GeoCellLayer<DataT = any, ExtraProps extends {} = {}> extends CompositeLayer<\n Required<GeoCellLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'GeoCellLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n /** Implement to generate props to create geometry. */\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n return null;\n }\n\n renderLayers(): Layer | null | LayersList {\n // Rendering props underlying layer\n const {\n elevationScale,\n extruded,\n wireframe,\n filled,\n stroked,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth\n } = this.props;\n\n // Accessor props for underlying layers\n const {updateTriggers, material, transitions} = this.props;\n\n // Filled Polygon Layer\n const CellLayer = this.getSubLayerClass('cell', PolygonLayer);\n const {updateTriggers: boundsUpdateTriggers, ...boundsProps} = this.indexToBounds() || {};\n return new CellLayer(\n {\n filled,\n wireframe,\n\n extruded,\n elevationScale,\n\n stroked,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified,\n\n material,\n transitions,\n\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth\n },\n this.getSubLayerProps({\n id: 'cell',\n updateTriggers: updateTriggers && {\n ...boundsUpdateTriggers,\n getElevation: updateTriggers.getElevation,\n getFillColor: updateTriggers.getFillColor,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n }\n }),\n boundsProps\n );\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {cellToBoundary, hexToU64} from 'a5-js';\nimport {flattenPolygon} from '../h3-layers/h3-utils';\n\nconst defaultProps: DefaultProps<A5LayerProps> = {\n getPentagon: {type: 'accessor', value: (d: any) => d.pentagon}\n};\n\n/** All properties supported by A5Layer. */\nexport type A5LayerProps<DataT = unknown> = _A5LayerProps<DataT> & GeoCellLayerProps<DataT>;\n\n/** Properties added by A5Layer. */\ntype _A5LayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the A5 pentagonal cell identifier.\n *\n * By default, it reads `pentagon` property of data object.\n */\n getPentagon?: AccessorFunction<DataT, string | bigint>;\n};\n\n/** Render filled and/or stroked polygons based on the [A5](https://a5geo.org) geospatial indexing system. */\nexport default class A5Layer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_A5LayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'A5Layer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getPentagon} = this.props;\n\n return {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => {\n const pentagon = getPentagon(x, objectInfo);\n const boundary = cellToBoundary(\n typeof pentagon === 'string' ? hexToU64(pentagon) : pentagon,\n {closedRing: true, segments: 'auto'}\n );\n return flattenPolygon(boundary);\n }\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CoordPair, H3IndexInput, cellToBoundary, cellToLatLng} from 'h3-js';\nimport {lerp} from '@math.gl/core';\n\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: CoordPair[], refLng?: number): void {\n refLng = refLng === undefined ? vertices[0][0] : refLng;\n for (const pt of vertices) {\n const deltaLng = pt[0] - refLng;\n if (deltaLng > 180) {\n pt[0] -= 360;\n } else if (deltaLng < -180) {\n pt[0] += 360;\n }\n }\n}\n\n// scale polygon vertices w.r.t center (hexId)\nexport function scalePolygon(hexId: H3IndexInput, vertices: CoordPair[], factor: number): void {\n const [lat, lng] = cellToLatLng(hexId);\n const actualCount = vertices.length;\n\n // normalize with respect to center\n normalizeLongitudes(vertices, lng);\n\n // `cellToBoundary` returns same array object for first and last vertex (closed polygon),\n // if so skip scaling the last vertex\n const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;\n for (let i = 0; i < vertexCount; i++) {\n vertices[i][0] = lerp(lng, vertices[i][0], factor);\n vertices[i][1] = lerp(lat, vertices[i][1], factor);\n }\n}\n\n// gets hexagon centroid\nexport function getHexagonCentroid(getHexagon, object, objectInfo) {\n const hexagonId = getHexagon(object, objectInfo);\n const [lat, lng] = cellToLatLng(hexagonId);\n return [lng, lat];\n}\n\nexport function h3ToPolygon(hexId: H3IndexInput, coverage: number = 1): number[][] {\n const vertices = cellToBoundary(hexId, true);\n\n if (coverage !== 1) {\n // scale and normalize vertices w.r.t to center\n scalePolygon(hexId, vertices, coverage);\n } else {\n // normalize w.r.t to start vertex\n normalizeLongitudes(vertices);\n }\n\n return vertices;\n}\n\nexport function flattenPolygon(vertices: number[][]): Float64Array {\n const positions = new Float64Array(vertices.length * 2);\n let i = 0;\n for (const pt of vertices) {\n positions[i++] = pt[0];\n positions[i++] = pt[1];\n }\n return positions;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// deck.gl, MIT license\n// Attributions:\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* eslint-disable camelcase */ // Some WMS parameters are not in camel case\n/* global setTimeout, clearTimeout */\n\nimport {\n Layer,\n CompositeLayer,\n CompositeLayerProps,\n UpdateParameters,\n DefaultProps,\n Viewport,\n COORDINATE_SYSTEM,\n _deepEqual as deepEqual\n} from '@deck.gl/core';\nimport {BitmapLayer} from '@deck.gl/layers';\nimport type {GetImageParameters, ImageSourceMetadata, ImageType} from '@loaders.gl/loader-utils';\nimport type {ImageServiceType} from '@loaders.gl/wms';\nimport {ImageSource, createImageSource} from '@loaders.gl/wms';\nimport {WGS84ToPseudoMercator} from './utils';\n\n/** All props supported by the TileLayer */\nexport type WMSLayerProps = CompositeLayerProps & _WMSLayerProps;\n\n/** Props added by the TileLayer */\ntype _WMSLayerProps = {\n data: string | ImageSource;\n serviceType?: ImageServiceType | 'auto';\n layers?: string[];\n srs?: 'EPSG:4326' | 'EPSG:3857' | 'auto';\n onMetadataLoad?: (metadata: ImageSourceMetadata) => void;\n onMetadataLoadError?: (error: Error) => void;\n onImageLoadStart?: (requestId: unknown) => void;\n onImageLoad?: (requestId: unknown) => void;\n onImageLoadError?: (requestId: unknown, error: Error) => void;\n};\n\nconst defaultProps: DefaultProps<WMSLayerProps> = {\n id: 'imagery-layer',\n data: '',\n serviceType: 'auto',\n srs: 'auto',\n layers: {type: 'array', compare: true, value: []},\n onMetadataLoad: {type: 'function', value: () => {}},\n // eslint-disable-next-line\n onMetadataLoadError: {type: 'function', value: console.error},\n onImageLoadStart: {type: 'function', value: () => {}},\n onImageLoad: {type: 'function', value: () => {}},\n onImageLoadError: {\n type: 'function',\n compare: false,\n // eslint-disable-next-line\n value: (requestId: unknown, error: Error) => console.error(error, requestId)\n }\n};\n\n/**\n * The layer is used in Hex Tile layer in order to properly discard invisible elements during animation\n */\nexport class WMSLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_WMSLayerProps>\n> {\n static layerName = 'WMSLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n state!: {\n imageSource: ImageSource;\n image: ImageType;\n bounds: [number, number, number, number];\n lastRequestParameters: {\n bbox: [number, number, number, number];\n layers: string[];\n srs: 'EPSG:4326' | 'EPSG:3857';\n width: number;\n height: number;\n };\n lastRequestId: number;\n _nextRequestId: number;\n /** TODO: Change any => setTimeout return type. Different between Node and browser... */\n _timeoutId: any;\n loadCounter: number;\n };\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n // Track the explicit loading done by this layer\n return this.state?.loadCounter === 0 && super.isLoaded;\n }\n\n /** Lets deck.gl know that we want viewport change events */\n override shouldUpdateState(): boolean {\n return true;\n }\n\n override initializeState(): void {\n // intentionally empty, initialization is done in updateState\n this.state._nextRequestId = 0;\n this.state.lastRequestId = -1;\n this.state.loadCounter = 0;\n }\n\n override updateState({changeFlags, props, oldProps}: UpdateParameters<this>): void {\n const {viewport} = this.context;\n\n // Check if data source has changed\n if (changeFlags.dataChanged || props.serviceType !== oldProps.serviceType) {\n this.state.imageSource = this._createImageSource(props);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadMetadata();\n this.debounce(() => this.loadImage(viewport, 'image source changed'), 0);\n } else if (!deepEqual(props.layers, oldProps.layers, 1)) {\n this.debounce(() => this.loadImage(viewport, 'layers changed'), 0);\n } else if (changeFlags.viewportChanged) {\n this.debounce(() => this.loadImage(viewport, 'viewport changed'));\n }\n }\n\n override finalizeState(): void {\n // TODO - we could cancel outstanding requests\n }\n\n override renderLayers(): Layer {\n // TODO - which bitmap layer is rendered should depend on the current viewport\n // Currently Studio only uses one viewport\n const {bounds, image, lastRequestParameters} = this.state;\n\n return (\n image &&\n new BitmapLayer({\n ...this.getSubLayerProps({id: 'bitmap'}),\n _imageCoordinateSystem:\n lastRequestParameters.srs === 'EPSG:4326'\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n bounds,\n image\n })\n );\n }\n\n async getFeatureInfoText(x: number, y: number): Promise<string | null> {\n const {lastRequestParameters} = this.state;\n if (lastRequestParameters) {\n // @ts-expect-error Undocumented method\n const featureInfo = await this.state.imageSource.getFeatureInfoText?.({\n ...lastRequestParameters,\n query_layers: lastRequestParameters.layers,\n x,\n y,\n info_format: 'application/vnd.ogc.gml'\n });\n return featureInfo;\n }\n return '';\n }\n\n _createImageSource(props: WMSLayerProps): ImageSource {\n if (props.data instanceof ImageSource) {\n return props.data;\n }\n\n if (typeof props.data === 'string') {\n return createImageSource({\n url: props.data,\n loadOptions: props.loadOptions,\n type: props.serviceType\n });\n }\n\n throw new Error('invalid image source in props.data');\n }\n\n /** Run a getMetadata on the image service */\n async _loadMetadata(): Promise<void> {\n const {imageSource} = this.state;\n try {\n this.state.loadCounter++;\n const metadata = await imageSource.getMetadata();\n\n // If a request takes a long time, it may no longer be expected\n if (this.state.imageSource === imageSource) {\n this.getCurrentLayer()?.props.onMetadataLoad(metadata);\n }\n } catch (error) {\n this.getCurrentLayer()?.props.onMetadataLoadError(error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n /** Load an image */\n async loadImage(viewport: Viewport, reason: string): Promise<void> {\n const {layers, serviceType} = this.props;\n\n // TODO - move to ImageSource?\n if (serviceType === 'wms' && layers.length === 0) {\n return;\n }\n\n const bounds = viewport.getBounds();\n const {width, height} = viewport;\n const requestId = this.getRequestId();\n let {srs} = this.props;\n if (srs === 'auto') {\n // BitmapLayer only supports LNGLAT or CARTESIAN (Web-Mercator)\n srs = viewport.resolution ? 'EPSG:4326' : 'EPSG:3857';\n }\n const requestParams: GetImageParameters = {\n width,\n height,\n boundingBox: [\n [bounds[0], bounds[1]],\n [bounds[2], bounds[3]]\n ],\n layers,\n crs: srs\n };\n if (srs === 'EPSG:3857') {\n const min = WGS84ToPseudoMercator([bounds[0], bounds[1]]);\n const max = WGS84ToPseudoMercator([bounds[2], bounds[3]]);\n requestParams.boundingBox = [min, max];\n }\n\n try {\n this.state.loadCounter++;\n this.props.onImageLoadStart(requestId);\n\n const image = await this.state.imageSource.getImage(requestParams);\n\n // If a request takes a long time, later requests may have already loaded.\n if (this.state.lastRequestId < requestId) {\n this.getCurrentLayer()?.props.onImageLoad(requestId);\n // Not type safe...\n this.setState({\n image,\n bounds,\n lastRequestParameters: requestParams,\n lastRequestId: requestId\n });\n }\n } catch (error) {\n this.raiseError(error as Error, 'Load image');\n this.getCurrentLayer()?.props.onImageLoadError(requestId, error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n // HELPERS\n\n /** Global counter for issuing unique request ids */\n private getRequestId(): number {\n return this.state._nextRequestId++;\n }\n\n /** Runs an action in the future, cancels it if the new action is issued before it executes */\n private debounce(fn: Function, ms = 500): void {\n clearTimeout(this.state._timeoutId);\n this.state._timeoutId = setTimeout(() => fn(), ms);\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {lngLatToWorld} from '@math.gl/web-mercator';\n\n// https://epsg.io/3857\n// +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs\nconst HALF_EARTH_CIRCUMFERENCE = 6378137 * Math.PI;\n\n/** Projects EPSG:4326 to EPSG:3857\n * This is a lightweight replacement of proj4. Use tests to ensure conformance.\n */\nexport function WGS84ToPseudoMercator(coord: [number, number]): [number, number] {\n const mercator = lngLatToWorld(coord);\n mercator[0] = (mercator[0] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;\n mercator[1] = (mercator[1] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;\n return mercator;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {DefaultProps} from '@deck.gl/core';\nimport {ArcLayer, ArcLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps<ArcLayerProps> = {\n getHeight: {type: 'accessor', value: 0},\n greatCircle: true\n};\n\n/** All properties supported by GreatCircleLayer. */\nexport type GreatCircleLayerProps<DataT = unknown> = ArcLayerProps<DataT>;\n\n// This layer has been merged into the core ArcLayer\n// Keeping for backward-compatibility\n/** @deprecated Use ArcLayer with `greatCircle: true` instead */\nexport default class GreatCircleLayer<DataT = any, ExtraProps extends {} = {}> extends ArcLayer<\n DataT,\n ExtraProps\n> {\n static layerName = 'GreatCircleLayer';\n static defaultProps = defaultProps;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/*\nAdapted from s2-geometry\n\nISC License (ISC)\n\nCopyright (c) 2012-2016, Jon Atkins <github@jonatkins.com>\nCopyright (c) 2016, AJ ONeal <aj@daplie.com>\n\nPermission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\nimport Long from 'long';\n\n//\n// Functional Style\n//\nconst FACE_BITS = 3;\nconst MAX_LEVEL = 30;\nconst POS_BITS = 2 * MAX_LEVEL + 1; // 61 (60 bits of data, 1 bit lsb marker)\nconst RADIAN_TO_DEGREE = 180 / Math.PI;\n\nexport function IJToST(\n ij: [number, number],\n order: number,\n offsets: [number, number]\n): [number, number] {\n const maxSize = 1 << order;\n\n return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];\n}\n\nfunction singleSTtoUV(st: number): number {\n if (st >= 0.5) {\n return (1 / 3.0) * (4 * st * st - 1);\n }\n return (1 / 3.0) * (1 - 4 * (1 - st) * (1 - st));\n}\n\nexport function STToUV(st: [number, number]): [number, number] {\n return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];\n}\n\nexport function FaceUVToXYZ(face: number, [u, v]: [number, number]): [number, number, number] {\n switch (face) {\n case 0:\n return [1, u, v];\n case 1:\n return [-u, 1, v];\n case 2:\n return [-u, -v, 1];\n case 3:\n return [-1, -v, -u];\n case 4:\n return [v, -1, -u];\n case 5:\n return [v, u, -1];\n default:\n throw new Error('Invalid face');\n }\n}\n\nexport function XYZToLngLat([x, y, z]: [number, number, number]): [number, number] {\n const lat = Math.atan2(z, Math.sqrt(x * x + y * y));\n const lng = Math.atan2(y, x);\n\n return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];\n}\n\nexport function toHilbertQuadkey(idS: string): string {\n let bin = Long.fromString(idS, true, 10).toString(2);\n\n while (bin.length < FACE_BITS + POS_BITS) {\n // eslint-disable-next-line prefer-template\n bin = '0' + bin;\n }\n\n // MUST come AFTER binstr has been left-padded with '0's\n const lsbIndex = bin.lastIndexOf('1');\n // substr(start, len)\n // substring(start, end) // includes start, does not include end\n const faceB = bin.substring(0, 3);\n // posB will always be a multiple of 2 (or it's invalid)\n const posB = bin.substring(3, lsbIndex);\n const levelN = posB.length / 2;\n\n const faceS = Long.fromString(faceB, true, 2).toString(10);\n let posS = Long.fromString(posB, true, 2).toString(4);\n\n while (posS.length < levelN) {\n // eslint-disable-next-line prefer-template\n posS = '0' + posS;\n }\n\n return `${faceS}/${posS}`;\n}\n\nfunction rotateAndFlipQuadrant(n: number, point: [number, number], rx: number, ry: number): void {\n if (ry === 0) {\n if (rx === 1) {\n point[0] = n - 1 - point[0];\n point[1] = n - 1 - point[1];\n }\n\n const x = point[0];\n point[0] = point[1];\n point[1] = x;\n }\n}\n\nexport function FromHilbertQuadKey(hilbertQuadkey: string): {\n face: number;\n ij: [number, number];\n level: number;\n} {\n const parts = hilbertQuadkey.split('/');\n const face = parseInt(parts[0], 10);\n const position = parts[1];\n const maxLevel = position.length;\n const point = [0, 0] as [number, number];\n let level;\n\n for (let i = maxLevel - 1; i >= 0; i--) {\n level = maxLevel - i;\n const bit = position[i];\n let rx = 0;\n let ry = 0;\n if (bit === '1') {\n ry = 1;\n } else if (bit === '2') {\n rx = 1;\n ry = 1;\n } else if (bit === '3') {\n rx = 1;\n }\n\n const val = Math.pow(2, level - 1);\n rotateAndFlipQuadrant(val, point, rx, ry);\n\n point[0] += val * rx;\n point[1] += val * ry;\n }\n\n if (face % 2 === 1) {\n const t = point[0];\n point[0] = point[1];\n point[1] = t;\n }\n\n return {face, ij: point, level};\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// s2-geometry is a pure JavaScript port of Google/Niantic's S2 Geometry library\n// which is perfect since it works in the browser.\nimport {\n toHilbertQuadkey,\n FromHilbertQuadKey,\n IJToST,\n STToUV,\n FaceUVToXYZ,\n XYZToLngLat\n} from './s2-geometry';\nimport Long from 'long';\n\n/**\n * Given an S2 token this function convert the token to 64 bit id\n https://github.com/google/s2-geometry-library-java/blob/c04b68bf3197a9c34082327eeb3aec7ab7c85da1/src/com/google/common/geometry/S2CellId.java#L439\n * */\nfunction getIdFromToken(token: string): number {\n // pad token with zeros to make the length 16\n const paddedToken = token.padEnd(16, '0');\n return Long.fromString(paddedToken, 16);\n}\n\nconst MAX_RESOLUTION = 100;\n\n/* Adapted from s2-geometry's S2Cell.getCornerLatLngs */\n/* eslint-disable max-statements */\nfunction getGeoBounds({\n face,\n ij,\n level\n}: {\n face: number;\n ij: [number, number];\n level: number;\n}): Float64Array {\n const offsets = [\n [0, 0],\n [0, 1],\n [1, 1],\n [1, 0],\n [0, 0]\n ];\n\n // The S2 cell edge is curved: http://s2geometry.io/\n // This is more prominent at lower levels\n // resolution is the number of segments to generate per edge.\n // We exponentially reduce resolution as level increases so it doesn't affect perf\n // when there are a large number of cells\n const resolution = Math.max(1, Math.ceil(MAX_RESOLUTION * Math.pow(2, -level)));\n const result = new Float64Array(4 * resolution * 2 + 2);\n let ptIndex = 0;\n let prevLng = 0;\n\n for (let i = 0; i < 4; i++) {\n const offset = offsets[i].slice(0) as [number, number];\n const nextOffset = offsets[i + 1];\n const stepI = (nextOffset[0] - offset[0]) / resolution;\n const stepJ = (nextOffset[1] - offset[1]) / resolution;\n\n for (let j = 0; j < resolution; j++) {\n offset[0] += stepI;\n offset[1] += stepJ;\n // Cell can be represented by coordinates IJ, ST, UV, XYZ\n // http://s2geometry.io/devguide/s2cell_hierarchy#coordinate-systems\n const st = IJToST(ij, level, offset);\n const uv = STToUV(st);\n const xyz = FaceUVToXYZ(face, uv);\n const lngLat = XYZToLngLat(xyz);\n\n // Adjust longitude for Web Mercator projection\n if (Math.abs(lngLat[1]) > 89.999) {\n lngLat[0] = prevLng;\n }\n const deltaLng = lngLat[0] - prevLng;\n lngLat[0] += deltaLng > 180 ? -360 : deltaLng < -180 ? 360 : 0;\n\n result[ptIndex++] = lngLat[0];\n result[ptIndex++] = lngLat[1];\n prevLng = lngLat[0];\n }\n }\n // close the loop\n result[ptIndex++] = result[0];\n result[ptIndex++] = result[1];\n return result;\n}\n/* eslint-enable max-statements */\n\nexport function getS2QuadKey(token: string | number): string {\n if (typeof token === 'string') {\n if (token.indexOf('/') > 0) {\n // is Hilbert quad key\n return token;\n }\n // is S2 token\n token = getIdFromToken(token);\n }\n // is Long id\n return toHilbertQuadkey(token.toString());\n}\n\n/**\n * Get a polygon with corner coordinates for an s2 cell\n * @param {*} cell - This can be an S2 key or token\n * @return {Float64Array} - a simple polygon in flat array format: [lng0, lat0, lng1, lat1, ...]\n * - the polygon is closed, i.e. last coordinate is a copy of the first coordinate\n */\nexport function getS2Polygon(token: string | number): Float64Array {\n const key = getS2QuadKey(token);\n const s2cell = FromHilbertQuadKey(key);\n\n return getGeoBounds(s2cell);\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getS2Polygon} from './s2-utils';\n\nconst defaultProps: DefaultProps<S2LayerProps> = {\n getS2Token: {type: 'accessor', value: (d: any) => d.token}\n};\n\n/** All properties supported by S2Layer. */\nexport type S2LayerProps<DataT = unknown> = _S2LayerProps<DataT> & GeoCellLayerProps<DataT>;\n\n/** Properties added by S2Layer. */\ntype _S2LayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `token` property of data object.\n */\n getS2Token?: AccessorFunction<DataT, string>;\n};\n\n/** Render filled and/or stroked polygons based on the [S2](http://s2geometry.io/) geospatial indexing system. */\nexport default class S2Layer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_S2LayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'S2Layer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getS2Token} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => getS2Polygon(getS2Token(x, objectInfo))\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nexport function quadkeyToWorldBounds(quadkey: string, coverage: number): [number[], number[]] {\n let x = 0;\n let y = 0;\n let mask = 1 << quadkey.length;\n const scale = mask / TILE_SIZE;\n\n for (let i = 0; i < quadkey.length; i++) {\n mask >>= 1;\n const q = parseInt(quadkey[i]);\n if (q % 2) x |= mask;\n if (q > 1) y |= mask;\n }\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + coverage) / scale, TILE_SIZE - (y + coverage) / scale]\n ];\n}\n\nexport function getQuadkeyPolygon(quadkey: string, coverage = 1): number[] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey, coverage);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getQuadkeyPolygon} from './quadkey-utils';\n\nconst defaultProps: DefaultProps<QuadkeyLayerProps> = {\n getQuadkey: {type: 'accessor', value: (d: any) => d.quadkey}\n};\n\n/** All properties supported by QuadkeyLayer. */\nexport type QuadkeyLayerProps<DataT = unknown> = _QuadkeyLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by QuadkeyLayer. */\ntype _QuadkeyLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `quadkey` property of data object.\n */\n getQuadkey?: AccessorFunction<DataT, string>;\n};\n\n/** Render filled and/or stroked polygons based on the [Quadkey](https://towardsdatascience.com/geospatial-indexing-with-quadkeys-d933dff01496) geospatial indexing system. */\nexport default class QuadkeyLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_QuadkeyLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'QuadkeyLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, extruded, getQuadkey} = this.props;\n // To avoid z-fighting reduce polygon footprint when extruding\n const coverage = extruded ? 0.99 : 1;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo), coverage),\n updateTriggers: {getPolygon: coverage}\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\n\nimport type {TileLoadProps, ZRange} from '../tileset-2d/index';\nimport {\n Tileset2D,\n Tile2DHeader,\n RefinementStrategy,\n STRATEGY_DEFAULT,\n Tileset2DProps\n} from '../tileset-2d/index';\nimport {urlType, URLTemplate, getURLFromTemplate} from '../tileset-2d/index';\nimport {Matrix4} from '@math.gl/core';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equal,\n renderSubLayers: {type: 'function', value: (props: any) => new GeoJsonLayer(props)},\n getTileData: {type: 'function', optional: true, value: null},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null},\n onTileLoad: {type: 'function', value: tile => {}},\n onTileUnload: {type: 'function', value: tile => {}},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err)},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n debounceTime: 0,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT = unknown> = CompositeLayerProps & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n data: URLTemplate;\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass?: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile?) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * Queue tile requests until no new tiles have been requested for at least `debounceTime` milliseconds.\n *\n * @default 0\n */\n debounceTime?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TileLayerPickingInfo<\n DataT = any,\n SubLayerPickingInfo = PickingInfo\n> = SubLayerPickingInfo & {\n /** The picked tile */\n tile?: Tile2DHeader<DataT>;\n /** the tile that emitted the picking event */\n sourceTile: Tile2DHeader<DataT>;\n /** a layer created by props.renderSubLayer() that emitted the picking event */\n sourceTileSubLayer: Layer;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps: DefaultProps = defaultProps;\n static layerName = 'TileLayer';\n\n state!: {\n tileset: Tileset2D | null;\n isLoaded: boolean;\n frameNumber?: number;\n };\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n return Boolean(\n this.state?.tileset?.selectedTiles?.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n )\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters<this>) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n debounceTime,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n debounceTime,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const tileset = this.state.tileset!;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n // This method can only be called when tileset is defined and updated\n onViewportLoad(tileset!.selectedTiles!);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader<DataT>): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader<DataT>) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader<DataT>) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial<LayerProps> | null {\n return null;\n }\n\n getPickingInfo(params: GetPickingInfoParams): TileLayerPickingInfo<DataT> {\n // TileLayer does not directly render anything, sourceLayer cannot be null\n const sourceLayer = params.sourceLayer!;\n const sourceTile: Tile2DHeader<DataT> = (sourceLayer.props as any).tile;\n const info = params.info as TileLayerPickingInfo<DataT>;\n if (info.picked) {\n info.tile = sourceTile;\n }\n info.sourceTile = sourceTile;\n info.sourceTileSubLayer = sourceLayer;\n return info;\n }\n\n protected _updateAutoHighlight(info: TileLayerPickingInfo<DataT>): void {\n info.sourceTileSubLayer.updateAutoHighlight(info);\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset!.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n const {modelMatrix} = this.props;\n return this.state.tileset!.isTileVisible(\n tile,\n cullRect,\n modelMatrix ? new Matrix4(modelMatrix) : null\n );\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport} from '@deck.gl/core';\n\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4, equals, NumericArray} from '@math.gl/core';\n\nimport {Tile2DHeader} from './tile-2d-header';\n\nimport {getTileIndices, tileToBoundingBox, getCullBounds, transformBox} from './utils';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLoadProps} from './types';\nimport {memoize} from './memoize';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nexport type RefinementStrategyFunction = (tiles: Tile2DHeader[]) => void;\nexport type RefinementStrategy =\n | 'never'\n | 'no-overlap'\n | 'best-available'\n | RefinementStrategyFunction;\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\nexport type Tileset2DProps<DataT = any> = {\n /** `getTileData` is called to retrieve the data of each tile. */\n getTileData: (props: TileLoadProps) => Promise<DataT> | DataT;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n /** The max zoom level of the layer's data. @default null */\n maxZoom?: number | null;\n /** The min zoom level of the layer's data. @default 0 */\n minZoom?: number | null;\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n /** The maximum memory used for caching tiles. @default null */\n maxCacheByteSize?: number | null;\n /** How the tile layer refines the visibility of tiles. @default 'best-available' */\n refinementStrategy?: RefinementStrategy;\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n /** The maximum number of concurrent getTileData calls. @default 6 */\n maxRequests?: number;\n /** Queue tile requests until no new tiles have been requested for at least `debounceTime` milliseconds. @default 0 */\n debounceTime?: number;\n /** Changes the zoom level at which the tiles are fetched. Needs to be an integer. @default 0 */\n zoomOffset?: number;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile: Tile2DHeader<DataT>) => void;\n\n // onTileLoad: (tile: Tile2DHeader) => void;\n // onTileUnload: (tile: Tile2DHeader) => void;\n // onTileError: (error: any, tile: Tile2DHeader) => void;\n /** Called when all tiles in the current viewport are loaded. */\n // sonViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n};\n\nexport const DEFAULT_TILESET2D_PROPS: Omit<Required<Tileset2DProps>, 'getTileData'> = {\n extent: null,\n tileSize: 512,\n\n maxZoom: null,\n minZoom: null,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: 'best-available',\n zRange: null,\n maxRequests: 6,\n debounceTime: 0,\n zoomOffset: 0,\n\n // onTileLoad: (tile: Tile2DHeader) => void, // onTileUnload: (tile: Tile2DHeader) => void, // onTileError: (error: any, tile: Tile2DHeader) => void, /** Called when all tiles in the current viewport are loaded. */\n // onViewportLoad: ((tiles: Tile2DHeader<DataT>[]) => void) | null,\n onTileLoad: () => {},\n onTileUnload: () => {},\n onTileError: () => {}\n};\n\n/**\n * Manages loading and purging of tile data. This class caches recently visited tiles\n * and only creates new tiles if they are present.\n */\nexport class Tileset2D {\n protected opts: Required<Tileset2DProps>;\n private _requestScheduler: RequestScheduler;\n private _cache: Map<string, Tile2DHeader>;\n private _dirty: boolean;\n private _tiles: Tile2DHeader[];\n\n private _cacheByteSize: number;\n private _viewport: Viewport | null;\n private _zRange: ZRange | null;\n private _selectedTiles: Tile2DHeader[] | null;\n private _frameNumber: number;\n private _modelMatrix: Matrix4;\n private _modelMatrixInverse: Matrix4;\n\n private _maxZoom?: number;\n private _minZoom?: number;\n\n private onTileLoad: (tile: Tile2DHeader) => void;\n\n /**\n * Takes in a function that returns tile data, a cache size, and a max and a min zoom level.\n * Cache size defaults to 5 * number of tiles in the current viewport\n */\n constructor(opts: Tileset2DProps) {\n this.opts = {...DEFAULT_TILESET2D_PROPS, ...opts};\n this.setOptions(this.opts);\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad?.(tile);\n if (this.opts.maxCacheByteSize !== null) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n throttleRequests: this.opts.maxRequests > 0 || this.opts.debounceTime > 0,\n maxRequests: this.opts.maxRequests,\n debounceTime: this.opts.debounceTime\n });\n\n // Maps tile id in string {z}-{x}-{y} to a Tile object\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n\n // Cache the last processed viewport\n this._viewport = null;\n this._zRange = null;\n this._selectedTiles = null;\n this._frameNumber = 0;\n\n this._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles(): Tile2DHeader[] | null {\n return this._selectedTiles;\n }\n\n get isLoaded(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.some(tile => tile.needsReload);\n }\n\n setOptions(opts: Tileset2DProps): void {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom as number);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom as number);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize(): void {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._selectedTiles = null;\n }\n\n reloadAll(): void {\n for (const id of this._cache.keys()) {\n const tile = this._cache.get(id) as Tile2DHeader;\n if (!this._selectedTiles || !this._selectedTiles.includes(tile)) {\n this._cache.delete(id);\n } else {\n tile.setNeedsReload();\n }\n }\n }\n\n /**\n * Update the cache with the given viewport and model matrix and triggers callback onUpdate.\n */\n update(\n viewport: Viewport,\n {zRange, modelMatrix}: {zRange: ZRange | null; modelMatrix: NumericArray | null} = {\n zRange: null,\n modelMatrix: null\n }\n ): number {\n const modelMatrixAsMatrix4 = modelMatrix ? new Matrix4(modelMatrix) : new Matrix4();\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (\n !this._viewport ||\n !viewport.equals(this._viewport) ||\n !equals(this._zRange, zRange) ||\n isModelMatrixNew\n ) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n this._zRange = zRange;\n const tileIndices = this.getTileIndices({\n viewport,\n maxZoom: this._maxZoom,\n minZoom: this._minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map(index => this._getTile(index, true));\n\n if (this._dirty) {\n // Some new tiles are added\n this._rebuildTree();\n }\n // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles!.map(tile => this._getTile(tile.index, true));\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n // eslint-disable-next-line complexity\n isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number},\n modelMatrix?: Matrix4 | null\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const boundsArr = this._getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n let {bbox} = tile;\n for (const [minX, minY, maxX, maxY] of boundsArr) {\n let overlaps;\n if ('west' in bbox) {\n overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n } else {\n if (modelMatrix && !Matrix4.IDENTITY.equals(modelMatrix)) {\n const [left, top, right, bottom] = transformBox(\n [bbox.left, bbox.top, bbox.right, bbox.bottom],\n modelMatrix\n );\n bbox = {left, top, right, bottom};\n }\n // top/bottom could be swapped depending on the indexing system\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n if (overlaps) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n\n /* Public interface for subclassing */\n\n /** Returns array of tile indices in the current viewport */\n getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | null;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n }): TileIndex[] {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: extent as Bounds | undefined,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns unique string key for a tile index */\n getTileId(index: TileIndex) {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns a zoom level for a tile index */\n getTileZoom(index: TileIndex) {\n return index.z;\n }\n\n /** Returns additional metadata to add to tile, bbox by default */\n getTileMetadata(index: TileIndex): Record<string, any> {\n const {tileSize} = this.opts;\n return {bbox: tileToBoundingBox(this._viewport!, index.x, index.y, index.z, tileSize)};\n }\n\n /** Returns index of the parent tile */\n getParentIndex(index: TileIndex) {\n const x = Math.floor(index.x / 2);\n const y = Math.floor(index.y / 2);\n const z = index.z - 1;\n return {x, y, z};\n }\n\n // Returns true if any tile's visibility changed\n private updateTileStates() {\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n // @ts-expect-error called only when _selectedTiles is already defined\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n private _getCullBounds = memoize(getCullBounds);\n\n private _pruneRequests(): void {\n const {maxRequests = 0} = this.opts;\n\n const abortCandidates: Tile2DHeader[] = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift()!;\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n private _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n if (tile.children) {\n tile.children.length = 0;\n }\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile);\n tile.parent = parent;\n if (parent?.children) {\n parent.children.push(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n private _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ??\n // @ts-expect-error called only when selectedTiles is initialized\n (opts.maxCacheByteSize !== null ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);\n const maxCacheByteSize = opts.maxCacheByteSize ?? Infinity;\n\n const overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [id, tile] of _cache) {\n if (!tile.isVisible && !tile.isSelected) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize !== null ? tile.byteLength : 0;\n _cache.delete(id);\n this.opts.onTileUnload?.(tile);\n }\n if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._rebuildTree();\n this._dirty = true;\n }\n if (this._dirty) {\n // sort by zoom level so that smaller tiles are displayed on top\n this._tiles = Array.from(this._cache.values()).sort((t1, t2) => t1.zoom - t2.zoom);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n private _getTile(index: TileIndex, create: true): Tile2DHeader;\n private _getTile(index: TileIndex, create?: false): Tile2DHeader | undefined;\n private _getTile(index: TileIndex, create?: boolean): Tile2DHeader | undefined {\n const id = this.getTileId(index);\n let tile = this._cache.get(id);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader(index);\n Object.assign(tile, this.getTileMetadata(tile.index));\n Object.assign(tile, {id, zoom: this.getTileZoom(tile.index)});\n needsReload = true;\n this._cache.set(id, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (tile && needsReload) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tile.loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this.onTileLoad,\n onError: this.opts.onTileError\n });\n }\n\n return tile;\n }\n\n _getNearestAncestor(tile: Tile2DHeader): Tile2DHeader | null {\n const {_minZoom = 0} = this;\n\n let index = tile.index;\n while (this.getTileZoom(index) > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this._getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\n/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.zoom - t2.zoom);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n\n if (tile.children && (tile.isVisible || tile.state! & TILE_STATE_VISITED)) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(startTile: Tile2DHeader) {\n let tile: Tile2DHeader | null = startTile;\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state! |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-env browser */\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\nimport type {Layer} from '@deck.gl/core';\n\nexport type TileLoadDataProps<DataT = any> = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise<DataT>;\n onLoad: (tile: Tile2DHeader<DataT>) => void;\n onError: (error: any, tile: Tile2DHeader<DataT>) => void;\n};\n\nexport class Tile2DHeader<DataT = any> {\n index: TileIndex;\n isVisible: boolean;\n isSelected: boolean;\n parent: Tile2DHeader | null;\n children: Tile2DHeader[] | null;\n content: DataT | null;\n state?: number;\n layers?: Layer[] | null;\n\n id!: string; // assigned _always_ with result of `getTileId`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record<string, any>; // _may be_ assigned with result of `getTileMetadata`\n boundingBox!: [min: number[], max: number[]]; // assigned _always_ with bbox from `getTileMetadata`\n\n private _abortController: AbortController | null;\n private _loader: Promise<void> | undefined;\n private _loaderId: number;\n private _isLoaded: boolean;\n private _isCancelled: boolean;\n private _needsReload: boolean;\n private _bbox!: TileBoundingBox;\n\n constructor(index: TileIndex) {\n this.index = index;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loader = undefined;\n this._abortController = null;\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n /** @deprecated use `boundingBox` instead */\n get bbox(): TileBoundingBox {\n return this._bbox;\n }\n\n // TODO - remove in v9\n set bbox(value: TileBoundingBox) {\n // Only set once from `Tileset2D.getTileMetadata`\n if (this._bbox) return;\n\n this._bbox = value;\n if ('west' in value) {\n this.boundingBox = [\n [value.west, value.south],\n [value.east, value.north]\n ];\n } else {\n this.boundingBox = [\n [value.left, value.top],\n [value.right, value.bottom]\n ];\n }\n }\n\n get data(): Promise<DataT | null> | DataT | null {\n return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded(): boolean {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading(): boolean {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload(): boolean {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength(): number {\n const result = this.content ? (this.content as any).byteLength : 0;\n if (!Number.isFinite(result)) {\n // eslint-disable-next-line no-console\n console.error('byteLength not defined in tile data');\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n private async _loadData({\n getData,\n requestScheduler,\n onLoad,\n onError\n }: TileLoadDataProps<DataT>): Promise<void> {\n const {index, id, bbox, userData, zoom} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController();\n const {signal} = this._abortController;\n\n // @ts-expect-error (2345) Argument of type '(tile: any) => 1 | -1' is not assignable ...\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData: DataT | null = null;\n let error;\n try {\n tileData = await getData({index, id, bbox, userData, zoom, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n\n loadData(opts: TileLoadDataProps): Promise<void> {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload(): void {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort(): void {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController?.abort();\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | null,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport} from '@deck.gl/core';\nimport {Matrix4} from '@math.gl/core';\nimport {getOSMTileIndices} from './tile-2d-traversal';\nimport {Bounds, GeoBoundingBox, TileBoundingBox, TileIndex, ZRange} from './types';\n\nconst TILE_SIZE = 512;\nconst DEFAULT_EXTENT: Bounds = [-Infinity, -Infinity, Infinity, Infinity];\n\nexport type URLTemplate = string | string[] | null;\n\nexport const urlType = {\n type: 'object' as const,\n value: null as URLTemplate,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every(url => typeof url === 'string')),\n equal: (value1, value2) => {\n if (value1 === value2) {\n return true;\n }\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return false;\n }\n const len = value1.length;\n if (len !== value2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n};\n\nexport function transformBox(bbox: Bounds, modelMatrix: Matrix4): Bounds {\n const transformedCoords = [\n // top-left\n modelMatrix.transformAsPoint([bbox[0], bbox[1]]),\n // top-right\n modelMatrix.transformAsPoint([bbox[2], bbox[1]]),\n // bottom-left\n modelMatrix.transformAsPoint([bbox[0], bbox[3]]),\n // bottom-right\n modelMatrix.transformAsPoint([bbox[2], bbox[3]])\n ];\n const transformedBox: Bounds = [\n // Minimum x coord\n Math.min(...transformedCoords.map(i => i[0])),\n // Minimum y coord\n Math.min(...transformedCoords.map(i => i[1])),\n // Max x coord\n Math.max(...transformedCoords.map(i => i[0])),\n // Max y coord\n Math.max(...transformedCoords.map(i => i[1]))\n ];\n return transformedBox;\n}\n\nfunction stringHash(s: string): number {\n return Math.abs(s.split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0));\n}\n\nexport function getURLFromTemplate(\n template: URLTemplate,\n tile: {\n index: TileIndex;\n id: string;\n }\n): string | null {\n if (!template || !template.length) {\n return null;\n }\n const {index, id} = tile;\n\n if (Array.isArray(template)) {\n const i = stringHash(id) % template.length;\n template = template[i];\n }\n\n let url = template;\n for (const key of Object.keys(index)) {\n const regex = new RegExp(`{${key}}`, 'g');\n url = url.replace(regex, String(index[key]));\n }\n\n // Back-compatible support for {-y}\n if (Number.isInteger(index.y) && Number.isInteger(index.z)) {\n url = url.replace(/\\{-y\\}/g, String(Math.pow(2, index.z) - index.y - 1));\n }\n return url;\n}\n\n/**\n * gets the bounding box of a viewport\n */\nfunction getBoundingBox(viewport: Viewport, zRange: number[] | null, extent: Bounds): Bounds {\n let bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n bounds = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n bounds = viewport.getBounds();\n }\n if (!viewport.isGeospatial) {\n return [\n // Top corner should not be more then bottom corner in either direction\n Math.max(Math.min(bounds[0], extent[2]), extent[0]),\n Math.max(Math.min(bounds[1], extent[3]), extent[1]),\n // Bottom corner should not be less then top corner in either direction\n Math.min(Math.max(bounds[2], extent[0]), extent[2]),\n Math.min(Math.max(bounds[3], extent[1]), extent[3])\n ];\n }\n return [\n Math.max(bounds[0], extent[0]),\n Math.max(bounds[1], extent[1]),\n Math.min(bounds[2], extent[2]),\n Math.min(bounds[3], extent[3])\n ];\n}\n\n/** Get culling bounds in world space */\nexport function getCullBounds({\n viewport,\n z,\n cullRect\n}: {\n /** Current viewport */\n viewport: Viewport;\n /** Current z range */\n z: ZRange | number | null;\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number};\n}): [number, number, number, number][] {\n const subViewports = viewport.subViewports || [viewport];\n return subViewports.map(v => getCullBoundsInViewport(v, z || 0, cullRect));\n}\n\nfunction getCullBoundsInViewport(\n /** Current viewport */\n viewport: Viewport,\n /** At altitude */\n z: ZRange | number,\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number}\n): [number, number, number, number] {\n if (!Array.isArray(z)) {\n const x = cullRect.x - viewport.x;\n const y = cullRect.y - viewport.y;\n const {width, height} = cullRect;\n\n const unprojectOption = {targetZ: z};\n\n const topLeft = viewport.unproject([x, y], unprojectOption);\n const topRight = viewport.unproject([x + width, y], unprojectOption);\n const bottomLeft = viewport.unproject([x, y + height], unprojectOption);\n const bottomRight = viewport.unproject([x + width, y + height], unprojectOption);\n\n return [\n Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]),\n Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])\n ];\n }\n\n const bounds0 = getCullBoundsInViewport(viewport, z[0], cullRect);\n const bounds1 = getCullBoundsInViewport(viewport, z[1], cullRect);\n\n return [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n}\n\nfunction getIndexingCoords(bbox: Bounds, scale: number, modelMatrixInverse?: Matrix4): Bounds {\n if (modelMatrixInverse) {\n const transformedTileIndex = transformBox(bbox, modelMatrixInverse).map(\n i => (i * scale) / TILE_SIZE\n );\n return transformedTileIndex as Bounds;\n }\n return bbox.map(i => (i * scale) / TILE_SIZE) as Bounds;\n}\n\nfunction getScale(z: number, tileSize: number): number {\n return (Math.pow(2, z) * TILE_SIZE) / tileSize;\n}\n\n// https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2\nexport function osmTile2lngLat(x: number, y: number, z: number): [number, number] {\n const scale = getScale(z, TILE_SIZE);\n const lng = (x / scale) * 360 - 180;\n const n = Math.PI - (2 * Math.PI * y) / scale;\n const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lng, lat];\n}\n\nfunction tile2XY(x: number, y: number, z: number, tileSize: number): [number, number] {\n const scale = getScale(z, tileSize);\n return [(x / scale) * TILE_SIZE, (y / scale) * TILE_SIZE];\n}\nexport function tileToBoundingBox(\n viewport: Viewport,\n x: number,\n y: number,\n z: number,\n tileSize: number = TILE_SIZE\n): TileBoundingBox {\n if (viewport.isGeospatial) {\n const [west, north] = osmTile2lngLat(x, y, z);\n const [east, south] = osmTile2lngLat(x + 1, y + 1, z);\n return {west, north, east, south};\n }\n const [left, top] = tile2XY(x, y, z, tileSize);\n const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);\n return {left, top, right, bottom};\n}\n\nfunction getIdentityTileIndices(\n viewport: Viewport,\n z: number,\n tileSize: number,\n extent: Bounds,\n modelMatrixInverse?: Matrix4\n) {\n const bbox = getBoundingBox(viewport, null, extent);\n const scale = getScale(z, tileSize);\n const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);\n const indices: TileIndex[] = [];\n\n /*\n | TILE | TILE | TILE |\n |(minX) |(maxX)\n */\n for (let x = Math.floor(minX); x < maxX; x++) {\n for (let y = Math.floor(minY); y < maxY; y++) {\n indices.push({x, y, z});\n }\n }\n return indices;\n}\n\n/**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n// eslint-disable-next-line complexity\nexport function getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n extent,\n tileSize = TILE_SIZE,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset = 0\n}: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | null;\n extent?: Bounds;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n}) {\n let z = viewport.isGeospatial\n ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset\n : Math.ceil(viewport.zoom) + zoomOffset;\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n if (!extent) {\n return [];\n }\n z = minZoom;\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n let transformedExtent = extent;\n if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {\n transformedExtent = transformBox(extent, modelMatrix);\n }\n return viewport.isGeospatial\n ? getOSMTileIndices(viewport, z, zRange, extent)\n : getIdentityTileIndices(\n viewport,\n z,\n tileSize,\n transformedExtent || DEFAULT_EXTENT,\n modelMatrixInverse\n );\n}\n\n/**\n * Returns true if s is a valid URL template\n */\nexport function isURLTemplate(s: string): boolean {\n return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);\n}\n\nexport function isGeoBoundingBox(v: any): v is GeoBoundingBox {\n return (\n Number.isFinite(v.west) &&\n Number.isFinite(v.north) &&\n Number.isFinite(v.east) &&\n Number.isFinite(v.south)\n );\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// deck.gl, MIT license\n// @note - this is a duplicate of the deck.gl core export (because Tileset2D should be deck.gl independent)\n\n/**\n * Speed up consecutive function calls by caching the result of calls with identical input\n * https://en.wikipedia.org/wiki/Memoization\n * @param compute - the function to be memoized\n */\nexport function memoize<In, Out>(compute: (args: In) => Out): (args: In) => Out {\n let cachedArgs: any = {};\n let cachedResult: Out;\n\n return (args: In) => {\n for (const key in args) {\n if (!isEqual(args[key], cachedArgs[key])) {\n cachedResult = compute(args);\n cachedArgs = args;\n break;\n }\n }\n return cachedResult;\n };\n}\n\nfunction isEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (Array.isArray(a)) {\n // Special treatment for arrays: compare 1-level deep\n // This is to support equality of matrix/coordinate props\n const len = a.length;\n if (!b || b.length !== len) {\n return false;\n }\n\n for (let i = 0; i < len; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NumericArray} from '@math.gl/core';\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {PathLayer, PathLayerProps} from '@deck.gl/layers';\n\nimport {tripsUniforms, TripsProps} from './trips-layer-uniforms';\n\nconst defaultProps: DefaultProps<TripsLayerProps> = {\n fadeTrail: true,\n trailLength: {type: 'number', value: 120, min: 0},\n currentTime: {type: 'number', value: 0, min: 0},\n getTimestamps: {type: 'accessor', value: (d: any) => d.timestamps}\n};\n\n/** All properties supported by TripsLayer. */\nexport type TripsLayerProps<DataT = unknown> = _TripsLayerProps<DataT> & PathLayerProps<DataT>;\n\n/** Properties added by TripsLayer. */\ntype _TripsLayerProps<DataT = unknown> = {\n /**\n * Whether or not the path fades out.\n * @default true\n */\n fadeTrail?: boolean;\n /**\n * Trail length.\n * @default 120\n */\n trailLength?: number;\n /**\n * The current time of the frame.\n * @default 0\n */\n currentTime?: number;\n /**\n * Timestamp accessor.\n */\n getTimestamps?: AccessorFunction<DataT, NumericArray>;\n};\n\n/** Render animated paths that represent vehicle trips. */\nexport default class TripsLayer<DataT = any, ExtraProps extends {} = {}> extends PathLayer<\n DataT,\n Required<_TripsLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'TripsLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n shaders.inject = {\n 'vs:#decl': `\\\nin float instanceTimestamps;\nin float instanceNextTimestamps;\nout float vTime;\n`,\n // Timestamp of the vertex\n 'vs:#main-end': `\\\nvTime = instanceTimestamps + (instanceNextTimestamps - instanceTimestamps) * vPathPosition.y / vPathLength;\n`,\n 'fs:#decl': `\\\nin float vTime;\n`,\n // Drop the segments outside of the time window\n 'fs:#main-start': `\\\nif(vTime > trips.currentTime || (trips.fadeTrail && (vTime < trips.currentTime - trips.trailLength))) {\n discard;\n}\n`,\n // Fade the color (currentTime - 100%, end of trail - 0%)\n 'fs:DECKGL_FILTER_COLOR': `\\\nif(trips.fadeTrail) {\n color.a *= 1.0 - (trips.currentTime - vTime) / trips.trailLength;\n}\n`\n };\n shaders.modules = [...shaders.modules, tripsUniforms];\n return shaders;\n }\n\n initializeState() {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n attributeManager!.addInstanced({\n timestamps: {\n size: 1,\n accessor: 'getTimestamps',\n shaderAttributes: {\n instanceTimestamps: {\n vertexOffset: 0\n },\n instanceNextTimestamps: {\n vertexOffset: 1\n }\n }\n }\n });\n }\n\n draw(params) {\n const {fadeTrail, trailLength, currentTime} = this.props;\n const tripsProps: TripsProps = {fadeTrail, trailLength, currentTime};\n\n const model = this.state.model!;\n model.shaderInputs.setProps({trips: tripsProps});\n super.draw(params);\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ShaderModule} from '@luma.gl/shadertools';\n\nconst uniformBlock = `\\\nuniform tripsUniforms {\n bool fadeTrail;\n float trailLength;\n float currentTime;\n} trips;\n`;\n\nexport type TripsProps = {\n fadeTrail: boolean;\n trailLength: number;\n currentTime: number;\n};\n\nexport const tripsUniforms = {\n name: 'trips',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n fadeTrail: 'f32',\n trailLength: 'f32',\n currentTime: 'f32'\n }\n} as const satisfies ShaderModule<TripsProps>;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {cellsToMultiPolygon, H3IndexInput} from 'h3-js';\n\nimport {AccessorFunction, createIterable, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {default as H3HexagonLayer} from './h3-hexagon-layer';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {normalizeLongitudes} from './h3-utils';\n\nconst defaultProps: DefaultProps<H3ClusterLayerProps> = {\n getHexagons: {type: 'accessor', value: (d: any) => d.hexagons}\n};\n\n/** All properties supported by H3ClusterLayer. */\nexport type H3ClusterLayerProps<DataT = unknown> = _H3ClusterLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by H3ClusterLayer. */\ntype _H3ClusterLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the hexagon identifiers.\n *\n * By default, it reads `hexagons` property of data object.\n */\n getHexagons?: AccessorFunction<DataT, H3IndexInput[]>;\n};\n\nexport default class H3ClusterLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_H3ClusterLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'H3ClusterLayer';\n static defaultProps = defaultProps;\n\n state!: {\n polygons: {polygon: number[][][]}[];\n };\n\n initializeState(): void {\n H3HexagonLayer._checkH3Lib();\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagons)\n ) {\n const {data, getHexagons} = props;\n const polygons: {polygon: number[][][]}[] = [];\n\n const {iterable, objectInfo} = createIterable(data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexagons = getHexagons(object, objectInfo);\n const multiPolygon = cellsToMultiPolygon(hexagons, true);\n\n for (const polygon of multiPolygon) {\n // Normalize polygons to prevent wrapping over the anti-meridian\n for (const ring of polygon) {\n normalizeLongitudes(ring);\n }\n polygons.push(this.getSubLayerRow({polygon}, object, objectInfo.index));\n }\n }\n\n this.setState({polygons});\n }\n }\n\n indexToBounds(): Partial<GeoCellLayer['props']> {\n const {getElevation, getFillColor, getLineColor, getLineWidth} = this.props;\n\n return {\n data: this.state.polygons,\n getPolygon: d => d.polygon,\n\n getElevation: this.getSubLayerAccessor(getElevation),\n getFillColor: this.getSubLayerAccessor(getFillColor),\n getLineColor: this.getSubLayerAccessor(getLineColor),\n getLineWidth: this.getSubLayerAccessor(getLineWidth)\n };\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n getResolution,\n cellToLatLng,\n latLngToCell,\n isPentagon,\n gridDistance,\n getHexagonEdgeLengthAvg,\n H3Index\n} from 'h3-js';\nimport {\n AccessorFunction,\n CompositeLayer,\n createIterable,\n Layer,\n LayersList,\n UpdateParameters,\n WebMercatorViewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {ColumnLayer, PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\nimport {flattenPolygon, getHexagonCentroid, h3ToPolygon} from './h3-utils';\n\n// There is a cost to updating the instanced geometries when using highPrecision: false\n// This constant defines the distance between two hexagons that leads to \"significant\n// distortion.\" Smaller value makes the column layer more sensitive to viewport change.\nconst UPDATE_THRESHOLD_KM = 10;\n\nfunction mergeTriggers(getHexagon, coverage) {\n let trigger;\n if (getHexagon === undefined || getHexagon === null) {\n trigger = coverage;\n } else if (typeof getHexagon === 'object') {\n trigger = {...getHexagon, coverage};\n } else {\n trigger = {getHexagon, coverage};\n }\n return trigger;\n}\n\nconst defaultProps: DefaultProps<H3HexagonLayerProps> = {\n ...PolygonLayer.defaultProps,\n highPrecision: 'auto',\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n centerHexagon: null,\n getHexagon: {type: 'accessor', value: (x: any) => x.hexagon},\n extruded: true\n};\n\n/** All properties supported by H3HexagonLayer */\nexport type H3HexagonLayerProps<DataT = unknown> = _H3HexagonLayerProps<DataT> &\n PolygonLayerProps<DataT>;\n\n/** Props added by the H3HexagonLayer */\ntype _H3HexagonLayerProps<DataT> = {\n /**\n * Whether or not draw hexagons with high precision.\n * @default 'auto'\n */\n highPrecision?: boolean | 'auto';\n /**\n * Coverage of hexagon in cell.\n * @default 1\n */\n coverage?: number;\n /**\n * Center hexagon that best represents the shape of the set. If not specified, the hexagon closest to the center of the viewport is used.\n */\n centerHexagon?: H3Index | null;\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `hexagon` property of data object.\n */\n getHexagon?: AccessorFunction<DataT, string>;\n /**\n * Whether to extrude polygons.\n * @default true\n */\n extruded?: boolean;\n};\n\n/**\n * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.\n */\nexport default class H3HexagonLayer<\n DataT = any,\n ExtraPropsT extends {} = {}\n> extends CompositeLayer<ExtraPropsT & Required<H3HexagonLayerProps<DataT>>> {\n static defaultProps = defaultProps;\n static layerName = 'H3HexagonLayer';\n\n // See `main/bundle.ts`\n static _checkH3Lib = () => {};\n\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n this.state = {\n edgeLengthKM: 0,\n resolution: -1\n };\n }\n\n state!: {\n centerHex?: H3Index;\n edgeLengthKM: number;\n hasMultipleRes?: boolean;\n hasPentagon?: boolean;\n resolution: number;\n vertices?: number[][];\n };\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return this._shouldUseHighPrecision()\n ? changeFlags.propsOrDataChanged\n : changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n props.highPrecision !== true &&\n (changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))\n ) {\n const dataProps = this._calculateH3DataProps();\n this.setState(dataProps);\n }\n\n this._updateVertices(this.context.viewport as WebMercatorViewport);\n }\n\n private _calculateH3DataProps() {\n let resolution = -1;\n let hasPentagon = false;\n let hasMultipleRes = false;\n\n const {iterable, objectInfo} = createIterable(this.props.data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexId = this.props.getHexagon(object, objectInfo);\n // Take the resolution of the first hex\n const hexResolution = getResolution(hexId);\n if (resolution < 0) {\n resolution = hexResolution;\n if (!this.props.highPrecision) break;\n } else if (resolution !== hexResolution) {\n hasMultipleRes = true;\n break;\n }\n if (isPentagon(hexId)) {\n hasPentagon = true;\n break;\n }\n }\n\n return {\n resolution,\n edgeLengthKM: resolution >= 0 ? getHexagonEdgeLengthAvg(resolution, 'km') : 0,\n hasMultipleRes,\n hasPentagon\n };\n }\n\n private _shouldUseHighPrecision(): boolean {\n if (this.props.highPrecision === 'auto') {\n const {resolution, hasPentagon, hasMultipleRes} = this.state;\n const {viewport} = this.context;\n return (\n Boolean(viewport?.resolution) ||\n hasMultipleRes ||\n hasPentagon ||\n (resolution >= 0 && resolution <= 5)\n );\n }\n\n return this.props.highPrecision;\n }\n\n private _updateVertices(viewport: WebMercatorViewport): void {\n if (this._shouldUseHighPrecision()) {\n return;\n }\n const {resolution, edgeLengthKM, centerHex} = this.state;\n if (resolution < 0) {\n return;\n }\n const hex =\n this.props.centerHexagon || latLngToCell(viewport.latitude, viewport.longitude, resolution);\n if (centerHex === hex) {\n return;\n }\n if (centerHex) {\n try {\n const distance = gridDistance(centerHex, hex);\n if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {\n return;\n }\n } catch {\n // gridDistance throws if the distance could not be computed\n // due to the two indexes very far apart or on opposite sides of a pentagon.\n }\n }\n\n const {unitsPerMeter} = viewport.distanceScales;\n\n let vertices = h3ToPolygon(hex);\n const [centerLat, centerLng] = cellToLatLng(hex);\n\n const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);\n vertices = vertices.map(p => {\n const worldPosition = viewport.projectFlat(p);\n return [\n (worldPosition[0] - centerX) / unitsPerMeter[0],\n (worldPosition[1] - centerY) / unitsPerMeter[1]\n ];\n });\n\n this.setState({centerHex: hex, vertices});\n }\n\n renderLayers(): Layer | null | LayersList {\n return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();\n }\n\n private _getForwardProps() {\n const {\n elevationScale,\n material,\n coverage,\n extruded,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n getFillColor,\n getElevation,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers\n } = this.props;\n\n return {\n elevationScale,\n extruded,\n coverage,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n material,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers: {\n getFillColor: updateTriggers.getFillColor,\n getElevation: updateTriggers.getElevation,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n } as {\n getFillColor: any;\n getElevation: any;\n getLineColor: any;\n getLineWidth: any;\n getPolygon?: any;\n getPosition?: any;\n }\n };\n }\n\n private _renderPolygonLayer(): PolygonLayer {\n const {data, getHexagon, updateTriggers, coverage} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell-hifi',\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (object, objectInfo) => {\n const hexagonId = getHexagon(object, objectInfo);\n return flattenPolygon(h3ToPolygon(hexagonId, coverage));\n }\n }\n );\n }\n\n private _renderColumnLayer(): ColumnLayer {\n const {data, getHexagon, updateTriggers} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell',\n flatShading: true,\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n diskResolution: 6, // generate an extruded hexagon as the base geometry\n radius: 1,\n vertices: this.state.vertices,\n getPosition: getHexagonCentroid.bind(null, getHexagon)\n }\n );\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Geometry} from '@luma.gl/engine';\n\nimport {\n Accessor,\n Color,\n CompositeLayer,\n CompositeLayerProps,\n COORDINATE_SYSTEM,\n FilterContext,\n GetPickingInfoParams,\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n Viewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {PointCloudLayer} from '@deck.gl/layers';\nimport {ScenegraphLayer} from '@deck.gl/mesh-layers';\nimport {default as MeshLayer} from '../mesh-layer/mesh-layer';\n\nimport {load} from '@loaders.gl/core';\nimport {MeshAttributes} from '@loaders.gl/schema';\nimport {Tileset3D, Tile3D, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Tiles3DLoader} from '@loaders.gl/3d-tiles';\n\nconst SINGLE_DATA = [0];\n\nconst defaultProps: DefaultProps<Tile3DLayerProps> = {\n getPointColor: {type: 'accessor', value: [0, 0, 0, 255]},\n pointSize: 1.0,\n\n // Disable async data loading (handling it in _loadTileSet)\n data: '',\n loader: Tiles3DLoader,\n\n onTilesetLoad: {type: 'function', value: tileset3d => {}},\n onTileLoad: {type: 'function', value: tileHeader => {}},\n onTileUnload: {type: 'function', value: tileHeader => {}},\n onTileError: {type: 'function', value: (tile, message, url) => {}},\n _getMeshColor: {type: 'function', value: tileHeader => [255, 255, 255]}\n};\n\n/** All properties supported by Tile3DLayer */\nexport type Tile3DLayerProps<DataT = unknown> = _Tile3DLayerProps<DataT> & CompositeLayerProps;\n\n/** Props added by the Tile3DLayer */\ntype _Tile3DLayerProps<DataT> = {\n data: string;\n /** Color Accessor for point clouds. **/\n getPointColor?: Accessor<DataT, Color>;\n\n /** Global radius of all points in pixels. **/\n pointSize?: number;\n\n /** A loader which is used to decode the fetched tiles.\n * @deprecated Use `loaders` instead\n */\n loader?: typeof Tiles3DLoader;\n\n /** Called when Tileset JSON file is loaded. **/\n onTilesetLoad?: (tile: Tileset3D) => void;\n\n /** Called when a tile in the tileset hierarchy is loaded. **/\n onTileLoad?: (tile: Tile3D) => void;\n\n /** Called when a tile is unloaded. **/\n onTileUnload?: (tile: Tile3D) => void;\n\n /** Called when a tile fails to load. **/\n onTileError?: (tile: Tile3D, url: string, message: string) => void;\n\n /** (Experimental) Accessor to change color of mesh based on properties. **/\n _getMeshColor?: (tile: Tile3D) => Color;\n};\n\n/** Render 3d tiles data formatted according to the [3D Tiles Specification](https://www.opengeospatial.org/standards/3DTiles) and [`ESRI I3S`](https://github.com/Esri/i3s-spec) */\nexport default class Tile3DLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_Tile3DLayerProps<DataT>>\n> {\n static defaultProps = defaultProps;\n static layerName = 'Tile3DLayer';\n\n state!: {\n activeViewports: {};\n frameNumber?: number;\n lastUpdatedViewports: {[viewportId: string]: Viewport} | null;\n layerMap: {[layerId: string]: any};\n tileset3d: Tileset3D | null;\n };\n\n initializeState() {\n if ('onTileLoadFail' in this.props) {\n log.removed('onTileLoadFail', 'onTileError')();\n }\n // prop verification\n this.state = {\n layerMap: {},\n tileset3d: null,\n activeViewports: {},\n lastUpdatedViewports: null\n };\n }\n\n get isLoaded(): boolean {\n return Boolean(this.state?.tileset3d?.isLoaded() && super.isLoaded);\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, oldProps, changeFlags}: UpdateParameters<this>): void {\n if (props.data && props.data !== oldProps.data) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadTileset(props.data);\n }\n\n if (changeFlags.viewportChanged) {\n const {activeViewports} = this.state;\n const viewportsNumber = Object.keys(activeViewports).length;\n if (viewportsNumber) {\n this._updateTileset(activeViewports);\n this.state.lastUpdatedViewports = activeViewports;\n this.state.activeViewports = {};\n }\n }\n if (changeFlags.propsChanged) {\n const {layerMap} = this.state;\n for (const key in layerMap) {\n layerMap[key].needsUpdate = true;\n }\n }\n }\n\n activateViewport(viewport: Viewport): void {\n const {activeViewports, lastUpdatedViewports} = this.state;\n this.internalState!.viewport = viewport;\n\n activeViewports[viewport.id] = viewport;\n const lastViewport = lastUpdatedViewports?.[viewport.id];\n if (!lastViewport || !viewport.equals(lastViewport)) {\n this.setChangeFlags({viewportChanged: true});\n this.setNeedsUpdate();\n }\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams) {\n const sourceTile = sourceLayer && (sourceLayer.props as any).tile;\n if (info.picked) {\n info.object = sourceTile;\n }\n (info as any).sourceTile = sourceTile;\n\n return info;\n }\n\n filterSubLayer({layer, viewport}: FilterContext): boolean {\n // All sublayers will have a tile prop\n const {tile} = layer.props as unknown as {tile: Tile3D};\n const {id: viewportId} = viewport;\n return tile.selected && tile.viewportIds.includes(viewportId);\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const sourceTile = (info as any).sourceTile;\n const layerCache = this.state.layerMap[sourceTile?.id];\n if (layerCache && layerCache.layer) {\n layerCache.layer.updateAutoHighlight(info);\n }\n }\n\n private async _loadTileset(tilesetUrl) {\n const {loadOptions = {}} = this.props;\n\n // TODO: deprecate `loader` in v9.0\n // @ts-ignore\n const loaders = this.props.loader || this.props.loaders;\n const loader = Array.isArray(loaders) ? loaders[0] : loaders;\n\n const options = {loadOptions: {...loadOptions}};\n let actualTilesetUrl = tilesetUrl;\n if (loader.preload) {\n const preloadOptions = await loader.preload(tilesetUrl, loadOptions);\n if (preloadOptions.url) {\n actualTilesetUrl = preloadOptions.url;\n }\n\n if (preloadOptions.headers) {\n options.loadOptions.fetch = {\n ...options.loadOptions.fetch,\n headers: preloadOptions.headers\n };\n }\n Object.assign(options, preloadOptions);\n }\n const tilesetJson = await load(actualTilesetUrl, loader, options.loadOptions);\n\n const tileset3d = new Tileset3D(tilesetJson, {\n onTileLoad: this._onTileLoad.bind(this),\n onTileUnload: this._onTileUnload.bind(this),\n onTileError: this.props.onTileError,\n ...options\n });\n\n this.setState({\n tileset3d,\n layerMap: {}\n });\n\n this._updateTileset(this.state.activeViewports);\n this.props.onTilesetLoad(tileset3d);\n }\n\n private _onTileLoad(tileHeader: Tile3D): void {\n const {lastUpdatedViewports} = this.state;\n this.props.onTileLoad(tileHeader);\n this._updateTileset(lastUpdatedViewports);\n this.setNeedsUpdate();\n }\n\n private _onTileUnload(tileHeader: Tile3D): void {\n // Was cleaned up from tileset cache. We no longer need to track it.\n delete this.state.layerMap[tileHeader.id];\n this.props.onTileUnload(tileHeader);\n }\n\n private _updateTileset(viewports: {[viewportId: string]: Viewport} | null): void {\n if (!viewports) {\n return;\n }\n const {tileset3d} = this.state;\n const {timeline} = this.context;\n const viewportsNumber = Object.keys(viewports).length;\n if (!timeline || !viewportsNumber || !tileset3d) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tileset3d.selectTiles(Object.values(viewports)).then(frameNumber => {\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n if (tilesetChanged) {\n this.setState({frameNumber});\n }\n });\n }\n\n private _getSubLayer(\n tileHeader: Tile3D,\n oldLayer?: Layer\n ): MeshLayer<DataT> | PointCloudLayer<DataT> | ScenegraphLayer<DataT> | null {\n if (!tileHeader.content) {\n return null;\n }\n\n switch (tileHeader.type as TILE_TYPE) {\n case TILE_TYPE.POINTCLOUD:\n return this._makePointCloudLayer(tileHeader, oldLayer as PointCloudLayer<DataT>);\n case TILE_TYPE.SCENEGRAPH:\n return this._make3DModelLayer(tileHeader);\n case TILE_TYPE.MESH:\n return this._makeSimpleMeshLayer(tileHeader, oldLayer as MeshLayer<DataT>);\n default:\n throw new Error(`Tile3DLayer: Failed to render layer of type ${tileHeader.content.type}`);\n }\n }\n\n private _makePointCloudLayer(\n tileHeader: Tile3D,\n oldLayer?: PointCloudLayer<DataT>\n ): PointCloudLayer<DataT> | null {\n const {attributes, pointCount, constantRGBA, cartographicOrigin, modelMatrix} =\n tileHeader.content;\n const {positions, normals, colors} = attributes;\n\n if (!positions) {\n return null;\n }\n const data = (oldLayer && oldLayer.props.data) || {\n header: {\n vertexCount: pointCount\n },\n attributes: {\n POSITION: positions,\n NORMAL: normals,\n COLOR_0: colors\n }\n };\n\n const {pointSize, getPointColor} = this.props;\n const SubLayerClass = this.getSubLayerClass('pointcloud', PointCloudLayer);\n return new SubLayerClass(\n {\n pointSize\n },\n this.getSubLayerProps({\n id: 'pointcloud'\n }),\n {\n id: `${this.id}-pointcloud-${tileHeader.id}`,\n tile: tileHeader,\n data,\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n coordinateOrigin: cartographicOrigin,\n modelMatrix,\n getColor: constantRGBA || getPointColor,\n _offset: 0\n }\n );\n }\n\n private _make3DModelLayer(tileHeader: Tile3D): ScenegraphLayer<DataT> {\n const {gltf, instances, cartographicOrigin, modelMatrix} = tileHeader.content;\n\n const SubLayerClass = this.getSubLayerClass('scenegraph', ScenegraphLayer);\n\n return new SubLayerClass(\n {\n _lighting: 'pbr'\n },\n this.getSubLayerProps({\n id: 'scenegraph'\n }),\n {\n id: `${this.id}-scenegraph-${tileHeader.id}`,\n tile: tileHeader,\n data: instances || SINGLE_DATA,\n scenegraph: gltf,\n\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n coordinateOrigin: cartographicOrigin,\n modelMatrix,\n getTransformMatrix: instance => instance.modelMatrix,\n getPosition: [0, 0, 0],\n _offset: 0\n }\n );\n }\n\n private _makeSimpleMeshLayer(tileHeader: Tile3D, oldLayer?: MeshLayer<DataT>): MeshLayer<DataT> {\n const content = tileHeader.content;\n const {\n attributes,\n indices,\n modelMatrix,\n cartographicOrigin,\n coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS,\n material,\n featureIds\n } = content;\n const {_getMeshColor} = this.props;\n\n const geometry =\n (oldLayer && oldLayer.props.mesh) ||\n new Geometry({\n topology: 'triangle-list',\n attributes: getMeshGeometry(attributes),\n indices\n });\n\n const SubLayerClass = this.getSubLayerClass('mesh', MeshLayer);\n\n return new SubLayerClass(\n this.getSubLayerProps({\n id: 'mesh'\n }),\n {\n id: `${this.id}-mesh-${tileHeader.id}`,\n tile: tileHeader,\n mesh: geometry,\n data: SINGLE_DATA,\n getColor: _getMeshColor(tileHeader),\n pbrMaterial: material,\n modelMatrix,\n coordinateOrigin: cartographicOrigin,\n coordinateSystem,\n featureIds,\n _offset: 0\n }\n );\n }\n\n renderLayers(): Layer | null | LayersList {\n const {tileset3d, layerMap} = this.state;\n if (!tileset3d) {\n return null;\n }\n\n // loaders.gl doesn't provide a type for tileset3d.tiles\n return (tileset3d.tiles as Tile3D[])\n .map(tile => {\n const layerCache = (layerMap[tile.id] = layerMap[tile.id] || {tile});\n let {layer} = layerCache;\n if (tile.selected) {\n // render selected tiles\n if (!layer) {\n // create layer\n layer = this._getSubLayer(tile);\n } else if (layerCache.needsUpdate) {\n // props have changed, rerender layer\n layer = this._getSubLayer(tile, layer);\n layerCache.needsUpdate = false;\n }\n }\n layerCache.layer = layer;\n return layer;\n })\n .filter(Boolean);\n }\n}\n\nfunction getMeshGeometry(contentAttributes: MeshAttributes): MeshAttributes {\n const attributes: MeshAttributes = {};\n attributes.positions = {\n ...contentAttributes.positions,\n value: new Float32Array(contentAttributes.positions.value)\n };\n if (contentAttributes.normals) {\n attributes.normals = contentAttributes.normals;\n }\n if (contentAttributes.texCoords) {\n attributes.texCoords = contentAttributes.texCoords;\n }\n if (contentAttributes.colors) {\n attributes.colors = contentAttributes.colors;\n }\n if (contentAttributes.uvRegions) {\n attributes.uvRegions = contentAttributes.uvRegions;\n }\n return attributes;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NumericArray} from '@math.gl/core';\nimport {parsePBRMaterial, ParsedPBRMaterial} from '@luma.gl/gltf';\nimport {pbrMaterial} from '@luma.gl/shadertools';\nimport {Model} from '@luma.gl/engine';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core';\nimport {SimpleMeshLayer, SimpleMeshLayerProps} from '@deck.gl/mesh-layers';\n\nimport {MeshProps, meshUniforms} from './mesh-layer-uniforms';\nimport vs from './mesh-layer-vertex.glsl';\nimport fs from './mesh-layer-fragment.glsl';\n\nexport type Mesh = {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n};\n\nfunction validateGeometryAttributes(attributes: MeshAttributes) {\n const positionAttribute = attributes.positions || attributes.POSITION;\n const vertexCount = positionAttribute.value.length / positionAttribute.size;\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {\n size: 4,\n value: new Uint8Array(vertexCount * 4).fill(255),\n normalized: true\n };\n }\n}\n\nconst defaultProps: DefaultProps<MeshLayerProps> = {\n pbrMaterial: {type: 'object', value: null},\n featureIds: {type: 'array', value: null, optional: true}\n};\n\n/** All properties supported by MeshLayer. */\nexport type MeshLayerProps<DataT = unknown> = _MeshLayerProps & SimpleMeshLayerProps<DataT>;\n\n/** Properties added by MeshLayer. */\ntype _MeshLayerProps = {\n /**\n * PBR material object. _lighting must be pbr for this to work\n */\n pbrMaterial?: any; // TODO add type when converting Tile3DLayer\n\n /**\n * List of feature ids.\n */\n featureIds?: NumericArray | null;\n};\n\nexport default class MeshLayer<DataT = any, ExtraProps extends {} = {}> extends SimpleMeshLayer<\n DataT,\n Required<_MeshLayerProps> & ExtraProps\n> {\n static layerName = 'MeshLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n const modules = shaders.modules;\n modules.push(pbrMaterial, meshUniforms);\n return {...shaders, vs, fs};\n }\n\n initializeState() {\n const {featureIds} = this.props;\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n if (featureIds) {\n // attributeManager is always defined in a primitive layer\n attributeManager!.add({\n featureIdsPickingColors: {\n type: 'uint8',\n size: 3,\n noAlloc: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateFeatureIdsPickingColors\n }\n });\n }\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {props, oldProps} = params;\n if (props.pbrMaterial !== oldProps.pbrMaterial) {\n this.updatePbrMaterialUniforms(props.pbrMaterial);\n }\n }\n\n draw(opts) {\n const {featureIds} = this.props;\n const {model} = this.state;\n if (!model) {\n return;\n }\n const meshProps: MeshProps = {\n pickFeatureIds: Boolean(featureIds)\n };\n const pbrProjectionProps = {\n camera: this.context.viewport.cameraPosition as [number, number, number]\n };\n model.shaderInputs.setProps({\n pbrProjection: pbrProjectionProps,\n mesh: meshProps\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id} = this.props;\n const parsedPBRMaterial = this.parseMaterial(this.props.pbrMaterial, mesh);\n // Keep material to explicitly remove textures\n this.setState({parsedPBRMaterial});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.device, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n bufferLayout: this.getAttributeManager()!.getBufferLayouts(),\n defines: {\n ...shaders.defines,\n ...parsedPBRMaterial?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions ? 1 : 0\n },\n parameters: parsedPBRMaterial?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(material) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const parsedPBRMaterial = this.parseMaterial(material, mesh as Mesh);\n // Keep material to explicitly remove textures\n this.setState({parsedPBRMaterial});\n\n const {pbr_baseColorSampler} = parsedPBRMaterial.bindings;\n const {emptyTexture} = this.state;\n const simpleMeshProps = {\n sampler: pbr_baseColorSampler || emptyTexture,\n hasTexture: Boolean(pbr_baseColorSampler)\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {camera, ...pbrMaterialProps} = {\n ...parsedPBRMaterial.bindings,\n ...parsedPBRMaterial.uniforms\n };\n model.shaderInputs.setProps({simpleMesh: simpleMeshProps, pbrMaterial: pbrMaterialProps});\n }\n }\n\n parseMaterial(material, mesh: Mesh): ParsedPBRMaterial {\n const unlit = Boolean(\n material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture\n );\n\n return parsePBRMaterial(\n this.context.device,\n {unlit, ...material},\n {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n {\n pbrDebug: false,\n lights: true,\n useTangents: false\n }\n );\n }\n\n calculateFeatureIdsPickingColors(attribute) {\n // This updater is only called if featureIds is not null\n const featureIds = this.props.featureIds!;\n const value = new Uint8ClampedArray(featureIds.length * attribute.size);\n\n const pickingColor = [];\n for (let index = 0; index < featureIds.length; index++) {\n this.encodePickingColor(featureIds[index], pickingColor);\n\n value[index * 3] = pickingColor[0];\n value[index * 3 + 1] = pickingColor[1];\n value[index * 3 + 2] = pickingColor[2];\n }\n\n attribute.value = value;\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this.state.parsedPBRMaterial?.generatedTextures.forEach(texture => texture.destroy());\n this.setState({parsedPBRMaterial: null});\n }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ShaderModule} from '@luma.gl/shadertools';\n\nconst uniformBlock = `\\\nuniform meshUniforms {\n bool pickFeatureIds;\n} mesh;\n`;\n\nexport type MeshProps = {\n pickFeatureIds: boolean;\n};\n\nexport const meshUniforms = {\n name: 'mesh',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n pickFeatureIds: 'f32'\n }\n} as const satisfies ShaderModule<MeshProps>;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-vs\n\n// Primitive attributes\nin vec3 positions;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\nin vec4 uvRegions;\nin vec3 featureIdsPickingColors;\n\n// Instance attributes\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin vec3 instanceModelMatrixCol0;\nin vec3 instanceModelMatrixCol1;\nin vec3 instanceModelMatrixCol2;\n\n// Outputs to fragment shader\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nvec2 applyUVRegion(vec2 uv) {\n #ifdef HAS_UV_REGIONS\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryUVRegion.cmn.md\n return fract(uv) * (uvRegions.zw - uvRegions.xy) + uvRegions.xy;\n #else\n return uv;\n #endif\n}\n\nvoid main(void) {\n vec2 uv = applyUVRegion(texCoords);\n geometry.uv = uv;\n\n if (mesh.pickFeatureIds) {\n geometry.pickingColor = featureIdsPickingColors;\n } else {\n geometry.pickingColor = instancePickingColors;\n }\n\n mat3 instanceModelMatrix = mat3(instanceModelMatrixCol0, instanceModelMatrixCol1, instanceModelMatrixCol2);\n\n vTexCoord = uv;\n cameraPosition = project.cameraPosition;\n vColor = vec4(colors * instanceColors.rgb, instanceColors.a);\n\n vec3 pos = (instanceModelMatrix * positions) * simpleMesh.sizeScale;\n vec3 projectedPosition = project_position(positions);\n position_commonspace = vec4(projectedPosition, 1.0);\n gl_Position = project_common_position_to_clipspace(position_commonspace);\n\n geometry.position = position_commonspace;\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n geometry.normal = normals_commonspace;\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n #ifdef MODULE_PBRMATERIAL\n // set PBR data\n pbr_vPosition = geometry.position.xyz;\n #ifdef HAS_NORMALS\n pbr_vNormal = geometry.normal;\n #endif\n\n #ifdef HAS_UV\n pbr_vUV = uv;\n #else\n pbr_vUV = vec2(0., 0.);\n #endif\n geometry.uv = pbr_vUV;\n #endif\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-fs\n\nprecision highp float;\n\nuniform sampler2D sampler;\n\nin vec2 vTexCoord;\nin vec3 cameraPosition;\nin vec3 normals_commonspace;\nin vec4 position_commonspace;\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n \n#ifdef MODULE_PBRMATERIAL\n\n fragColor = vColor * pbr_filterColor(vec4(0));\n geometry.uv = pbr_vUV;\n fragColor.a *= layer.opacity;\n\n#else\n\n geometry.uv = vTexCoord;\n\n vec3 normal;\n if (simpleMesh.flatShading) {\n\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n } else {\n normal = normals_commonspace;\n }\n\n vec4 color = simpleMesh.hasTexture ? texture(sampler, vTexCoord) : vColor;\n vec3 lightColor = lighting_getLightColor(color.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, color.a * layer.opacity);\n\n#endif\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n Color,\n CompositeLayer,\n CompositeLayerProps,\n DefaultProps,\n Layer,\n LayersList,\n log,\n Material,\n TextureSource,\n UpdateParameters\n} from '@deck.gl/core';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\nimport {COORDINATE_SYSTEM} from '@deck.gl/core';\nimport type {MeshAttributes} from '@loaders.gl/schema';\nimport {TerrainWorkerLoader} from '@loaders.gl/terrain';\nimport TileLayer, {TileLayerProps} from '../tile-layer/tile-layer';\nimport type {\n Bounds,\n GeoBoundingBox,\n TileBoundingBox,\n TileLoadProps,\n ZRange\n} from '../tileset-2d/index';\nimport {Tile2DHeader, urlType, getURLFromTemplate, URLTemplate} from '../tileset-2d/index';\n\nconst DUMMY_DATA = [1];\n\nconst defaultProps: DefaultProps<TerrainLayerProps> = {\n ...TileLayer.defaultProps,\n // Image url that encodes height data\n elevationData: urlType,\n // Image url to use as texture\n texture: {...urlType, optional: true},\n // Martini error tolerance in meters, smaller number -> more detailed mesh\n meshMaxError: {type: 'number', value: 4.0},\n // Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates\n bounds: {type: 'array', value: null, optional: true, compare: true},\n // Color to use if texture is unavailable\n color: {type: 'color', value: [255, 255, 255]},\n // Object to decode height data, from (r, g, b) to height in meters\n elevationDecoder: {\n type: 'object',\n value: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n }\n },\n // Supply url to local terrain worker bundle. Only required if running offline and cannot access CDN.\n workerUrl: '',\n // Same as SimpleMeshLayer wireframe\n wireframe: false,\n material: true,\n\n loaders: [TerrainWorkerLoader]\n};\n\n// Turns array of templates into a single string to work around shallow change\nfunction urlTemplateToUpdateTrigger(template: URLTemplate): string {\n if (Array.isArray(template)) {\n return template.join(';');\n }\n return template || '';\n}\n\ntype ElevationDecoder = {rScaler: number; gScaler: number; bScaler: number; offset: number};\ntype TerrainLoadProps = {\n bounds: Bounds;\n elevationData: string | null;\n elevationDecoder: ElevationDecoder;\n meshMaxError: number;\n signal?: AbortSignal;\n};\n\ntype MeshAndTexture = [MeshAttributes | null, TextureSource | null];\n\n/** All properties supported by TerrainLayer */\nexport type TerrainLayerProps = _TerrainLayerProps &\n TileLayerProps<MeshAndTexture> &\n CompositeLayerProps;\n\n/** Props added by the TerrainLayer */\ntype _TerrainLayerProps = {\n /** Image url that encodes height data. **/\n elevationData: URLTemplate;\n\n /** Image url to use as texture. **/\n texture?: URLTemplate;\n\n /** Martini error tolerance in meters, smaller number -> more detailed mesh. **/\n meshMaxError?: number;\n\n /** Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates. **/\n bounds?: Bounds | null;\n\n /** Color to use if texture is unavailable. **/\n color?: Color;\n\n /** Object to decode height data, from (r, g, b) to height in meters. **/\n elevationDecoder?: ElevationDecoder;\n\n /** Whether to render the mesh in wireframe mode. **/\n wireframe?: boolean;\n\n /** Material props for lighting effect. **/\n material?: Material;\n\n /**\n * @deprecated Use `loadOptions.terrain.workerUrl` instead\n */\n workerUrl?: string;\n};\n\n/** Render mesh surfaces from height map images. */\nexport default class TerrainLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TerrainLayerProps & Required<TileLayerProps<MeshAndTexture>>>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TerrainLayer';\n\n state!: {\n isTiled?: boolean;\n terrain?: MeshAttributes;\n zRange?: ZRange | null;\n };\n\n updateState({props, oldProps}: UpdateParameters<this>): void {\n const elevationDataChanged = props.elevationData !== oldProps.elevationData;\n if (elevationDataChanged) {\n const {elevationData} = props;\n const isTiled =\n elevationData && (Array.isArray(elevationData) || isTileSetURL(elevationData));\n this.setState({isTiled});\n }\n\n // Reloading for single terrain mesh\n const shouldReload =\n elevationDataChanged ||\n props.meshMaxError !== oldProps.meshMaxError ||\n props.elevationDecoder !== oldProps.elevationDecoder ||\n props.bounds !== oldProps.bounds;\n\n if (!this.state.isTiled && shouldReload) {\n // When state.isTiled, elevationData cannot be an array\n const terrain = this.loadTerrain(props as TerrainLoadProps);\n this.setState({terrain});\n }\n\n // TODO - remove in v9\n // @ts-ignore\n if (props.workerUrl) {\n log.removed('workerUrl', 'loadOptions.terrain.workerUrl')();\n }\n }\n\n loadTerrain({\n elevationData,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n }: TerrainLoadProps): Promise<MeshAttributes> | null {\n if (!elevationData) {\n return null;\n }\n let loadOptions = this.getLoadOptions();\n loadOptions = {\n ...loadOptions,\n terrain: {\n skirtHeight: this.state.isTiled ? meshMaxError * 2 : 0,\n ...loadOptions?.terrain,\n bounds,\n meshMaxError,\n elevationDecoder\n }\n };\n const {fetch} = this.props;\n return fetch(elevationData, {propName: 'elevationData', layer: this, loadOptions, signal});\n }\n\n getTiledTerrainData(tile: TileLoadProps): Promise<MeshAndTexture> {\n const {elevationData, fetch, texture, elevationDecoder, meshMaxError} = this.props;\n const {viewport} = this.context;\n const dataUrl = getURLFromTemplate(elevationData, tile);\n const textureUrl = texture && getURLFromTemplate(texture, tile);\n\n const {signal} = tile;\n let bottomLeft = [0, 0] as [number, number];\n let topRight = [0, 0] as [number, number];\n if (viewport.isGeospatial) {\n const bbox = tile.bbox as GeoBoundingBox;\n bottomLeft = viewport.projectFlat([bbox.west, bbox.south]);\n topRight = viewport.projectFlat([bbox.east, bbox.north]);\n } else {\n const bbox = tile.bbox as Exclude<TileBoundingBox, GeoBoundingBox>;\n bottomLeft = [bbox.left, bbox.bottom];\n topRight = [bbox.right, bbox.top];\n }\n const bounds: Bounds = [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]];\n\n const terrain = this.loadTerrain({\n elevationData: dataUrl,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n });\n const surface = textureUrl\n ? // If surface image fails to load, the tile should still be displayed\n fetch(textureUrl, {propName: 'texture', layer: this, loaders: [], signal}).catch(_ => null)\n : Promise.resolve(null);\n\n return Promise.all([terrain, surface]);\n }\n\n renderSubLayers(\n props: TileLayerProps<MeshAndTexture> & {\n id: string;\n data: MeshAndTexture;\n tile: Tile2DHeader<MeshAndTexture>;\n }\n ) {\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n\n const {color, wireframe, material} = this.props;\n const {data} = props;\n\n if (!data) {\n return null;\n }\n\n const [mesh, texture] = data;\n\n return new SubLayerClass(props, {\n data: DUMMY_DATA,\n mesh,\n texture,\n _instanced: false,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n getPosition: d => [0, 0, 0],\n getColor: color,\n wireframe,\n material\n });\n }\n\n // Update zRange of viewport\n onViewportLoad(tiles?: Tile2DHeader<MeshAndTexture>[]): void {\n if (!tiles) {\n return;\n }\n\n const {zRange} = this.state;\n const ranges = tiles\n .map(tile => tile.content)\n .filter(Boolean)\n .map(arr => {\n // @ts-ignore\n const bounds = arr[0].header.boundingBox;\n return bounds.map(bound => bound[2]);\n });\n if (ranges.length === 0) {\n return;\n }\n const minZ = Math.min(...ranges.map(x => x[0]));\n const maxZ = Math.max(...ranges.map(x => x[1]));\n\n if (!zRange || minZ < zRange[0] || maxZ > zRange[1]) {\n this.setState({zRange: [minZ, maxZ]});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {\n color,\n material,\n elevationData,\n texture,\n wireframe,\n meshMaxError,\n elevationDecoder,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n } = this.props;\n\n if (this.state.isTiled) {\n return new TileLayer<MeshAndTexture>(\n this.getSubLayerProps({\n id: 'tiles'\n }),\n {\n getTileData: this.getTiledTerrainData.bind(this),\n renderSubLayers: this.renderSubLayers.bind(this),\n updateTriggers: {\n getTileData: {\n elevationData: urlTemplateToUpdateTrigger(elevationData),\n texture: urlTemplateToUpdateTrigger(texture),\n meshMaxError,\n elevationDecoder\n }\n },\n onViewportLoad: this.onViewportLoad.bind(this),\n zRange: this.state.zRange || null,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n }\n );\n }\n\n if (!elevationData) {\n return null;\n }\n\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n return new SubLayerClass(\n this.getSubLayerProps({\n id: 'mesh'\n }),\n {\n data: DUMMY_DATA,\n mesh: this.state.terrain,\n texture,\n _instanced: false,\n getPosition: d => [0, 0, 0],\n getColor: color,\n material,\n wireframe\n }\n );\n }\n}\n\nconst isTileSetURL = (url: string): boolean =>\n url.includes('{x}') && (url.includes('{y}') || url.includes('{-y}'));\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n GetPickingInfoParams,\n Viewport,\n COORDINATE_SYSTEM,\n DefaultProps\n} from '@deck.gl/core';\nimport {GeoJsonLayer, GeoJsonLayerProps} from '@deck.gl/layers';\nimport {ClipExtension} from '@deck.gl/extensions';\n\nimport {Matrix4} from '@math.gl/core';\nimport {MVTWorkerLoader} from '@loaders.gl/mvt';\nimport {binaryToGeojson} from '@loaders.gl/gis';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatureCollection} from '@loaders.gl/schema';\nimport type {Feature, Geometry} from 'geojson';\n\nimport {transform} from './coordinate-transform';\nimport findIndexBinary from './find-index-binary';\n\nimport TileLayer, {TileLayerPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';\n\nimport type {Tileset2DProps, TileLoadProps, GeoBoundingBox} from '../tileset-2d/index';\nimport {\n urlType,\n Tileset2D,\n Tile2DHeader,\n getURLFromTemplate,\n URLTemplate,\n isGeoBoundingBox,\n isURLTemplate\n} from '../tileset-2d/index';\n\nconst WORLD_SIZE = 512;\n\nconst defaultProps: DefaultProps<MVTLayerProps> = {\n ...GeoJsonLayer.defaultProps,\n data: urlType,\n onDataLoad: {type: 'function', value: null, optional: true, compare: false},\n uniqueIdProperty: '',\n highlightedFeatureId: null,\n loaders: [MVTWorkerLoader],\n binary: true\n};\n\nexport type TileJson = {\n tilejson: string;\n tiles: string[];\n // eslint-disable-next-line camelcase\n vector_layers: any[];\n attribution?: string;\n scheme?: string;\n maxzoom?: number;\n minzoom?: number;\n version?: string;\n};\n\ntype ParsedMvtTile = Feature[] | BinaryFeatureCollection;\n\nexport type MVTLayerPickingInfo<FeaturePropertiesT = {}> = TileLayerPickingInfo<\n ParsedMvtTile,\n PickingInfo<Feature<Geometry, FeaturePropertiesT>>\n>;\n\n/** All props supported by the MVTLayer */\nexport type MVTLayerProps<FeaturePropertiesT = unknown> = _MVTLayerProps<FeaturePropertiesT> &\n Omit<TileLayerProps<ParsedMvtTile>, 'data'>;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps<FeaturePropertiesT> = Omit<\n GeoJsonLayerProps<FeaturePropertiesT>,\n 'data'\n> & {\n data: TileJson | URLTemplate;\n\n /** Called if `data` is a TileJSON URL when it is successfully fetched. */\n onDataLoad?: ((tilejson: TileJson | null) => void) | null;\n\n /** Needed for highlighting a feature split across two or more tiles. */\n uniqueIdProperty?: string;\n\n /** A feature with ID corresponding to the supplied value will be highlighted. */\n highlightedFeatureId?: string | number | null;\n\n /**\n * Use tile data in binary format.\n *\n * @default true\n */\n binary?: boolean;\n\n /**\n * Loaders used to transform tiles into `data` property passed to `renderSubLayers`.\n *\n * @default [MVTWorkerLoader] from `@loaders.gl/mvt`\n */\n loaders?: Loader[];\n};\n\ntype ContentWGS84Cache = {_contentWGS84?: Feature[]};\n\n/** Render data formatted as [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/). */\nexport default class MVTLayer<\n FeaturePropertiesT = any,\n ExtraProps extends {} = {}\n> extends TileLayer<ParsedMvtTile, Required<_MVTLayerProps<FeaturePropertiesT>> & ExtraProps> {\n static layerName = 'MVTLayer';\n static defaultProps = defaultProps;\n\n state!: TileLayer<ParsedMvtTile>['state'] & {\n binary: boolean;\n data: URLTemplate;\n tileJSON: TileJson | null;\n highlightColor?: number[];\n hoveredFeatureId: number | string | null;\n hoveredFeatureLayerName: string | null;\n };\n\n initializeState(): void {\n super.initializeState();\n // GlobeView doesn't work well with binary data\n const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;\n this.setState({\n binary,\n data: null,\n tileJSON: null,\n hoveredFeatureId: null,\n hoveredFeatureLayerName: null\n });\n }\n\n get isLoaded(): boolean {\n return Boolean(this.state?.data && super.isLoaded);\n }\n\n updateState({props, oldProps, context, changeFlags}: UpdateParameters<this>) {\n if (changeFlags.dataChanged) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._updateTileData();\n }\n\n if (this.state?.data) {\n super.updateState({props, oldProps, context, changeFlags});\n this._setWGS84PropertyForTiles();\n }\n const {highlightColor} = props;\n if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {\n this.setState({highlightColor});\n }\n }\n\n /* eslint-disable complexity */\n private async _updateTileData(): Promise<void> {\n let data = this.props.data;\n let tileJSON: TileJson | null = null;\n\n if (typeof data === 'string' && !isURLTemplate(data)) {\n const {onDataLoad, fetch} = this.props;\n this.setState({data: null, tileJSON: null});\n try {\n tileJSON = await fetch(data, {propName: 'data', layer: this, loaders: []});\n } catch (error: any) {\n this.raiseError(error, 'loading TileJSON');\n data = null;\n }\n\n if (onDataLoad) {\n onDataLoad(tileJSON, {propName: 'data', layer: this});\n }\n } else if (data && typeof data === 'object' && 'tilejson' in data) {\n tileJSON = data;\n }\n\n if (tileJSON) {\n data = tileJSON.tiles;\n }\n\n this.setState({data, tileJSON});\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const opts = super._getTilesetOptions();\n const tileJSON: TileJson | null = this.state.tileJSON;\n const {minZoom, maxZoom} = this.props;\n\n if (tileJSON) {\n if (Number.isFinite(tileJSON.minzoom) && (tileJSON.minzoom as number) > (minZoom as number)) {\n opts.minZoom = tileJSON.minzoom;\n }\n\n if (\n Number.isFinite(tileJSON.maxzoom) &&\n (!Number.isFinite(maxZoom) || (tileJSON.maxzoom as number) < (maxZoom as number))\n ) {\n opts.maxZoom = tileJSON.maxzoom;\n }\n }\n return opts;\n }\n\n /* eslint-disable complexity */\n\n renderLayers(): Layer | null | LayersList {\n if (!this.state?.data) return null;\n return super.renderLayers();\n }\n\n getTileData(loadProps: TileLoadProps): Promise<ParsedMvtTile> {\n const {data, binary} = this.state;\n const {index, signal} = loadProps;\n\n const url = getURLFromTemplate(data, loadProps);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n let loadOptions = this.getLoadOptions();\n const {fetch} = this.props;\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf',\n mvt: {\n ...loadOptions?.mvt,\n coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',\n tileIndex: index\n // Local worker debug\n // workerUrl: `modules/mvt/dist/mvt-loader.worker.js`\n // Set worker to null to skip web workers\n // workerUrl: null\n },\n gis: binary ? {format: 'binary'} : {}\n };\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: ParsedMvtTile;\n _offset: number;\n tile: Tile2DHeader<ParsedMvtTile>;\n }\n ): Layer | null | LayersList {\n const {x, y, z} = props.tile.index;\n const worldScale = Math.pow(2, z);\n\n const xScale = WORLD_SIZE / worldScale;\n const yScale = -xScale;\n\n const xOffset = (WORLD_SIZE * x) / worldScale;\n const yOffset = WORLD_SIZE * (1 - y / worldScale);\n\n const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);\n\n props.autoHighlight = false;\n\n if (!this.context.viewport.resolution) {\n props.modelMatrix = modelMatrix;\n props.coordinateOrigin = [xOffset, yOffset, 0];\n props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;\n props.extensions = [...(props.extensions || []), new ClipExtension()];\n }\n\n const subLayers = super.renderSubLayers(props);\n\n if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {\n log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();\n }\n\n return subLayers;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {uniqueIdProperty} = this.props;\n\n const {hoveredFeatureId, hoveredFeatureLayerName} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId: string | number | null = null;\n let newHoveredFeatureLayerName: string | null = null;\n\n if (hoveredFeature) {\n newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);\n newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);\n }\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n if (\n hoveredFeatureId !== newHoveredFeatureId ||\n hoveredFeatureLayerName !== newHoveredFeatureLayerName\n ) {\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId,\n hoveredFeatureLayerName: newHoveredFeatureLayerName\n });\n }\n }\n\n protected _isWGS84(): boolean {\n return Boolean(this.context.viewport.resolution);\n }\n\n getPickingInfo(params: GetPickingInfoParams): MVTLayerPickingInfo<FeaturePropertiesT> {\n const info = super.getPickingInfo(params);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatureCollection, {\n globalFeatureId: info.index\n }) as Feature;\n }\n if (info.object && !this._isWGS84()) {\n info.object = transformTileCoordsToWGS84(\n info.object,\n info.tile!.bbox as GeoBoundingBox, // eslint-disable-line\n this.context.viewport\n );\n }\n\n return info;\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader<ParsedMvtTile>): Record<string, any> {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n private getHighlightedObjectIndex(tile: Tile2DHeader<ParsedMvtTile>): number {\n const {hoveredFeatureId, hoveredFeatureLayerName, binary} = this.state;\n const {uniqueIdProperty, highlightedFeatureId} = this.props;\n const data = tile.content;\n\n const isHighlighted = isFeatureIdDefined(highlightedFeatureId);\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;\n\n if (!isFeatureIdPresent) {\n return -1;\n }\n\n const featureIdToHighlight = isHighlighted ? highlightedFeatureId! : hoveredFeatureId!;\n\n // Iterable data\n if (Array.isArray(data)) {\n return data.findIndex(feature => {\n const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;\n const isMatchingLayer =\n isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;\n return isMatchingId && isMatchingLayer;\n });\n\n // Non-iterable data\n } else if (data && binary) {\n // Get the feature index of the selected item to highlight\n return findIndexBinary(\n data,\n uniqueIdProperty,\n featureIdToHighlight,\n isHighlighted ? '' : hoveredFeatureLayerName!\n );\n }\n\n return -1;\n }\n\n private _pickObjects(maxObjects: number | null): PickingInfo[] {\n const {deck, viewport} = this.context;\n const width = viewport.width;\n const height = viewport.height;\n const x = viewport.x;\n const y = viewport.y;\n const layerIds = [this.id];\n return deck!.pickObjects({x, y, width, height, layerIds, maxObjects});\n }\n\n /** Get the rendered features in the current viewport. */\n getRenderedFeatures(maxFeatures: number | null = null): Feature[] {\n const features = this._pickObjects(maxFeatures);\n const featureCache = new Set();\n const renderedFeatures: Feature[] = [];\n\n for (const f of features) {\n const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);\n\n if (featureId === undefined) {\n // we have no id for the feature, we just add to the list\n renderedFeatures.push(f.object as Feature);\n } else if (!featureCache.has(featureId)) {\n // Add removing duplicates\n featureCache.add(featureId);\n renderedFeatures.push(f.object as Feature);\n }\n }\n\n return renderedFeatures;\n }\n\n private _setWGS84PropertyForTiles(): void {\n const propName = 'dataInWGS84';\n const tileset: Tileset2D = this.state.tileset!;\n\n // @ts-expect-error selectedTiles are always initialized when tile is being processed\n tileset.selectedTiles.forEach((tile: Tile2DHeader & ContentWGS84Cache) => {\n if (!tile.hasOwnProperty(propName)) {\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(tile, propName, {\n get: () => {\n // Still loading or encountered an error\n if (!tile.content) {\n return null;\n }\n\n if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {\n // TODO: @loaders.gl/mvt returns [] when no content. It should return a valid empty binary.\n // https://github.com/visgl/loaders.gl/pull/1137\n return [];\n }\n\n const {bbox} = tile;\n if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {\n // Create a cache to transform only once\n\n const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;\n tile._contentWGS84 = content.map(feature =>\n transformTileCoordsToWGS84(feature, bbox, this.context.viewport)\n );\n }\n return tile._contentWGS84;\n }\n });\n }\n });\n }\n}\n\nfunction getFeatureUniqueId(feature: Feature, uniqueIdProperty: string | undefined) {\n if (feature.properties && uniqueIdProperty) {\n return feature.properties[uniqueIdProperty];\n }\n\n if ('id' in feature) {\n return feature.id;\n }\n\n return undefined;\n}\n\nfunction getFeatureLayerName(feature: Feature): string | null {\n return feature.properties?.layerName || null;\n}\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nfunction transformTileCoordsToWGS84(\n object: Feature,\n bbox: GeoBoundingBox,\n viewport: Viewport\n): Feature {\n const feature = {\n ...object,\n geometry: {\n type: object.geometry.type\n }\n };\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(feature.geometry, 'coordinates', {\n get: () => {\n const wgs84Geom = transform(object.geometry, bbox, viewport);\n return wgs84Geom.coordinates;\n }\n });\n\n return feature as Feature;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Viewport} from '@deck.gl/core';\nimport {lerp} from '@math.gl/core';\nimport {GeoBoundingBox} from '../tileset-2d/index';\n\nconst availableTransformations = {\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon\n};\n\nfunction Point([pointX, pointY]: [number, number], [nw, se]: number[][], viewport: Viewport) {\n const x = lerp(nw[0], se[0], pointX);\n const y = lerp(nw[1], se[1], pointY);\n\n return viewport.unprojectFlat([x, y]);\n}\n\nfunction getPoints(geometry, bbox: number[][], viewport: Viewport) {\n return geometry.map(g => Point(g, bbox, viewport));\n}\n\nfunction MultiPoint(multiPoint, bbox: number[][], viewport: Viewport) {\n return getPoints(multiPoint, bbox, viewport);\n}\n\nfunction LineString(line, bbox: number[][], viewport: Viewport) {\n return getPoints(line, bbox, viewport);\n}\n\nfunction MultiLineString(multiLineString, bbox: number[][], viewport: Viewport) {\n return multiLineString.map(lineString => LineString(lineString, bbox, viewport));\n}\n\nfunction Polygon(polygon, bbox: number[][], viewport: Viewport) {\n return polygon.map(polygonRing => getPoints(polygonRing, bbox, viewport));\n}\n\nfunction MultiPolygon(multiPolygon, bbox: number[][], viewport: Viewport) {\n return multiPolygon.map(polygon => Polygon(polygon, bbox, viewport));\n}\n\nexport function transform(geometry, bbox: GeoBoundingBox, viewport: Viewport) {\n const nw = viewport.projectFlat([bbox.west, bbox.north]);\n const se = viewport.projectFlat([bbox.east, bbox.south]);\n const projectedBbox = [nw, se];\n\n return {\n ...geometry,\n coordinates: availableTransformations[geometry.type](\n geometry.coordinates,\n projectedBbox,\n viewport\n )\n };\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {\n BinaryFeatureCollection,\n BinaryLineFeature,\n BinaryPointFeature,\n BinaryPolygonFeature\n} from '@loaders.gl/schema';\n\ntype FeatureTypes = BinaryPointFeature | BinaryLineFeature | BinaryPolygonFeature;\n\nconst GEOM_TYPES = ['points', 'lines', 'polygons'];\n/**\n * Return the index of feature (numericProps or featureIds) for given feature id\n * Example: findIndexBinary(data, 'id', 33) will return the index in the array of numericProps\n * of the feature 33.\n */\nexport default function findIndexBinary(\n data: BinaryFeatureCollection, // The data in binary format\n uniqueIdProperty: string, // Name of the unique id property\n featureId: string | number, // feature id to find\n layerName: string | null // the layer to search in\n): number {\n for (const gt of GEOM_TYPES) {\n const index = data[gt] && findIndexByType(data[gt], uniqueIdProperty, featureId, layerName);\n if (index >= 0) {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction findIndexByType(\n geomData: FeatureTypes,\n uniqueIdProperty: string,\n featureId: string | number,\n layerName: string | null\n): number {\n const featureIds = geomData.featureIds.value;\n\n if (!featureIds.length) {\n return -1;\n }\n\n let startFeatureIndex = 0;\n let endFeatureIndex = featureIds[featureIds.length - 1] + 1;\n if (layerName) {\n const layerRange = getLayerRange(geomData, layerName);\n if (layerRange) {\n startFeatureIndex = layerRange[0];\n endFeatureIndex = layerRange[1] + 1;\n } else {\n return -1;\n }\n }\n\n // Look for the uniqueIdProperty\n let featureIndex = -1;\n if (uniqueIdProperty in geomData.numericProps) {\n const vertexIndex = geomData.numericProps[uniqueIdProperty].value.findIndex(\n (x, i) =>\n x === featureId && featureIds[i] >= startFeatureIndex && featureIds[i] < endFeatureIndex\n );\n return vertexIndex >= 0 ? geomData.globalFeatureIds.value[vertexIndex] : -1;\n } else if (uniqueIdProperty) {\n featureIndex = findIndex(\n geomData.properties,\n elem => elem[uniqueIdProperty] === featureId,\n startFeatureIndex,\n endFeatureIndex\n );\n } else if (geomData.fields) {\n featureIndex = findIndex(\n geomData.fields,\n (elem: any) => elem.id === featureId,\n startFeatureIndex,\n endFeatureIndex\n );\n }\n return featureIndex >= 0 ? getGlobalFeatureId(geomData, featureIndex) : -1;\n}\n\ntype LayerRange = [firstFeatureIndex: number, lastFeatureIndex: number];\n\n// Returns [firstFeatureIndex, lastFeatureIndex]\n// MVTLoader parses tiles layer-by-layer, so each layer is a continuous range\nfunction getLayerRange(\n geomData: FeatureTypes & {\n __layers?: Record<string, LayerRange>;\n },\n layerName: string\n): LayerRange | undefined {\n if (!geomData.__layers) {\n // Cache a map from properties.layerName to index ranges\n const layerNames: Record<string, LayerRange> = {};\n const {properties} = geomData;\n for (let i = 0; i < properties.length; i++) {\n const {layerName: key} = properties[i] as Record<string, any>;\n if (!key) {\n // ignore\n } else if (layerNames[key]) {\n layerNames[key][1] = i;\n } else {\n layerNames[key] = [i, i];\n }\n }\n geomData.__layers = layerNames;\n }\n return geomData.__layers[layerName];\n}\n\n// Returns global feature id\nfunction getGlobalFeatureId(geomData, featureIndex: number) {\n if (!geomData.__ids) {\n // Cache a map from featureId to globalFeatureId\n const result: string[] = [];\n const featureIds = geomData.featureIds.value;\n const globalFeatureIds = geomData.globalFeatureIds.value;\n for (let i = 0; i < featureIds.length; i++) {\n result[featureIds[i]] = globalFeatureIds[i];\n }\n geomData.__ids = result;\n }\n return geomData.__ids[featureIndex];\n}\n\n// Like array.findIndex, but only search within a range\nfunction findIndex<T>(\n array: T[],\n predicate: (v: T, index: number) => boolean,\n startIndex: number,\n endIndex: number\n): number {\n for (let i = startIndex; i < endIndex; i++) {\n if (predicate(array[i], i)) {\n return i;\n }\n }\n return -1;\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nconst BASE32_CODES = '0123456789bcdefghjkmnpqrstuvwxyz';\nconst BASE32_CODES_DICT = {};\nfor (let i = 0; i < BASE32_CODES.length; i++) {\n BASE32_CODES_DICT[BASE32_CODES.charAt(i)] = i;\n}\n\nconst MIN_LAT = -90;\nconst MAX_LAT = 90;\nconst MIN_LON = -180;\nconst MAX_LON = 180;\n\n// Adapted from ngeohash decode_bbox\nexport function getGeohashBounds(geohash: string): number[] {\n let isLon = true;\n let maxLat = MAX_LAT;\n let minLat = MIN_LAT;\n let maxLon = MAX_LON;\n let minLon = MIN_LON;\n let mid: number;\n\n let hashValue = 0;\n for (let i = 0, l = geohash.length; i < l; i++) {\n const code = geohash[i].toLowerCase();\n hashValue = BASE32_CODES_DICT[code];\n\n for (let bits = 4; bits >= 0; bits--) {\n const bit = (hashValue >> bits) & 1;\n if (isLon) {\n mid = (maxLon + minLon) / 2;\n if (bit === 1) {\n minLon = mid;\n } else {\n maxLon = mid;\n }\n } else {\n mid = (maxLat + minLat) / 2;\n if (bit === 1) {\n minLat = mid;\n } else {\n maxLat = mid;\n }\n }\n isLon = !isLon;\n }\n }\n\n return [minLat, minLon, maxLat, maxLon];\n}\n\nexport function getGeohashPolygon(geohash: string): number[] {\n const [s, w, n, e] = getGeohashBounds(geohash);\n\n return [e, n, e, s, w, s, w, n, e, n];\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getGeohashPolygon} from './geohash-utils';\n\nconst defaultProps: DefaultProps<GeohashLayerProps> = {\n getGeohash: {type: 'accessor', value: (d: any) => d.geohash}\n};\n\n/** All properties supported by GeohashLayer. */\nexport type GeohashLayerProps<DataT = unknown> = _GeohashLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by GeohashLayer. */\ntype _GeohashLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the geohash string identifier.\n *\n * By default, it reads `geohash` property of data object.\n */\n getGeohash?: AccessorFunction<DataT, string>;\n};\n\n/** Render filled and/or stroked polygons based on the [Geohash](https://en.wikipedia.org/wiki/Geohash) geospatial indexing system. */\nexport default class GeohashLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_GeohashLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'GeohashLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getGeohash} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => getGeohashPolygon(getGeohash(x, objectInfo))\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_core", "defaultProps", "import_core", "import_layers", "defaultProps", "deepEqual", "import_layers", "defaultProps", "Long", "import_long", "Long", "defaultProps", "import_web_mercator", "defaultProps", "import_core", "import_layers", "import_core", "import_core", "import_web_mercator", "TILE_SIZE", "TILE_SIZE", "import_core", "defaultProps", "flatten", "import_layers", "defaultProps", "import_h3_js", "import_core", "import_h3_js", "import_core", "import_layers", "defaultProps", "defaultProps", "import_engine", "import_core", "import_layers", "import_mesh_layers", "uniformBlock", "defaultProps", "import_core", "defaultProps", "import_core", "import_mesh_layers", "defaultProps", "import_core", "import_layers", "import_core", "defaultProps", "defaultProps"]
7
7
  }